Crea TensorFlow Lite per iOS

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questo documento descrive come creare autonomamente la libreria TensorFlow Lite per iOS. Normalmente, non è necessario creare in locale la libreria TensorFlow Lite iOS. Se vuoi semplicemente usarlo, il modo più semplice è utilizzare le versioni stabili o notturne predefinite dei TensorFlow Lite CocoaPods. Consulta la guida introduttiva di iOS per maggiori dettagli su come usarli 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 a quello dinamico fornito. 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 successivo e gli strumenti usando 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. Installare Bazel secondo 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 radice del repository tensorflow .

Configura WORKSPACE e .bazelrc

Esegui lo script ./configure nella directory di verifica principale di TensorFlow e rispondi "Sì" quando lo script chiede se desideri creare TensorFlow con il supporto per iOS.

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 nella directory bazel-bin/tensorflow/lite/ios/ nella directory radice di TensorFlow. Per impostazione predefinita, il framework generato contiene un 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 di 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 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 bazel-bin/tensorflow/lite/ios/ nella directory principale di TensorFlow. Questo framework statico può essere utilizzato esattamente come quello dinamico.

Costruisci in modo selettivo framework TFLite

È possibile creare framework più piccoli destinati solo a un set di modelli utilizzando la build selettiva, che salterà le operazioni non utilizzate nel set di modelli e includerà solo i kernel operativi necessari per eseguire il set 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 precedente genererà il framework statico bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip per le operazioni personalizzate e integrate di TensorFlow Lite; e facoltativamente, genera il framework statico bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip se i tuoi modelli contengono le operazioni Select TensorFlow. Nota che il flag --target_archs può essere utilizzato per specificare le tue architetture di distribuzione.

Utilizzare nella propria applicazione

Sviluppatori di CocoaPods

Ci sono 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 principale di 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 TensorFlowLiteSwift o TensorFlowLiteObjC pod in base alla lingua in cui è scritta la tua app, ma non entrambi. I passaggi esatti per l'utilizzo di build locali di TensorFlow Lite variano a seconda della parte esatta che si desidera creare.

Utilizzo di API Swift o Objective-C locali

Se stai utilizzando CocoaPods e desideri testare solo alcune modifiche locali alle API Swift o alle API Objective-C di TensorFlow Lite, segui i passaggi qui.

  1. Apporta modifiche alle API Swift o Objective-C nel checkout di tensorflow .

  2. 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 assicurarti di creare le tue API Swift o Objective-C rispetto all'ultima versione notturna disponibile delle API TensorFlowLiteC (creata ogni notte tra l'1-4:00 ora del Pacifico) piuttosto che la versione stabile, che potrebbe essere obsoleta rispetto al tuo tensorflow locale guardare. In alternativa, puoi scegliere di pubblicare la tua versione di TensorFlowLiteC e utilizzare quella versione (consulta la sezione Utilizzo di TensorFlow Lite core locale di seguito).

  3. Nel Podfile del tuo progetto iOS, modifica la dipendenza come segue per puntare al percorso locale della directory radice di tensorflow .
    Per Swift:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    Per l'Obiettivo-C:
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. Aggiorna l'installazione del pod dalla directory principale del progetto iOS.
    $ pod update

  5. Riapri l'area di lavoro generata ( <project>.xcworkspace ) e ricostruisci la tua app all'interno di Xcode.

Utilizzo del core TensorFlow Lite locale

Puoi configurare un repository di 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 di CocoaPod privati ​​per usarlo 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 stai utilizzando Bazel come strumento di compilazione principale, puoi semplicemente aggiungere la dipendenza TensorFlowLite al tuo target nel tuo 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 tuo progetto di app, tutte le modifiche alla libreria TensorFlow Lite verranno raccolte e integrate nella tua app.

Modifica direttamente le impostazioni del progetto Xcode

Si consiglia vivamente di utilizzare CocoaPods o Bazel per aggiungere la dipendenza TensorFlow Lite al progetto. Se desideri comunque aggiungere manualmente il framework TensorFlowLiteC , dovrai aggiungere il framework TensorFlowLiteC come framework incorporato al progetto dell'applicazione. 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. L'esatta sezione 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 dell'app e aggiungi TensorFlowLiteC.framework nella sezione "Frameworks, Librerie e contenuto incorporato".
  • Xcode 10 e precedenti: vai alla scheda "Generale" 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 "Strutture e librerie collegate".

Quando aggiungi il framework come binario incorporato, Xcode aggiorna anche la voce "Percorsi di ricerca del framework" nella scheda "Impostazioni build" per includere la directory padre del tuo framework. Nel caso in cui ciò non avvenga automaticamente, è necessario 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 .