TensorFlow Lite für Android entwickeln

In diesem Dokument wird beschrieben, wie Sie die TensorFlow Lite-Android-Bibliothek selbst erstellen. Normalerweise müssen Sie die TensorFlow Lite-Android-Bibliothek nicht lokal erstellen.

Nächtliche Momentaufnahmen verwenden

Wenn Sie nächtliche Snapshots verwenden möchten, fügen Sie der Gradle-Build-Stammkonfiguration das folgende Repository hinzu.

allprojects {
    repositories {      // should be already there
        mavenCentral()  // should be already there
        maven {         // add this repo to use snapshots
          name 'ossrh-snapshot'
          url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
    }
}

Fügen Sie nächtliche Snapshots zu Abhängigkeiten hinzu (oder bearbeiten Sie sie bei Bedarf) in „build.gradle“.

...
dependencies {
    ...
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
    implementation 'org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly-SNAPSHOT'
    implementation 'org.tensorflow:tensorflow-lite-support:0.0.0-nightly-SNAPSHOT'
    ...
}
...

TensorFlow Lite lokal erstellen

In einigen Fällen möchten Sie möglicherweise einen lokalen Build von TensorFlow Lite verwenden. Angenommen, Sie erstellen eine benutzerdefinierte Binärdatei, die aus TensorFlow ausgewählte Vorgänge enthält, oder Sie möchten lokale Änderungen an TensorFlow Lite vornehmen.

Build-Umgebung mit Docker einrichten

  • Laden Sie die Docker-Datei herunter. Durch das Herunterladen der Dockerfile erklären Sie sich mit den folgenden Nutzungsbedingungen einverstanden:

Durch Klicken auf „Akzeptieren“ erklärst du dich damit einverstanden, dass die Nutzung von Android Studio und dem Native Development Kit für Android der Lizenzvereinbarung für das Android Software Development Kit unter https://developer.android.com/studio/terms unterliegt. Diese URL kann von Google gelegentlich aktualisiert oder geändert werden.

Sie müssen die Nutzungsbedingungen akzeptieren, um die Datei herunterladen zu können.

  • Optional können Sie die Android SDK- oder NDK-Version ändern. Legen Sie die heruntergeladene Docker-Datei in einem leeren Ordner ab und erstellen Sie mit dem folgenden Befehl das Docker-Image:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • Starten Sie den Docker-Container interaktiv. Stellen Sie dazu den aktuellen Ordner im Container unter /host_dir bereit (beachten Sie, dass /tensorflow_src das TensorFlow-Repository im Container ist):
docker run -it -v $PWD:/host_dir tflite-builder bash

Wenn Sie PowerShell unter Windows verwenden, ersetzen Sie „$PWD“ durch „pwd“.

Wenn Sie ein TensorFlow-Repository auf dem Host verwenden möchten, stellen Sie stattdessen dieses Hostverzeichnis bereit (-v hostDir:/host_dir).

  • Sobald Sie sich im Container befinden, können Sie folgenden Befehl ausführen, um zusätzliche Android-Tools und -Bibliotheken herunterzuladen. Beachten Sie, dass Sie möglicherweise die Lizenz akzeptieren müssen:
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

Fahren Sie nun mit dem Abschnitt ARBEITSBEREICH und .bazelrc konfigurieren fort, um die Build-Einstellungen zu konfigurieren.

Nachdem Sie die Bibliotheken erstellt haben, können Sie sie in /host_dir innerhalb des Containers kopieren, damit Sie auf dem Host darauf zugreifen können.

Build-Umgebung ohne Docker einrichten

Installieren Sie Bazel und Android Prerequisites

Bali ist das primäre Build-System für TensorFlow. Wenn Sie mit ihr arbeiten möchten, müssen sie sowie der Android-NDK und das SDK auf Ihrem System installiert sein.

  1. Installieren Sie die neueste Version des Bazel-Build-Systems.
  2. Der Android-NDK ist erforderlich, um den nativen (C/C++) TensorFlow Lite-Code zu erstellen. Die aktuell empfohlene Version ist 25b, die hier zu finden ist.
  3. Das Android SDK und die Build-Tools können hier oder alternativ im Rahmen von Android Studio heruntergeladen werden. Zum Erstellen von TensorFlow Lite wird eine Build Tools API >= 23 empfohlen.

WORKSPACE und .bazelrc konfigurieren

Dies ist ein einmaliger Konfigurationsschritt, der zum Erstellen der TF Lite-Bibliotheken erforderlich ist. Führen Sie das Skript ./configure im TensorFlow-Stammverzeichnis für den Bezahlvorgang aus und antworten Sie mit „Ja“, wenn das Skript die interaktive Konfiguration von ./WORKSPACE für Android-Builds auffordert. Das Skript versucht, Einstellungen mit den folgenden Umgebungsvariablen zu konfigurieren:

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

Wenn diese Variablen nicht festgelegt sind, müssen sie interaktiv in der Skript-Eingabeaufforderung angegeben werden. Eine erfolgreiche Konfiguration sollte in der Datei .tf_configure.bazelrc im Stammordner Einträge ähnlich den folgenden enthalten:

build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r25b"
build --action_env ANDROID_NDK_API_LEVEL="21"
build --action_env ANDROID_BUILD_TOOLS_VERSION="30.0.3"
build --action_env ANDROID_SDK_API_LEVEL="30"
build --action_env ANDROID_SDK_HOME="/usr/local/android/android-sdk-linux"

Erstellen und installieren

Sobald CCPA ordnungsgemäß konfiguriert ist, können Sie das AAR von TensorFlow Lite aus dem Stammverzeichnis für den Direktkauf so erstellen:

bazel build -c opt --cxxopt=--std=c++17 --config=android_arm64 \
  --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
  --define=android_dexmerger_tool=d8_dexmerger \
  --define=android_incremental_dexing_tool=d8_dexbuilder \
  //tensorflow/lite/java:tensorflow-lite

Dadurch wird eine AAR-Datei in bazel-bin/tensorflow/lite/java/ erstellt. Dabei wird ein „fettes“ AAE mit mehreren verschiedenen Architekturen erstellt. Wenn Sie nicht alle benötigen, verwenden Sie die für Ihre Bereitstellungsumgebung geeignete Teilmenge.

So erstellen Sie kleinere AAE-Dateien, die nur auf eine Gruppe von Modellen ausgerichtet sind:

bash tensorflow/lite/tools/build_aar.sh \
  --input_models=model1,model2 \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

Das obige Skript generiert die Datei tensorflow-lite.aar und optional die Datei tensorflow-lite-select-tf-ops.aar, wenn eines der Modelle Tensorflow-Vorgänge verwendet. Weitere Informationen finden Sie im Abschnitt Größe des TensorFlow Lite-Binärprogramms reduzieren.

AAE direkt dem Projekt hinzufügen

Verschieben Sie die Datei tensorflow-lite.aar in ein Verzeichnis namens libs in Ihrem Projekt. Ändern Sie die Datei build.gradle Ihrer Anwendung so, dass sie auf das neue Verzeichnis verweist, und ersetzen Sie die vorhandene TensorFlow Lite-Abhängigkeit durch die neue lokale Bibliothek. Beispiel:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    compile(name:'tensorflow-lite', ext:'aar')
}

AAR im lokalen Maven-Repository installieren

Führen Sie den folgenden Befehl aus dem Stammverzeichnis für den Bezahlvorgang aus:

mvn install:install-file \
  -Dfile=bazel-bin/tensorflow/lite/java/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar

Achten Sie darauf, dass in der build.gradle Ihrer Anwendung die Abhängigkeit mavenLocal() vorhanden ist. Ersetzen Sie die standardmäßige TensorFlow Lite-Abhängigkeit durch die Abhängigkeit, die für ausgewählte TensorFlow-Vorgänge unterstützt wird:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        mavenLocal()
    }
}

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.1.100'
}

Beachten Sie, dass die 0.1.100-Version hier nur dem Test/der Entwicklung dient. Wenn das lokale AAR installiert ist, können Sie die standardmäßigen TensorFlow Lite Java-Inferenz-APIs in Ihrem Anwendungscode verwenden.