Ce document explique comment créer vous-même une bibliothèque iOS TensorFlow Lite. Normalement, vous n'avez pas besoin de compiler localement la bibliothèque iOS TensorFlow Lite. Si vous souhaitez simplement l'utiliser, le moyen le plus simple consiste à utiliser les versions stables ou nocturnes préconfigurées des CocoaPods TensorFlow Lite. Consultez le guide de démarrage rapide pour iOS pour savoir comment les utiliser dans vos projets iOS.
Construire localement
Dans certains cas, vous pouvez utiliser un build local de TensorFlow Lite, par exemple lorsque vous souhaitez apporter des modifications locales à TensorFlow Lite et tester ces modifications dans votre application iOS, ou lorsque vous préférez utiliser un framework statique par rapport à notre framework dynamique fourni. Pour créer localement un framework iOS universel pour TensorFlow Lite, vous devez le compiler à l'aide de Bazel sur une machine macOS.
Installer Xcode
Si vous ne l'avez pas déjà fait, vous devez installer Xcode 8 ou une version ultérieure, ainsi que les outils, à l'aide de xcode-select
:
xcode-select --install
S'il s'agit d'une nouvelle installation, vous devez accepter le contrat de licence pour tous les utilisateurs à l'aide de la commande suivante:
sudo xcodebuild -license accept
Installer Bazel
Bazel est le système de compilation principal de TensorFlow. Installez Bazel conformément aux instructions disponibles sur le site Web de Bazel. Veillez à choisir une version comprise entre _TF_MIN_BAZEL_VERSION
et _TF_MAX_BAZEL_VERSION
dans le fichier configure.py
à la racine du dépôt tensorflow
.
Configurer WORKSPACE et .bazelrc
Exécutez le script ./configure
dans le répertoire de paiement TensorFlow racine, puis répondez "Yes" (Oui) lorsque le script vous demande si vous souhaitez compiler TensorFlow pour iOS.
Créer le framework dynamique TensorFlowLiteC (recommandé)
Une fois Bazel correctement configuré et compatible avec iOS, vous pouvez créer le framework TensorFlowLiteC
à l'aide de la commande suivante.
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_framework
Cette commande génère le fichier TensorFlowLiteC_framework.zip
dans le répertoire bazel-bin/tensorflow/lite/ios/
du répertoire racine TensorFlow.
Par défaut, le framework généré contient un binaire "fat" contenant armv7, arm64 et x86_64 (mais pas d'i386). Pour afficher la liste complète des indicateurs de compilation utilisés lorsque vous spécifiez --config=ios_fat
, consultez la section sur les configurations iOS dans le fichier .bazelrc
.
Créer le framework statique TensorFlowLiteC
Par défaut, nous ne distribuons le framework dynamique que via CocoaPods. Si vous préférez utiliser le framework statique, vous pouvez créer le framework statique TensorFlowLiteC
à l'aide de la commande suivante:
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_static_framework
La commande génère un fichier nommé TensorFlowLiteC_static_framework.zip
sous le répertoire bazel-bin/tensorflow/lite/ios/
de votre répertoire racine TensorFlow. Ce framework statique peut être utilisé exactement de la même manière que le framework dynamique.
Créer de manière sélective des frameworks TFLite
Vous pouvez créer des frameworks plus petits ciblant uniquement un ensemble de modèles à l'aide d'une compilation sélective, ce qui ignorera les opérations inutilisées de votre ensemble de modèles et n'inclura que les noyaux d'opérations requis pour exécuter l'ensemble de modèles donné. La commande est la suivante:
bash tensorflow/lite/ios/build_frameworks.sh \
--input_models=model1.tflite,model2.tflite \
--target_archs=x86_64,armv7,arm64
La commande ci-dessus génère le framework statique bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip
pour les opérations intégrées et personnalisées de TensorFlow Lite. Elle génère éventuellement le framework statique bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
si vos modèles contiennent des opérations TensorFlow Lite sélectionnées. Notez que vous pouvez utiliser l'option --target_archs
pour spécifier vos architectures de déploiement.
Utiliser dans votre propre application
Développeurs CocoaPods
Il existe trois CocoaPods pour TensorFlow Lite:
TensorFlowLiteSwift
: fournit les API Swift pour TensorFlow Lite.TensorFlowLiteObjC
: fournit les API Objective-C pour TensorFlow Lite.TensorFlowLiteC
: pod de base commun, qui intègre l'environnement d'exécution principal de TensorFlow Lite et expose les API C de base utilisées par les deux pods ci-dessus. Ils ne sont pas destinés à être utilisés directement par les utilisateurs.
En tant que développeur, vous devez choisir le pod TensorFlowLiteSwift
ou TensorFlowLiteObjC
en fonction du langage dans lequel votre application est écrite, mais pas les deux. La procédure exacte d'utilisation des builds locaux de TensorFlow Lite diffère selon la partie que vous souhaitez compiler.
Utiliser des API locales Swift ou Objective-C
Si vous utilisez CocoaPods et que vous souhaitez uniquement tester certaines modifications locales apportées aux API Swift ou aux API Objective-C de TensorFlow Lite, suivez les étapes ci-dessous.
Modifiez les API Swift ou Objective-C dans votre règlement
tensorflow
.Ouvrez le fichier
TensorFlowLite(Swift|ObjC).podspec
et modifiez cette ligne:
s.dependency 'TensorFlowLiteC', "#{s.version}"
et définissez-la comme suit:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
Cela vous permet de vous assurer que vous compilez vos API Swift ou Objective-C avec la dernière version nocturne des APITensorFlowLiteC
disponible (créée chaque nuit entre 1h et 4h, heure du Pacifique) plutôt que la version stable, qui peut être obsolète par rapport à votre règlementtensorflow
local. Vous pouvez également choisir de publier votre propre version deTensorFlowLiteC
et de l'utiliser (consultez la section Utiliser le cœur local de TensorFlow Lite ci-dessous).Dans le fichier
Podfile
de votre projet iOS, modifiez la dépendance comme suit pour qu'elle pointe vers le chemin d'accès local au répertoire racinetensorflow
.
Pour Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
Pour Objective-C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
Mettez à jour l'installation de votre pod à partir du répertoire racine de votre projet iOS.
$ pod update
Rouvrez l'espace de travail généré (
<project>.xcworkspace
) et recompilez votre application dans Xcode.
Utiliser le noyau TensorFlow Lite local
Vous pouvez configurer un dépôt de spécifications CocoaPods privé et publier votre framework TensorFlowLiteC
personnalisé dans votre dépôt privé. Vous pouvez copier ce fichier podspec et modifier quelques valeurs:
...
s.version = <your_desired_version_tag>
...
# Note the `///`, two from the `file://` and one from the `/path`.
s.source = { :http => "file:///path/to/TensorFlowLiteC_framework.zip" }
...
s.vendored_frameworks = 'TensorFlowLiteC.framework'
...
Après avoir créé votre fichier TensorFlowLiteC.podspec
, vous pouvez suivre les instructions d'utilisation de CocoaPods privés afin de l'utiliser dans votre propre projet. Vous pouvez également modifier le TensorFlowLite(Swift|ObjC).podspec
pour qu'il pointe vers votre pod TensorFlowLiteC
personnalisé et utiliser un pod Swift ou Objective-C dans votre projet d'application.
Développeurs Bazel
Si vous utilisez Bazel comme outil de compilation principal, vous pouvez simplement ajouter la dépendance TensorFlowLite
à votre cible dans votre fichier BUILD
.
Pour Swift:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
Pour Objective-C:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
Lorsque vous compilez votre projet d'application, toutes les modifications apportées à la bibliothèque TensorFlow Lite sont intégrées et intégrées à votre application.
Modifier directement les paramètres du projet Xcode
Nous vous recommandons vivement d'utiliser CocoaPods ou Bazel pour ajouter la dépendance TensorFlow Lite à votre projet. Si vous souhaitez toujours ajouter le framework TensorFlowLiteC
manuellement, vous devez ajouter le framework TensorFlowLiteC
en tant que framework intégré à votre projet d'application. Décompressez le fichier TensorFlowLiteC_framework.zip
généré à partir de la compilation ci-dessus pour obtenir le répertoire TensorFlowLiteC.framework
. Ce répertoire est le framework réel
que Xcode peut comprendre.
Une fois que vous avez préparé le TensorFlowLiteC.framework
, vous devez d'abord l'ajouter en tant que binaire intégré à la cible de votre application. La section exacte des paramètres du projet peut varier en fonction de votre version de Xcode.
- Xcode 11: accédez à l'onglet "General" (Général) de l'éditeur de projet pour la cible de votre application, puis ajoutez
TensorFlowLiteC.framework
dans la section "Frameworks, bibliothèques et contenu intégré". - Xcode 10 et versions antérieures: accédez à l'onglet "General" (Général) de l'éditeur de projet pour la cible de votre application, puis ajoutez
TensorFlowLiteC.framework
sous "Embedded Binaires" (Binaires intégrés). Le framework doit également être ajouté automatiquement dans la section "Frameworks et bibliothèques associés".
Lorsque vous ajoutez le framework en tant que binaire intégré, Xcode met également à jour l'entrée "Chemins de recherche de framework" sous l'onglet "Paramètres de compilation" pour inclure le répertoire parent de votre framework. Si ce n'est pas le cas automatiquement, vous devez ajouter manuellement le répertoire parent du répertoire TensorFlowLiteC.framework
.
Une fois ces deux paramètres définis, vous devriez pouvoir importer et appeler l'API C de TensorFlow Lite, définie par les fichiers d'en-tête du répertoire TensorFlowLiteC.framework/Headers
.