LiteRT für iOS erstellen

In diesem Dokument wird beschrieben, wie Sie eine LiteRT-iOS-Bibliothek selbst erstellen können. Normalerweise ist es nicht erforderlich, die LiteRT-iOS-Bibliothek lokal zu erstellen. Wenn Sie die du nur verwenden möchtest. Am einfachsten ist die Verwendung der vordefinierten stabilen Version oder der Veröffentlichungen der LiteRT CocoaPods. Weitere Informationen finden Sie unter iOS . Dort finden Sie weitere Informationen zu deren Verwendung unter iOS Projekten.

Lokale Erstellung

In einigen Fällen möchten Sie vielleicht einen lokalen LiteRT-Build verwenden, wenn Sie lokale Änderungen an LiteRT vornehmen und diese testen möchten, Änderungen in Ihrer iOS-App vornehmen oder ein statisches Framework vorziehen. dynamische Anzeige. Um ein universelles iOS-Framework für LiteRT lokal zu erstellen, müssen Sie es mit Bazel auf einem macOS-Computer erstellen.

Xcode installieren

Falls noch nicht geschehen, müssen Sie Xcode 8 oder höher und die entsprechenden Tools installieren. mit xcode-select:

xcode-select --install

Handelt es sich um eine Neuinstallation, musst du die Lizenzvereinbarung für alle mit dem folgenden Befehl:

sudo xcodebuild -license accept

Bazel installieren

Bazel ist das primäre Build-System für TensorFlow. Installieren Sie Bazel gemäß der Anleitung auf der Baseball-Website. Wählen Sie auf jeden Fall Version zwischen _TF_MIN_BAZEL_VERSION und _TF_MAX_BAZEL_VERSION in configure.py-Datei im Stammverzeichnis des tensorflow-Repositorys.

ARBEITSBEREICH und .bazelrc konfigurieren

Führen Sie das Skript ./configure im Stammverzeichnis für den TensorFlow-Checkout-Index aus. mit „Ja“ antworten wenn das Skript fragt, ob Sie TensorFlow mit iOS erstellen möchten. Support.

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

bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
  //tensorflow/lite/ios:TensorFlowLiteC_framework

Dieser Befehl generiert die Datei TensorFlowLiteC_framework.zip unter bazel-bin/tensorflow/lite/ios/ im TensorFlow-Stammverzeichnis. Standardmäßig enthält das generierte Framework ein Binärdatei mit armv7, arm64 und x86_64 (aber nicht i386). Um die vollständige Liste der Build-Flags zu sehen, die beim --config=ios_fat finden Sie im Abschnitt zu den iOS-Konfigurationen in der .bazelrc-Datei.

Statisches TensorFlowLiteC-Framework erstellen

Standardmäßig wird das dynamische Framework nur über CocoaPods verteilt. Bei Bedarf Wenn Sie stattdessen das statische Framework verwenden möchten, können Sie das statische TensorFlowLiteC-Objekt erstellen. mit dem folgenden Befehl:

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/ unter Ihrem TensorFlow-Stammverzeichnis -Verzeichnis. Dieses statische Framework kann genau auf die gleiche Weise verwendet werden wie die dynamische Anzeige.

Selektives Erstellen von TFLite-Frameworks

Sie können kleinere Frameworks erstellen, die nur auf eine Reihe von Modellen ausgerichtet sind, indem Sie selektive build, wodurch nicht verwendete Vorgänge in Ihrem Modellsatz übersprungen werden und nur die Vorgänge op-Kernels, die zum Ausführen des angegebenen Satzes von Modellen erforderlich sind. Der Befehl lautet:

bash tensorflow/lite/ios/build_frameworks.sh \
  --input_models=model1.tflite,model2.tflite \
  --target_archs=x86_64,armv7,arm64

Mit dem Befehl oben wird das statische Framework generiert. bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip für TensorFlow Lite-integrierte und benutzerdefinierte Vorgänge: und optional das statische Framework generiert. bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip wenn „Select TensorFlow Operationen“ enthalten. Beachten Sie, dass das Flag --target_archs zum Festlegen Ihrer Bereitstellungsarchitekturen.

In der eigenen Anwendung verwenden

CocoaPods-Entwickler

Es gibt drei CocoaPods für LiteRT:

  • TensorFlowLiteSwift: Stellt die Swift APIs für LiteRT bereit.
  • TensorFlowLiteObjC: Stellt die Objective-C APIs für LiteRT bereit.
  • TensorFlowLiteC: Gemeinsamer Basis-Pod, der den LiteRT-Kern einbettet Laufzeit und macht die von den beiden oben genannten Pods verwendeten Basis-C-APIs verfügbar. Nicht beabsichtigt direkt von den Nutzenden verwendet werden.

Als Entwickler solltest du entweder TensorFlowLiteSwift oder TensorFlowLiteObjC basierend auf der Sprache, in der Ihre App geschrieben ist, aber nicht beides. Die genauen Schritte zur Verwendung lokaler Builds von LiteRT sind unterschiedlich. je nachdem, welches Teil Sie bauen möchten.

