Ce document explique comment créer vous-même une bibliothèque iOS LiteRT. Normalement, vous n'avez pas besoin de compiler en local la bibliothèque iOS LiteRT. Si vous Si vous souhaitez l'utiliser, le plus simple est d'utiliser la version stable prédéfinie des CocoaPods LiteRT. Voir iOS de démarrage rapide pour savoir comment les utiliser sur vos projets.
Compiler localement
Dans certains cas, vous pouvez utiliser un build local de LiteRT, pour par exemple lorsque vous voulez apporter des modifications locales à LiteRT et les tester dans votre application iOS, ou si vous préférez utiliser une structure statique dynamique. Pour créer localement un framework iOS universel pour LiteRT, 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
avec xcode-select
:
xcode-select --install
S'il s'agit d'une nouvelle installation, vous devrez accepter le contrat de licence pour tous les utilisateurs avec la commande suivante:
sudo xcodebuild -license accept
Installer Bazel
Bazel est le principal système de compilation de TensorFlow. Installez Bazel conformément à la
disponibles sur le site Web de Bazel. Veillez à choisir un
version comprise entre _TF_MIN_BAZEL_VERSION
et _TF_MAX_BAZEL_VERSION
dans
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 racine de TensorFlow.
réponds "Oui" lorsque le script vous demande si vous souhaitez compiler TensorFlow avec iOS
de l'assistance.
Créer un framework dynamique TensorFlowLiteC (recommandé)
Une fois Bazel correctement configuré avec la prise en charge iOS, vous pouvez compiler
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
sous
bazel-bin/tensorflow/lite/ios/
sous votre répertoire racine TensorFlow.
Par défaut, le framework généré contient un "fat" contenant armv7,
arm64 et x86_64 (mais pas i386). Pour afficher la liste complète des indicateurs de compilation utilisés lorsque
spécifiez --config=ios_fat
, reportez-vous à la section des configurations iOS dans
Fichier .bazelrc
.
Créer un framework statique TensorFlowLiteC
Par défaut, nous ne distribuons le framework dynamique que via CocoaPods. Si vous voulez
Pour utiliser le framework statique à la place, vous pouvez créer l'instance 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
.
dans le répertoire bazel-bin/tensorflow/lite/ios/
sous votre racine TensorFlow
. Ce framework statique peut être utilisé exactement de la même manière que
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 de méthodes ce qui ignore les opérations inutilisées dans votre ensemble de modèles et n'inclut que le module noyaux op nécessaires à l'exécution de 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 TensorFlow
Opérations personnalisées et intégrées Lite ; et, éventuellement, génère le framework statique
bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
si
vos modèles contiennent des opérations TensorFlow. Notez que 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 LiteRT:
TensorFlowLiteSwift
: fournit les API Swift pour LiteRT.TensorFlowLiteObjC
: fournit les API Objective-C pour LiteRT.TensorFlowLiteC
: pod de base commun, qui intègre le noyau LiteRT et expose les API C de base utilisées par les deux pods ci-dessus. Non destiné à être directement utilisés par les utilisateurs.
En tant que développeur, vous devez choisir TensorFlowLiteSwift
ou
TensorFlowLiteObjC
en fonction du langage dans lequel votre application est écrite.
pas les deux. Les étapes exactes pour utiliser les
versions locales de LiteRT diffèrent,
en fonction de la partie exacte
que vous souhaitez construire.
Utiliser des API Swift ou Objective-C locales
Si vous utilisez CocoaPods et que vous ne souhaitez tester que certaines modifications locales apportées au les API Swift ou les API Objective-C de LiteRT, suivez la procédure décrite ici.
Modifiez les API Swift ou Objective-C dans votre règlement
tensorflow
.Ouvrez le fichier
TensorFlowLite(Swift|ObjC).podspec
, puis mettez à jour cette ligne:
s.dependency 'TensorFlowLiteC', "#{s.version}"
doit être:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
Cela permet de s'assurer que vous créez vos API Swift ou Objective-C par rapport à la dernière version nocturne disponible des APITensorFlowLiteC
(créées chaque nuit entre 1h et 4h (heure du Pacifique)) au lieu du , qui peut être obsolète par rapport à votre paiement localtensorflow
. Vous pouvez aussi choisir de publier votre propre versionTensorFlowLiteC
et utilisez cette version (voir la section Utiliser LiteRT local Core ci-dessous).Dans le fichier
Podfile
de votre projet iOS, modifiez la dépendance comme suit : pointez vers le chemin d'accès local de votre répertoire racinetensorflow
.
En Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
Pour Objective-C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
Mettez à jour votre installation de pod à partir du répertoire racine de votre projet iOS.
$ pod update
Rouvrez l'espace de travail généré (
<project>.xcworkspace
) et recréez votre dans Xcode.
Utiliser LiteRT Core local
Vous pouvez configurer un dépôt privé de spécifications CocoaPods et publier votre
TensorFlowLiteC
à votre dépôt privé. Vous pouvez copier ce podspec
fichier et modifiez 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 propre fichier TensorFlowLiteC.podspec
, vous pouvez suivre le
des instructions d'utilisation de CocoaPods privés afin de l'utiliser dans votre
propre projet. Vous pouvez également modifier TensorFlowLite(Swift|ObjC).podspec
pour
pointer vers votre pod TensorFlowLiteC
personnalisé et utiliser Swift ou Objective-C
dans votre projet d'application.
Développeurs Bazel
Si vous utilisez Bazel comme outil de compilation principal, il vous suffit d'ajouter
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, toute modification apportée à la bibliothèque LiteRT être choisi et intégré à votre application.
Modifier directement les paramètres du projet Xcode
Nous vous recommandons vivement d'utiliser CocoaPods ou Bazel pour ajouter LiteRT.
la dépendance
dans votre projet. Si vous souhaitez toujours ajouter TensorFlowLiteC
manuellement, vous devez ajouter le framework TensorFlowLiteC
en tant que
intégré à votre projet d'application. Décompressez le fichier
TensorFlowLiteC_framework.zip
généré à partir de la compilation ci-dessus pour obtenir
TensorFlowLiteC.framework
. Ce répertoire est le framework
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 pour
cela peut différer selon
votre version de Xcode.
- Xcode 11: accédez à l'onglet "Général". de l'éditeur de projet pour la cible de votre application,
et ajoutez
TensorFlowLiteC.framework
sous "Frameworks, libraries and Contenu intégré . - Xcode 10 et versions antérieures: accédez à la section "Général". de l'éditeur de projet pour votre
cible de l'application, puis ajoutez
TensorFlowLiteC.framework
sous "Intégré "Binaries". Le framework doit également être ajouté automatiquement sous Frameworks et bibliothèques" .
Lorsque vous ajoutez le framework en tant que binaire intégré, Xcode met également à jour le
"Chemins de recherche du framework" sous « Build Settings » pour inclure le bloc
de votre framework. Si ce n'est pas le cas, vous
doit ajouter manuellement le répertoire parent de TensorFlowLiteC.framework
.
Une fois ces deux paramètres définis, vous devriez être en mesure d'importer et d'appeler la méthode
L'API C de LiteRT, définie par les fichiers d'en-tête sous
Répertoire TensorFlowLiteC.framework/Headers
.