Questo documento descrive come creare autonomamente la libreria iOS TensorFlow Lite. Normalmente, non è necessario creare localmente la libreria iOS TensorFlow Lite. Se vuoi semplicemente usarlo, il modo più semplice è utilizzare le versioni stabili o notturne predefinite di TensorFlow Lite CocoaPods. Consulta la guida rapida di 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 quando desideri apportare modifiche locali a TensorFlow Lite e testare tali modifiche nella tua app iOS o preferisci utilizzare il framework statico rispetto a quello dinamico fornito. Per creare un framework iOS universale per TensorFlow Lite localmente, devi crearlo utilizzando Bazel su un computer macOS.
Installa Xcode
Se non lo hai già fatto, dovrai installare Xcode 8 o versione successiva e gli strumenti che utilizzano 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 per TensorFlow. Installa Bazel seguendo le istruzioni sul sito web di Bazel . Assicurati di scegliere una versione tra _TF_MIN_BAZEL_VERSION
e _TF_MAX_BAZEL_VERSION
nel file configure.py
nella root del repository tensorflow
.
Configura WORKSPACE e .bazelrc
Esegui lo script ./configure
nella directory principale di pagamento di TensorFlow e rispondi "Sì" quando lo script ti chiede se desideri creare TensorFlow con il supporto iOS.
Costruisci il framework dinamico TensorFlowLiteC (consigliato)
Una volta configurato correttamente Bazel con il supporto iOS, puoi creare il framework TensorFlowLiteC
con il seguente comando.
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/
nella directory root 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 si specifica --config=ios_fat
, fare riferimento alla sezione delle configurazioni iOS nel file .bazelrc
.
Costruisci il framework statico TensorFlowLiteC
Per impostazione predefinita, distribuiamo il framework dinamico solo tramite Cocoapods. Se invece desideri utilizzare il framework statico, puoi creare il framework statico TensorFlowLiteC
con il seguente comando:
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 root di TensorFlow. Questo quadro statico può essere utilizzato esattamente allo stesso modo di quello dinamico.
Costruisci selettivamente framework TFLite
Puoi creare framework più piccoli destinati solo a una serie di modelli utilizzando la creazione selettiva, che salterà le operazioni inutilizzate nel set di modelli e includerà solo i kernel operativi necessari per eseguire un determinato set di modelli. 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 precedente genererà 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 Select TensorFlow. Tieni presente che il flag --target_archs
può essere utilizzato per specificare le architetture di distribuzione.
Utilizzare nella propria applicazione
Sviluppatori di CocoaPods
Esistono tre CocoaPod 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 TensorFlow Lite ed espone le API C di base utilizzate dai due pod precedenti. Non pensato per essere utilizzato direttamente dagli utenti.
Come sviluppatore, dovresti scegliere il pod TensorFlowLiteSwift
o TensorFlowLiteObjC
in base alla lingua in cui è scritta la tua app, ma non entrambi. I passaggi esatti per l'utilizzo delle build locali di TensorFlow Lite differiscono a seconda della parte esatta che desideri creare.
Utilizzando API locali Swift o Objective-C
Se utilizzi CocoaPods e desideri testare solo alcune modifiche locali alle API Swift o alle API Objective-C di TensorFlow Lite, segui i passaggi qui.
Apporta modifiche alle API Swift o Objective-C nel tuo checkout
tensorflow
.Apri il file
TensorFlowLite(Swift|ObjC).podspec
e aggiorna questa riga:
s.dependency 'TensorFlowLiteC', "#{s.version}"
essere:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
Questo per garantire che stai creando le tue API Swift o Objective-C con l'ultima versione notturna disponibile delle APITensorFlowLiteC
(creata ogni notte tra l'1 e le 4 del fuso orario del Pacifico) anziché con la versione stabile, che potrebbe essere obsoleta rispetto al tuotensorflow
locale guardare. In alternativa, puoi scegliere di pubblicare la tua versione diTensorFlowLiteC
e utilizzare quella versione (vedi la sezione Utilizzo del core TensorFlow Lite locale di seguito).Nel
Podfile
del tuo progetto iOS, modifica la dipendenza come segue in modo che punti al percorso locale della directory root ditensorflow
.
Per Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
Per Obiettivo-C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
Aggiorna l'installazione del pod dalla directory root del tuo progetto iOS.
$ pod update
Riapri l'area di lavoro generata (
<project>.xcworkspace
) e ricostruisci la tua app all'interno di Xcode.
Utilizzando il core TensorFlow Lite locale
Puoi configurare un repository delle specifiche CocoaPods privato 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 dei CocoaPod privati 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 di Bazel
Se utilizzi Bazel come strumento di creazione principale, puoi semplicemente aggiungere la dipendenza TensorFlowLite
alla destinazione nel file BUILD
.
Per Swift:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
Per Obiettivo-C:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
Quando crei il progetto della tua app, qualsiasi modifica alla libreria TensorFlow Lite verrà rilevata e incorporata 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 manualmente il framework TensorFlowLiteC
, dovrai aggiungere il framework TensorFlowLiteC
come framework incorporato al tuo progetto applicativo. Decomprimi il TensorFlowLiteC_framework.zip
generato dalla build precedente per ottenere la directory TensorFlowLiteC.framework
. Questa directory è il framework effettivo che Xcode può comprendere.
Dopo aver preparato TensorFlowLiteC.framework
, devi prima aggiungerlo come binario incorporato alla destinazione dell'app. La sezione esatta delle impostazioni del progetto per questo può variare a seconda della versione di Xcode.
- Xcode 11: vai alla scheda "Generale" dell'editor di progetto per la destinazione della tua app e aggiungi
TensorFlowLiteC.framework
nella sezione "Frameworks, librerie e contenuto incorporato". - Xcode 10 e versioni precedenti: vai alla scheda "Generale" dell'editor di progetto per la destinazione della tua app e aggiungi
TensorFlowLiteC.framework
in "Binari incorporati". Il framework dovrebbe anche essere aggiunto automaticamente nella sezione "Framework collegati e librerie".
Quando aggiungi il framework come binario incorporato, Xcode aggiorna anche la voce "Percorsi di ricerca del framework" nella scheda "Impostazioni di creazione" per includere la directory principale del framework. Nel caso in cui ciò non avvenga automaticamente, dovresti aggiungere manualmente la directory principale della directory TensorFlowLiteC.framework
.
Una volta eseguite 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
.