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. Am einfachsten ist es, wenn Sie die vordefinierten stabilen oder Nightly-Releases der TensorFlow Lite CocoaPods nutzen. Weitere Informationen zu ihrer Verwendung in Ihren iOS-Projekten finden Sie in der Kurzanleitung für iOS.
Lokal erstellen
In einigen Fällen möchten Sie möglicherweise einen lokalen Build von TensorFlow Lite verwenden, z. B. wenn Sie lokale Änderungen an TensorFlow Lite vornehmen und diese Änderungen in Ihrer iOS-App testen möchten oder wenn Sie lieber ein statisches Framework als unser bereitgestelltes dynamisches Framework verwenden möchten. Wenn Sie lokal ein universelles iOS-Framework für TensorFlow Lite erstellen möchten, müssen Sie es mit Looker auf einem macOS-Computer erstellen.
Xcode installieren
Falls noch nicht geschehen, müssen Sie Xcode 8 oder höher und die Tools mit xcode-select
installieren:
xcode-select --install
Bei einer Neuinstallation musst du die Lizenzvereinbarung für alle Nutzer mit dem folgenden Befehl akzeptieren:
sudo xcodebuild -license accept
Outline installieren
Bali ist das primäre Build-System für TensorFlow. Installieren Sie Qwiklabs entsprechend der Anleitung auf der Baseball-Website. Wählen Sie in der Datei configure.py
im Stammverzeichnis des tensorflow
-Repositorys eine Version zwischen _TF_MIN_BAZEL_VERSION
und _TF_MAX_BAZEL_VERSION
aus.
WORKSPACE und .bazelrc konfigurieren
Führen Sie das Skript ./configure
im Stammverzeichnis für den Direktkauf von TensorFlow aus. Antworten Sie mit „Yes“, wenn das Skript fragt, ob Sie TensorFlow mit iOS-Unterstützung erstellen möchten.
Dynamisches TensorFlowLiteC-Framework erstellen (empfohlen)
Sobald Looker ordnungsgemäß mit der iOS-Unterstützung konfiguriert ist, können Sie das TensorFlowLiteC
-Framework mit dem folgenden Befehl erstellen.
bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_framework
Mit diesem Befehl wird die Datei TensorFlowLiteC_framework.zip
im Verzeichnis bazel-bin/tensorflow/lite/ios/
in Ihrem TensorFlow-Stammverzeichnis generiert.
Standardmäßig enthält das generierte Framework eine "Fat"-Binärdatei, die armv7, arm64 und x86_64 (aber nicht i386) enthält. Eine vollständige Liste der Build-Flags, die bei der Angabe von --config=ios_fat
verwendet werden, finden Sie in der Datei .bazelrc
im Abschnitt „iOS-Konfigurationen“.
Statisches TensorFlowLiteC-Framework erstellen
Standardmäßig wird das dynamische Framework nur über CocoaPods verteilt. 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 --cxxopt=--std=c++17 \
//tensorflow/lite/ios:TensorFlowLiteC_static_framework
Der Befehl generiert eine Datei mit dem Namen TensorFlowLiteC_static_framework.zip
im Verzeichnis bazel-bin/tensorflow/lite/ios/
in Ihrem TensorFlow-Stammverzeichnis. Dieses statische Framework kann genau auf die gleiche Weise wie das dynamische Framework verwendet werden.
TFLite-Frameworks selektiv erstellen
Sie können mit einem selektiven Build kleinere Frameworks erstellen, die nur auf eine Reihe von Modellen ausgerichtet sind. Dabei werden nicht verwendete Vorgänge im Modellsatz übersprungen und nur die Betriebs-Kernels einbezogen, die zum Ausführen der angegebenen Gruppe von Modellen erforderlich sind. Der Befehl lautet wie folgt:
bash tensorflow/lite/ios/build_frameworks.sh \
--input_models=model1.tflite,model2.tflite \
--target_archs=x86_64,armv7,arm64
Der obige Befehl generiert das statische Framework bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip
für integrierte und benutzerdefinierte Vorgänge in TensorFlow Lite. Optional wird das statische Framework bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip
generiert, wenn Ihre Modelle ausgewählte TensorFlow-Vorgänge enthalten. Mit dem Flag --target_archs
können Sie Ihre Bereitstellungsarchitekturen angeben.
In eigener Anwendung verwenden
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
: Gemeinsamer Basis-Pod, der die TensorFlow Lite-Kernlaufzeit einbettet und die von den beiden oben genannten Pods verwendeten Basis-C APIs zur Verfügung stellt. Sie sind nicht für die direkte Verwendung durch Nutzende gedacht.
Als Entwickler sollten Sie je nach Sprache, in der Ihre Anwendung geschrieben ist, entweder den Pod TensorFlowLiteSwift
oder TensorFlowLiteObjC
auswählen, aber nicht beides. Die genauen Schritte für die Verwendung lokaler Builds von TensorFlow Lite unterscheiden sich je nachdem, welchen Teil Sie erstellen möchten.
Lokale Swift- oder Objective-C APIs verwenden
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 hier beschriebenen Schritte aus.
Nehmen Sie Änderungen an der Swift API oder der Objective-C API an der Kasse von
tensorflow
vor.Öffnen Sie die Datei
TensorFlowLite(Swift|ObjC).podspec
und aktualisieren Sie diese Zeile:
s.dependency 'TensorFlowLiteC', "#{s.version}"
zu:
s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
Dadurch wird sichergestellt, dass Sie Ihre Swift- oder Objective-C APIs mit der neuesten verfügbaren Nachtversion derTensorFlowLiteC
APIs (die jeden Abend zwischen 1:00 Uhr und 04:00 Uhr Pacific Time erstellt werden) und nicht mit der stabilen Version erstellen, die im Vergleich zum lokalentensorflow
-Kauf veraltet ist. Alternativ können Sie Ihre eigene Version vonTensorFlowLiteC
veröffentlichen und diese Version verwenden (siehe Abschnitt Lokalen TensorFlow Lite-Core verwenden unten).Ändern Sie im
Podfile
Ihres iOS-Projekts die Abhängigkeit so, dass sie auf den lokalen Pfad zu Ihremtensorflow
-Stammverzeichnis verweist.
Für Swift:
pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
Für Objective-C:
pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'
Aktualisieren Sie die Pod-Installation über das Stammverzeichnis Ihres iOS-Projekts.
$ pod update
Öffnen Sie den generierten Arbeitsbereich (
<project>.xcworkspace
) noch einmal und erstellen Sie die Anwendung in Xcode neu.
Lokalen TensorFlow Lite Core verwenden
Du kannst ein privates CocoaPods-Spezifikations-Repository einrichten und dein benutzerdefiniertes TensorFlowLiteC
-Framework in deinem privaten Repository 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 du deine eigene TensorFlowLiteC.podspec
-Datei erstellt hast, kannst du der Anleitung zur Verwendung privater CocoaPods folgen, um sie in deinem eigenen Projekt zu verwenden. Sie können den TensorFlowLite(Swift|ObjC).podspec
auch so ändern, dass er auf Ihren benutzerdefinierten TensorFlowLiteC
-Pod verweist, und entweder Swift- oder Objective-C-Pod in Ihrem Anwendungsprojekt verwenden.
Baseball-Entwickler
Wenn Sie Outline als Haupt-Build-Tool verwenden, können Sie Ihrem Ziel in der BUILD
-Datei einfach eine TensorFlowLite
-Abhängigkeit hinzufügen.
Für Swift:
swift_library(
deps = [
"//tensorflow/lite/swift:TensorFlowLite",
],
)
Für Objective-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 die App übernommen.
Xcode-Projekteinstellungen direkt ändern
Es wird dringend empfohlen, CocoaPods oder Bali zu verwenden, um Ihrem Projekt TensorFlow Lite-Abhängigkeit hinzuzufügen. Wenn Sie das TensorFlowLiteC
-Framework weiterhin manuell hinzufügen möchten, müssen Sie Ihrem Anwendungsprojekt das TensorFlowLiteC
-Framework als eingebettetes Framework hinzufügen. Entpacken Sie das mit dem obigen Build generierte TensorFlowLiteC_framework.zip
, um das Verzeichnis TensorFlowLiteC.framework
zu erhalten. Dieses Verzeichnis ist das Framework,
das Xcode versteht.
Nachdem Sie die TensorFlowLiteC.framework
vorbereitet haben, müssen Sie sie zuerst als eingebettetes Binärprogramm dem App-Ziel hinzufügen. Die genauen Projekteinstellungen können je nach Xcode-Version variieren.
- Xcode 11: Gehen Sie im Projekteditor für Ihr App-Ziel zum Tab „Allgemein“ und fügen Sie die
TensorFlowLiteC.framework
im Bereich „Frameworks, Bibliotheken und eingebettete Inhalte“ hinzu. - Xcode 10 und niedriger: Wechseln Sie im Projekteditor für Ihr App-Ziel zum Tab „General“ (Allgemein) und fügen Sie das
TensorFlowLiteC.framework
unter „Embed Binaries“ (Eingebettete Binärdateien) hinzu. Das Framework sollte außerdem im Bereich „Verknüpfte Frameworks und Bibliotheken“ automatisch hinzugefügt werden.
Wenn Sie das Framework als eingebettetes Binärprogramm hinzufügen, aktualisiert Xcode auch den Eintrag „Framework-Suchpfade“ auf dem Tab „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 eingerichtet sind, sollten Sie die C API von TensorFlow Lite importieren und aufrufen können, die durch die Headerdateien im Verzeichnis TensorFlowLiteC.framework/Headers
definiert ist.