Questo documento descrive come creare autonomamente una libreria iOS TensorFlow Lite. Normalmente non è necessario creare in locale la libreria iOS TensorFlow Lite per iOS. Se vuoi semplicemente usarlo, il modo più semplice è utilizzare le release stabili predefinite o notturne di TensorFlow Lite CocoaPods. Consulta la guida rapida per iOS per ulteriori dettagli su come utilizzarli nei tuoi progetti iOS.
Costruire localmente
In alcuni casi, potresti voler utilizzare una build locale di TensorFlow Lite, ad esempio se vuoi apportare modifiche locali a TensorFlow Lite e testarle nella tua app per iOS, oppure preferisci usare un framework statico a quello dinamico in dotazione. Per creare un framework iOS universale per TensorFlow Lite in locale, devi crearlo utilizzando Bazel su una macchina macOS.
Installa Xcode
Se non lo hai già fatto, dovrai installare Xcode 8 o versioni successive e gli strumenti utilizzando xcode-select
:
xcode-select --install
Se si tratta di una nuova installazione, dovrai accettare il contratto di licenza per tutti gli utenti con il seguente comando:
sudo xcodebuild -license accept
Installa Bazel
Bazel è il sistema di build principale di TensorFlow. Installa Bazel seguendo le istruzioni sul sito web di Bazel. Assicurati di scegliere una versione compresa tra _TF_MIN_BAZEL_VERSION
e _TF_MAX_BAZEL_VERSION
nel file configure.py
nella directory principale del repository tensorflow
.
Configura WORKSPACE e .bazelrc
Esegui lo script ./configure
nella directory di pagamento principale di TensorFlow e rispondi "Sì" quando lo script ti chiede se vuoi creare TensorFlow con il supporto iOS.
Crea il framework dinamico TensorFlowLiteC (consigliato)
Una volta configurato correttamente Bazel con il supporto iOS, puoi creare il framework TensorFlowLiteC
con il comando seguente.
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_framework
Questo comando genererà il file TensorFlowLiteC_framework.zip
nella directory bazel-bin/tensorflow/lite/ios/
della directory principale di TensorFlow.
Per impostazione predefinita, il framework generato contiene un file binario "fat", contenente armv7,
arm64 e x86_64 (ma non i386). Per visualizzare l'elenco completo dei flag di build utilizzati quando specifichi --config=ios_fat
, consulta la sezione delle configurazioni iOS nel file .bazelrc
.
Crea il framework statico TensorFlowLiteC
Per impostazione predefinita, distribuiamo il framework dinamico solo tramite Cocoapods. Se vuoi utilizzare invece il framework statico, puoi creare il framework statico TensorFlowLiteC
con il comando seguente:
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_static_framework
Il comando genererà un file denominato TensorFlowLiteC_static_framework.zip
nella directory bazel-bin/tensorflow/lite/ios/
nella directory principale
di TensorFlow. Questo framework statico può essere utilizzato esattamente allo stesso modo di quello dinamico.
Crea in modo selettivo framework TFLite
Puoi creare framework più piccoli che hanno come target solo un insieme di modelli utilizzando la build selettiva, che ignorerà le operazioni inutilizzate nel set di modelli e includerà solo i kernel operativi necessari per eseguire l'insieme di modelli specificato. Il comando è il seguente:
bash tensorflow/lite/ios/build_frameworks.sh \
--input_models=model1.tflite,model2.tflite \
--target_archs=x86_64,armv7,arm64
Il comando riportato sopra genera il framework statico
bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip
per le operazioni integrate e personalizzate di TensorFlow Lite e, facoltativamente, genera il framework statico
bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
se
i tuoi modelli contengono operazioni TensorFlow Seleziona. Tieni presente che il flag --target_archs
può essere utilizzato per specificare le architetture di deployment.
Utilizza nella tua applicazione
Sviluppatori CocoaPods
Esistono tre CocoaPods per TensorFlow Lite:
TensorFlowLiteSwift
: fornisce le API Swift per TensorFlow Lite.TensorFlowLiteObjC
: fornisce le API Objective-C per TensorFlow Lite.TensorFlowLiteC
: pod di base comune, che incorpora il runtime core di TensorFlow Lite ed espone le API C di base utilizzate dai due pod precedenti. Non destinato a essere utilizzato direttamente dagli utenti.
In qualità di sviluppatore, dovresti scegliere il pod TensorFlowLiteSwift
o TensorFlowLiteObjC
in base alla lingua in cui è scritta l'app, ma non a entrambe. I passaggi esatti per utilizzare le build locali di TensorFlow Lite
sono diverse, a seconda della parte esatta che vuoi creare.
Utilizzo delle API Swift o Objective-C locali
Se usi CocoaPods e vuoi testare solo alcune modifiche locali alle API Swift o alle API Objective-C di TensorFlow Lite, segui questi passaggi.
Apporta modifiche alle API Swift o Objective-C al momento del pagamento di
tensorflow
.Apri il file
TensorFlowLite(Swift|ObjC).podspec
e aggiorna questa riga:
s.dependency 'TensorFlowLiteC', "#{s.version}"
per:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
Questo ti consente di creare le tue API Swift o Objective-C con l'ultima versione notturna disponibile delle APITensorFlowLiteC
(realizzata ogni notte tra le 01:00 e le 04:00 (fuso orario del Pacifico)) anziché la versione stabile, che potrebbe essere obsoleta rispetto al pagamento localetensorflow
. In alternativa, puoi scegliere di pubblicare la tua versione diTensorFlowLiteC
e utilizzare quella versione (consulta la sezione Utilizzo del core di TensorFlow Lite locale di seguito).In
Podfile
del progetto iOS, modifica la dipendenza come segue in modo che punti al percorso locale della directory roottensorflow
.
Per Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
Per l'obiettivo C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
Aggiorna l'installazione dei pod dalla directory principale del progetto iOS.
$ pod update
Riapri l'area di lavoro generata (
<project>.xcworkspace
) e ricrea l'app in Xcode.
Utilizzo di TensorFlow Lite Core locale
Puoi configurare un repository privato di specifiche di CocoaPods e pubblicare il tuo framework TensorFlowLiteC
personalizzato nel tuo repository privato. Puoi copiare questo file Podspec e modificare alcuni valori:
...
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'
...
Dopo aver creato il tuo file TensorFlowLiteC.podspec
, puoi seguire le istruzioni sull'utilizzo di CocoaPods privato per utilizzarlo nel tuo progetto. Puoi anche modificare TensorFlowLite(Swift|ObjC).podspec
in modo che punti al tuo pod TensorFlowLiteC
personalizzato e utilizzare il pod Swift o Objective-C nel progetto dell'app.
Sviluppatori Bazel
Se utilizzi Bazel come strumento di creazione principale, puoi semplicemente aggiungere
la dipendenza TensorFlowLite
al target nel file BUILD
.
Per Swift:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
Per l'obiettivo C:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
Quando crei il progetto dell'app, le eventuali modifiche alla libreria TensorFlow Lite verranno acquisite e integrate nella tua app.
Modifica direttamente le impostazioni del progetto Xcode
Ti consigliamo vivamente di utilizzare CocoaPods o Bazel per aggiungere la dipendenza TensorFlow Lite
al tuo progetto. Se desideri comunque aggiungere il framework TensorFlowLiteC
manualmente, dovrai aggiungerlo TensorFlowLiteC
come
framework incorporato al progetto dell'applicazione. Decomprimi l'elemento
TensorFlowLiteC_framework.zip
generato dalla build precedente per ottenere la
directory TensorFlowLiteC.framework
. Questa directory è il framework effettivo
che Xcode è in grado di comprendere.
Una volta preparato TensorFlowLiteC.framework
, devi prima aggiungerlo
come programma binario incorporato al target della tua app. La sezione esatta delle impostazioni di progetto
può variare a seconda della versione di Xcode.
- Xcode 11: vai alla scheda "Generale" dell'editor del progetto per la destinazione dell'app e aggiungi
TensorFlowLiteC.framework
nella sezione "Framework, librerie e contenuti incorporati". - Xcode 10 e versioni precedenti: vai alla scheda "Generali" dell'editor di progetto per la destinazione dell'app e aggiungi
TensorFlowLiteC.framework
in "Binari incorporati". Il framework dovrebbe anche essere aggiunto automaticamente nella sezione "Framework e librerie collegati".
Quando aggiungi il framework come file binario incorporato, Xcode aggiorna anche la voce "Framework Search Paths" nella scheda "Build Settings" (Impostazioni build) in modo da includere la directory principale del framework. Se questo non avviene automaticamente, devi aggiungere manualmente la directory padre della directory TensorFlowLiteC.framework
.
Una volta completate queste due impostazioni, dovresti essere in grado di importare e chiamare l'API C di TensorFlow Lite, definita dai file di intestazione nella directory TensorFlowLiteC.framework/Headers
.