Lokale Swift- oder Objective-C-APIs verwenden

Wenn Sie CocoaPods verwenden und nur einige lokale Änderungen am Swift APIs oder Objective-C APIs von LiteRT führen Sie die hier beschriebenen Schritte aus.

  1. Nehmen Sie an der tensorflow-Bezahlseite Änderungen an der Swift API oder der Objective-C API vor.

  2. Öffnen Sie die Datei TensorFlowLite(Swift|ObjC).podspec und aktualisieren Sie diese Zeile:
    s.dependency 'TensorFlowLiteC', "#{s.version}"
    bis:

    . s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly" So stellen Sie sicher, dass Sie Ihre Swift- oder Objective-C-APIs erstellen. im Vergleich zur neuesten verfügbaren nächtlichen Version der TensorFlowLiteC APIs (wird jede Nacht zwischen 01:00 und 04:00 Uhr Pacific Time erstellt) anstelle der stabilen Version, die im Vergleich zu Ihrem lokalen tensorflow-Bezahlvorgang möglicherweise veraltet ist. Sie können aber auch Ihre eigene Version von TensorFlowLiteC und verwenden Sie diese Version (siehe Lokale LiteRT-Version verwenden). Core weiter unten).

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

  4. Aktualisieren Sie die Pod-Installation über das Stammverzeichnis Ihres iOS-Projekts.
    $ pod update

  5. Öffnen Sie den generierten Arbeitsbereich (<project>.xcworkspace) wieder und erstellen Sie den neuen in Xcode ändern.

Lokalen LiteRT-Kern verwenden

Sie können ein privates CocoaPods-Spezifikations-Repository einrichten und Ihre benutzerdefinierten TensorFlowLiteC-Framework zu Ihrem privaten Repository hinzu. Sie können diese podspec kopieren und ändern Sie einige Werte:

  ...
  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 Anleitung zur Verwendung privater CocoaPods ein eigenes Projekt erstellen. Sie können den TensorFlowLite(Swift|ObjC).podspec auch ändern, um Bewegen Sie den Mauszeiger auf den benutzerdefinierten TensorFlowLiteC-Pod und verwenden Sie entweder Swift oder Objective-C Pod in Ihrem Anwendungsprojekt.

Bazel-Entwickler

Wenn Sie Bazel als Haupt-Build-Tool verwenden, TensorFlowLite-Abhängigkeit von Ihrem Ziel in der Datei BUILD.

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 LiteRT-Bibliothek aufgenommen und in Ihre App integriert werden.

Xcode-Projekteinstellungen direkt ändern

Es wird dringend empfohlen, zum Hinzufügen von LiteRT CocoaPods oder Bazel zu verwenden Abhängigkeit in Ihr Projekt einbinden. Wenn Sie TensorFlowLiteC trotzdem hinzufügen möchten Framework manuell hinzugefügt, müssen Sie das TensorFlowLiteC-Framework als in Ihr Anwendungsprojekt einbinden. Entpacken Sie die Datei TensorFlowLiteC_framework.zip, die mit dem obigen Build generiert wurden, um den TensorFlowLiteC.framework-Verzeichnis. Dieses Verzeichnis ist das eigentliche Framework die Xcode verstehen kann.

Nachdem Sie die TensorFlowLiteC.framework vorbereitet haben, müssen Sie sie zuerst hinzufügen als eingebettete Binärdatei in Ihr App-Ziel. Der Abschnitt mit den Projekteinstellungen kann je nach Xcode-Version unterschiedlich sein.

  • Xcode 11: Gehen Sie zu "Allgemein". des Projekteditors für Ihr App-Ziel, und fügen Sie TensorFlowLiteC.framework unter "Frameworks, Libraries" und Eingebettete Inhalte .
  • Xcode 10 und niedriger: Gehen Sie zu "Allgemein". des Projekteditors für Ihr App-Ziel und fügen Sie TensorFlowLiteC.framework unter „Eingebettet Binärprogramme“. Das Framework sollte auch automatisch unter „Verknüpft“ hinzugefügt werden Frameworks und Bibliotheken .

Wenn Sie das Framework als eingebettetes Binärprogramm hinzufügen, aktualisiert Xcode auch das „Framework-Suchpfade“ unter „Build Settings“ (Build-Einstellungen) Tab zum Einbeziehen des übergeordneten Elements Verzeichnis Ihres Frameworks. Falls dies nicht automatisch geschieht, sollte das übergeordnete Verzeichnis von TensorFlowLiteC.framework manuell hinzufügen -Verzeichnis.

Sobald diese beiden Einstellungen eingerichtet sind, sollten Sie die Methode Das C API von LiteRT, das durch die Headerdateien unter TensorFlowLiteC.framework/Headers-Verzeichnis.