In questo documento viene descritto come creare la libreria LiteRT per iOS autonomamente. Normalmente, non è necessario creare localmente la libreria LiteRT per iOS. Se voglia semplicemente usarlo, il modo più semplice è usare di LiteRT CocoaPods. Vedi iOS Guida rapida per ulteriori dettagli su come utilizzarli nel tuo sistema operativo iOS. in modo programmatico a gestire i progetti.
Edilizia locale
In alcuni casi, potresti voler utilizzare una build locale di LiteRT, Ad esempio, per apportare modifiche locali a LiteRT e testarle modifiche nella tua app per iOS o preferisci utilizzare il framework statico dinamico. Per creare in locale un framework iOS universale per LiteRT: 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
utilizzando xcode-select
:
xcode-select --install
Se si tratta di una nuova installazione, dovrai accettare il contratto di licenza per tutti con il seguente comando:
sudo xcodebuild -license accept
Installa Bazel
Bazel è il sistema di compilazione principale per TensorFlow. Installa Bazel in base alle
istruzioni sul sito web di Bazel. Assicurati di scegliere
versione compresa tra _TF_MIN_BAZEL_VERSION
e _TF_MAX_BAZEL_VERSION
in
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 chiede se vuoi creare TensorFlow con iOS
assistenza in tempo reale.
Crea il framework dinamico TensorFlowLiteC (consigliato)
Dopo aver 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
in
bazel-bin/tensorflow/lite/ios/
nella directory principale di TensorFlow.
Per impostazione predefinita, il framework generato contiene un "grasso" binario, contenente armv7,
arm64 e x86_64 (ma non i386). Per vedere l'elenco completo dei flag build utilizzati quando
specifichi --config=ios_fat
, consulta la sezione delle configurazioni iOS
.bazelrc
file.
Creazione del framework statico TensorFlowLiteC
Per impostazione predefinita, distribuisci il framework dinamico solo tramite Cocoapods. Se vuoi
per utilizzare il framework statico, puoi creare il modello 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/
all'interno della directory principale TensorFlow
. Questo framework statico può essere usato esattamente come
dinamico.
Creare selettivamente framework TFLite
È possibile creare framework più piccoli che hanno come target solo un insieme di modelli utilizzando che ignorerà le operazioni inutilizzate nel set di modelli e includerà solo 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 riportato sopra genererà il framework statico
bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip
per TensorFlow
operazioni Lite integrate e personalizzate; 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
per specificare le architetture di deployment.
Utilizzo nella tua applicazione
Sviluppatori CocoaPods
Esistono tre CocoaPods per LiteRT:
TensorFlowLiteSwift
: fornisce le API Swift per LiteRT.TensorFlowLiteObjC
: fornisce le API Objective-C per LiteRT.TensorFlowLiteC
: pod di base comune, che incorpora il core LiteRT il runtime ed espone le API C di base utilizzate dai due pod sopra indicati. Non destinata a utilizzate direttamente dagli utenti.
In qualità di sviluppatore, dovresti scegliere TensorFlowLiteSwift
o
TensorFlowLiteObjC
in base alla lingua in cui è scritta la tua app, ma
non entrambe. I passaggi esatti per l'uso di build locali di LiteRT sono diversi,
a seconda della parte esatta che vuoi creare.
Utilizzo di API Swift o Objective-C locali
Se utilizzi CocoaPods e vuoi testare solo alcune modifiche locali API Swift o API Objective-C di LiteRT, segui questa procedura.
Apporta modifiche alle API Swift o Objective-C nel pagamento di
tensorflow
.Apri il file
TensorFlowLite(Swift|ObjC).podspec
e aggiorna questa riga:
s.dependency 'TensorFlowLiteC', "#{s.version}"
per essere:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
Questo serve a garantire che tu stia creando le tue API Swift o Objective-C rispetto all'ultima versione notturna disponibile delle APITensorFlowLiteC
(costruita ogni sera tra la 01:00 e le 04:00 del fuso orario del Pacifico) anziché che potrebbe essere obsoleta rispetto al pagamento locale ditensorflow
. In alternativa, puoi scegliere di pubblicare la tua versioneTensorFlowLiteC
e utilizza questa versione (consulta Utilizzo di LiteRT locale) core di seguito).Nel
Podfile
del tuo progetto iOS, modifica la dipendenza come segue in punta al percorso locale della directory principaletensorflow
.
Per Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
Per Objective-C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
Aggiorna l'installazione dei pod dalla directory radice del progetto iOS.
$ pod update
Riapri l'area di lavoro generata (
<project>.xcworkspace
) e ricrea la tua all'interno di Xcode.
Utilizzo del core LiteRT locale
Puoi configurare un repository privato delle specifiche di CocoaPods e pubblicare
TensorFlowLiteC
al tuo repository privato. Puoi copiare questo podspec
file e modifica 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 per l'utilizzo di CocoaPods privato per utilizzarlo nel tuo
progetto. Puoi anche modificare TensorFlowLite(Swift|ObjC).podspec
in
punta al tuo pod TensorFlowLiteC
personalizzato e utilizza Swift o Objective-C
del progetto dell'app.
Sviluppatori Bazel
Se utilizzi Bazel come strumento di creazione principale, puoi semplicemente aggiungere
Dipendenza di TensorFlowLite
dal target nel file BUILD
.
Per Swift:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
Per Objective-C:
objc_library(
deps = [
"//tensorflow/lite/objc:TensorFlowLite",
],
)
Quando crei il progetto dell'app, eventuali modifiche alla libreria LiteRT essere selezionato e integrato nell'app.
Modifica direttamente le impostazioni del progetto Xcode
Ti consigliamo vivamente di utilizzare CocoaPods o Bazel per aggiungere LiteRT
del progetto. Se vuoi comunque aggiungere TensorFlowLiteC
manualmente, dovrai aggiungere il framework TensorFlowLiteC
come
il framework incorporato nel progetto dell'applicazione. Decomprimi il
TensorFlowLiteC_framework.zip
generati dalla build precedente per ottenere
Directory TensorFlowLiteC.framework
. Questa directory è il framework
che Xcode è in grado di comprendere.
Dopo aver preparato TensorFlowLiteC.framework
, devi prima aggiungerlo
sotto forma di file binario incorporato
nella destinazione dell'app. La sezione esatta delle impostazioni del progetto
potrebbe variare a seconda della versione di Xcode.
- Xcode 11: Vai al menu "Generale" dell'editor del progetto per il target dell'app,
e aggiungi
TensorFlowLiteC.framework
in "framework, librerie e "Contenuti incorporati" . - Xcode 10 e versioni precedenti: vai alla sezione "Generale" dell'editor di progetto
app target e aggiungi
TensorFlowLiteC.framework
in "Incorporato Programmi binari". Il framework dovrebbe anche essere aggiunto automaticamente in "Collegato Framework e librerie .
Quando aggiungi il framework come file binario incorporato, Xcode aggiorna anche
"Framework Search Paths" (Percorsi di ricerca framework) in "Impostazioni build" premi Tab per includere l'elemento principale
del tuo framework. Nel caso in cui ciò non avvenga automaticamente,
devi aggiungere manualmente la directory padre di TensorFlowLiteC.framework
.
Una volta definite queste due impostazioni, dovresti essere in grado di importare e chiamare il metodo
L'API C di LiteRT, definita dai file di intestazione sotto
Directory TensorFlowLiteC.framework/Headers
.