Erstellen Sie TensorFlow Lite für iOS

In diesem Dokument wird beschrieben, wie Sie die TensorFlow Lite iOS-Bibliothek selbst erstellen. Normalerweise müssen Sie die TensorFlow Lite iOS-Bibliothek nicht lokal erstellen. Wenn Sie es nur verwenden möchten, verwenden Sie am einfachsten die vorgefertigten stabilen oder nächtlichen Versionen der TensorFlow Lite CocoaPods. Weitere Informationen zur Verwendung in Ihren iOS-Projekten finden Sie unter iOS-Schnellstart .

Gebäude vor Ort

In einigen Fällen möchten Sie möglicherweise einen lokalen Build von TensorFlow Lite verwenden, beispielsweise wenn Sie lokale Änderungen an TensorFlow Lite vornehmen und diese Änderungen in Ihrer iOS-App testen möchten, oder wenn Sie ein statisches Framework gegenüber unserem bereitgestellten dynamischen bevorzugen. Um ein universelles iOS-Framework für TensorFlow Lite lokal zu erstellen, müssen Sie es mit Bazel auf einem MacOS-Computer erstellen.

Installieren Sie Xcode

Wenn Sie dies noch nicht xcode-select haben, müssen Sie Xcode 8 oder höher und die Tools mit xcode-select installieren:

xcode-select --install

Wenn es sich um eine Neuinstallation handelt, müssen Sie die Lizenzvereinbarung für alle Benutzer mit dem folgenden Befehl akzeptieren:

sudo xcodebuild -license accept

Installieren Sie Bazel

Bazel ist das primäre Build-System für TensorFlow. Installieren Sie Bazel gemäß den Anweisungen auf der Bazel-Website . _TF_MIN_BAZEL_VERSION Sie sicher, dass Sie eine Version zwischen _TF_MIN_BAZEL_VERSION und _TF_MAX_BAZEL_VERSION in der Datei configure.py im Stammverzeichnis des tensorflow Repositorys tensorflow .

Konfigurieren Sie WORKSPACE und .bazelrc

Führen Sie das Skript ./configure im Stammverzeichnis von TensorFlow aus und antworten Sie mit "Ja", wenn Sie gefragt werden, ob Sie TensorFlow mit iOS-Unterstützung erstellen möchten.

Sobald Bazel ordnungsgemäß mit iOS-Unterstützung konfiguriert wurde, können Sie das TensorFlowLiteC Framework mit dem folgenden Befehl erstellen.

bazel build --config=ios_fat -c opt \
  //tensorflow/lite/ios:TensorFlowLiteC_framework

Dieser Befehl generiert die Datei TensorFlowLiteC_framework.zip im bazel-bin/tensorflow/lite/ios/ unter Ihrem TensorFlow-Stammverzeichnis. Standardmäßig enthält das generierte Framework eine "fette" Binärdatei, die armv7, arm64 und x86_64 enthält (jedoch kein i386). Die vollständige Liste der Build-Flags, die bei der Angabe von --config=ios_fat , finden Sie im Abschnitt iOS-Konfigurationen in der .bazelrc Datei .

Erstellen Sie das statische TensorFlowLiteC-Framework

Standardmäßig verteilen wir das dynamische Framework nur über Cocoapods. Wenn Sie stattdessen das statische Framework verwenden möchten, können Sie das statische TensorFlowLiteC Framework mit dem folgenden Befehl erstellen:

bazel build --config=ios_fat -c opt \
  //tensorflow/lite/ios:TensorFlowLiteC_static_framework

Der Befehl generiert eine Datei mit dem Namen TensorFlowLiteC_static_framework.zip im bazel-bin/tensorflow/lite/ios/ unter Ihrem TensorFlow-Stammverzeichnis. Dieses statische Framework kann genauso verwendet werden wie das dynamische.

Verwenden Sie in Ihrer eigenen Anwendung

CocoaPods-Entwickler

Es gibt drei CocoaPods für TensorFlow Lite:

  • TensorFlowLiteSwift : Stellt die Swift-APIs für TensorFlow Lite bereit.
  • TensorFlowLiteObjC : Stellt die Objective-C-APIs für TensorFlow Lite bereit.
  • TensorFlowLiteC : Allgemeiner Basis-Pod, der die TensorFlow Lite-Kernlaufzeit einbettet und die von den beiden oben genannten Pods verwendeten Basis-C-APIs verfügbar macht. Nicht für die direkte Verwendung durch Benutzer gedacht.

Als Entwickler sollten Sie entweder TensorFlowLiteSwift oder TensorFlowLiteObjC wählen, basierend auf der Sprache, in der Ihre App geschrieben ist, aber nicht auf beiden. Die genauen Schritte für die Verwendung lokaler Builds von TensorFlow Lite unterscheiden sich je nachdem, welchen genauen Teil Sie erstellen möchten.

Verwenden lokaler Swift- oder Objective-C-APIs

Wenn Sie CocoaPods verwenden und nur einige lokale Änderungen an den Swift-APIs oder Objective-C-APIs von TensorFlow Lite testen möchten, führen Sie die folgenden Schritte aus.

  1. tensorflow Sie Änderungen an den tensorflow oder Objective-C-APIs in Ihrer tensorflow Prüfung vor.

  2. Öffnen Sie die TensorFlowLite(Swift|ObjC).podspec Datei TensorFlowLite(Swift|ObjC).podspec und aktualisieren Sie diese Zeile:
    s.dependency 'TensorFlowLiteC', "#{s.version}"
    sein:
    s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
    Dies soll sicherstellen, dass Sie Ihre Swift- oder Objective-C-APIs anhand der neuesten verfügbaren nächtlichen Version der TensorFlowLiteC APIs (die jede Nacht zwischen 1 und 4 Uhr pazifischer Zeit erstellt wird) und nicht anhand der stabilen Version erstellen, die im Vergleich zu Ihrem lokalen tensorflow möglicherweise veraltet ist Auschecken. Alternativ können Sie Ihre eigene Version von TensorFlowLiteC und diese Version verwenden (siehe Abschnitt Verwenden des lokalen TensorFlow Lite-Kerns weiter unten).

  3. Podfile Sie im Podfile Ihres iOS-Projekts die Abhängigkeit wie folgt, um auf den lokalen Pfad zu Ihrem tensorflow Stammverzeichnis zu tensorflow .
    Für Swift:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    Für Ziel-C:
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. Aktualisieren Sie Ihre Pod-Installation aus Ihrem iOS-Projektstammverzeichnis.
    $ pod update

  5. Öffnen Sie den generierten Arbeitsbereich ( <project>.xcworkspace ) erneut und <project>.xcworkspace Ihre App in Xcode neu.

Verwenden des lokalen TensorFlow Lite-Kerns

Sie können ein privates CocoaPods-Spezifikationsrepository einrichten und Ihr benutzerdefiniertes TensorFlowLiteC Framework in Ihrem privaten Repo veröffentlichen. Sie können diese Podspec-Datei kopieren und einige Werte ändern:

  ...
  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'
  ...

Nachdem Sie Ihre eigene TensorFlowLiteC.podspec Datei erstellt haben, können Sie den Anweisungen zur Verwendung privater CocoaPods folgen , um sie in Ihrem eigenen Projekt zu verwenden. Sie können auch die TensorFlowLite(Swift|ObjC).podspec , dass sie auf Ihren benutzerdefinierten TensorFlowLiteC Pod TensorFlowLite(Swift|ObjC).podspec , und entweder TensorFlowLite(Swift|ObjC).podspec oder Objective-C-Pod in Ihrem App-Projekt verwenden.

Bazel-Entwickler

Wenn Sie Bazel als Haupt-Build-Tool verwenden, können Sie Ihrem Ziel in Ihrer BUILD Datei einfach die TensorFlowLite Abhängigkeit hinzufügen.

Für Swift:

swift_library(
  deps = [
      "//tensorflow/lite/swift:TensorFlowLite",
  ],
)

Für Ziel-C:

objc_library(
  deps = [
      "//tensorflow/lite/objc:TensorFlowLite",
  ],
)

Wenn Sie Ihr App-Projekt erstellen, werden alle Änderungen an der TensorFlow Lite-Bibliothek übernommen und in Ihre App integriert.

Ändern Sie die Xcode-Projekteinstellungen direkt

Es wird dringend empfohlen, CocoaPods oder Bazel zu verwenden, um Ihrem Projekt TensorFlow Lite-Abhängigkeiten hinzuzufügen. Wenn Sie das TensorFlowLiteC Framework weiterhin manuell hinzufügen möchten, müssen Sie das TensorFlowLiteC Framework als eingebettetes Framework zu Ihrem Anwendungsprojekt hinzufügen. Entpacken Sie die aus dem obigen Build generierte Datei TensorFlowLiteC_framework.zip , um das Verzeichnis TensorFlowLiteC.framework abzurufen. Dieses Verzeichnis ist das eigentliche Framework, das Xcode verstehen kann.

Nachdem Sie das TensorFlowLiteC.framework vorbereitet haben, müssen Sie es zunächst als eingebettete Binärdatei zu Ihrem App-Ziel hinzufügen. Der genaue Abschnitt mit den Projekteinstellungen kann je nach Xcode-Version unterschiedlich sein.

  • Xcode 11: Wechseln Sie zur Registerkarte "Allgemein" des Projekteditors für Ihr App-Ziel und fügen Sie das TensorFlowLiteC.framework im Abschnitt "Frameworks, Bibliotheken und eingebettete Inhalte" hinzu.
  • Xcode 10 und niedriger: Gehen Sie zur Registerkarte "Allgemein" des Projekteditors für Ihr App-Ziel und fügen Sie das TensorFlowLiteC.framework unter "Eingebettete Binärdateien" hinzu. Das Framework sollte auch automatisch im Abschnitt "Verknüpfte Frameworks und Bibliotheken" hinzugefügt werden.

Wenn Sie das Framework als eingebettete Binärdatei hinzufügen, aktualisiert Xcode auch den Eintrag "Framework-Suchpfade" auf der Registerkarte "Build-Einstellungen", um das übergeordnete Verzeichnis Ihres Frameworks einzuschließen. Falls dies nicht automatisch geschieht, sollten Sie das übergeordnete Verzeichnis des Verzeichnisses TensorFlowLiteC.framework manuell hinzufügen.

Sobald diese beiden Einstellungen vorgenommen wurden, sollten Sie in der Lage sein, die C-API von TensorFlow Lite zu importieren und aufzurufen, die durch die Header-Dateien im Verzeichnis TensorFlowLiteC.framework/Headers definiert wird.