TensorFlow Lite für Android erstellen

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. Wenn Sie nur nutzen möchten, ist der einfachste Weg , mit dem TensorFlow Lite AAR bei MavenCentral gehostet . Siehe Android Quickstart für weitere Details, wie sie in Ihren Android - Projekten zu verwenden.

Nächtliche Schnappschüsse verwenden

Um nächtliche Snapshots zu verwenden, fügen Sie das folgende Repository zu Ihrer Gradle-Stamm-Build-Konfiguration hinzu.

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

TensorFlow Lite lokal erstellen

In einigen Fällen möchten Sie möglicherweise einen lokalen Build von TensorFlow Lite verwenden. Zum Beispiel können Sie eine benutzerdefinierte binäre bauen, der folgendes beinhaltet Operationen ausgewählt aus TensorFlow , oder möchten Sie vielleicht machen lokale Änderungen an TensorFlow Lite.

Build-Umgebung mit Docker einrichten

  • Laden Sie die Docker-Datei herunter. Durch das Herunterladen der Docker-Datei stimmen Sie zu, dass die folgenden Nutzungsbedingungen Ihre Nutzung regeln:

Mit einem Klick zu akzeptieren, stimmen Sie hiermit zu, dass die Verwendung des Android Studio und Android india Development Kit wird von der Android Software Development Kit Lizenzvereinbarung finden Sie unter geregelt https://developer.android.com/studio/terms (wie URL kann von Zeit zu Zeit von Google aktualisiert oder geändert werden).

Sie müssen die Nutzungsbedingungen anerkennen , um die Datei herunterzuladen. Quittieren

  • Sie können optional die Android SDK- oder NDK-Version ändern. Legen Sie die heruntergeladene Docker-Datei in einen leeren Ordner und erstellen Sie Ihr Docker-Image, indem Sie Folgendes ausführen:
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • Starten Sie den Docker-Container interaktiv, indem Sie Ihren aktuellen Ordner in /host_dir innerhalb des Containers mounten (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, mounten Sie stattdessen dieses Hostverzeichnis (-v hostDir:/host_dir).

  • Sobald Sie sich im Container befinden, können Sie Folgendes ausführen, um zusätzliche Android-Tools und -Bibliotheken herunterzuladen (beachten Sie, dass Sie möglicherweise die Lizenz akzeptieren müssen):
android update sdk --no-ui -a --filter tools,platform-tools,android-${ANDROID_API_LEVEL},build-tools-${ANDROID_BUILD_TOOLS_VERSION}

Nun sollten Sie auf die fortfahren konfigurieren ARBEITSBEREICH und .bazelrc Abschnitt die Build - Einstellungen zu konfigurieren.

Nachdem Sie die Bibliotheken erstellt haben, können Sie sie nach /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-Voraussetzungen

Bazel ist das primäre Build-System für TensorFlow. Um damit zu bauen, müssen Sie es und das Android NDK und SDK auf Ihrem System installiert haben.

  1. Installieren Sie die neueste Version des Bazel Build - System .
  2. Das Android NDK ist erforderlich, um den nativen (C/C++) TensorFlow Lite-Code zu erstellen. Die derzeit empfohlene Version ist 19c, die gefunden werden kann hier .
  3. Das Android SDK und Build - Tools erhalten werden hier oder alternativ als Teil des Android Studios . Build Tools API >= 23 ist die empfohlene Version zum Erstellen von TensorFlow Lite.

WORKSPACE und .bazelrc konfigurieren

Dies ist ein einmaliger Konfigurationsschritt, der zum Erstellen der TF Lite-Bibliotheken erforderlich ist. Führen Sie das ./configure Skript im Stamm TensorFlow Kasse Verzeichnis und Antwort „Ja“ , wenn das Skript die interaktiv konfigurieren fragt ./WORKSPACE für Android baut. Das Skript versucht, die Einstellungen mithilfe der 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 bereitgestellt werden. Erfolgreiche Konfiguration sollte in der Einträge ähnlich dem folgenden ergeben .tf_configure.bazelrc im Stammordner - Datei:

build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r19c"
build --action_env ANDROID_NDK_API_LEVEL="21"
build --action_env ANDROID_BUILD_TOOLS_VERSION="28.0.3"
build --action_env ANDROID_SDK_API_LEVEL="23"
build --action_env ANDROID_SDK_HOME="/usr/local/android/android-sdk-linux"

Bauen und installieren

Sobald Bazel richtig konfiguriert ist, können Sie den TensorFlow Lite AAR wie folgt aus dem Root-Checkout-Verzeichnis erstellen:

bazel build -c opt --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
  --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
  //tensorflow/lite/java:tensorflow-lite

Dies wird eine AAR - Datei in generieren bazel-bin/tensorflow/lite/java/ . Beachten Sie, dass dies einen "fetten" AAR mit mehreren unterschiedlichen Architekturen erstellt; Wenn Sie nicht alle benötigen, verwenden Sie die für Ihre Bereitstellungsumgebung geeignete Teilmenge.

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

Oberhalb Skript wird die Erzeugung tensorflow-lite.aar Datei und optional die tensorflow-lite-select-tf-ops.aar Datei , wenn eines der Modelle ist Tensorflow ops verwenden. Weitere Einzelheiten finden Sie in der TensorFlow Lite binäre verkleinern Abschnitt.

AAR direkt zum Projekt hinzufügen

Bewegen Sie die tensorflow-lite.aar - Datei in ein Verzeichnis mit dem Namen libs in Ihrem Projekt. Ändern Sie bitte Ihre App build.gradle Datei das neue Verzeichnis zu verweisen und die bestehende TensorFlow Lite Abhängigkeit mit der neuen lokalen Bibliothek zu ersetzen, zum Beispiel:

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

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

Installieren Sie AAR im lokalen Maven-Repository

Führen Sie den folgenden Befehl in Ihrem Root-Checkout-Verzeichnis 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

In der App build.gradle stellen Sie sicher , die haben mavenLocal() Abhängigkeit und die Standard - TensorFlow Lite Abhängigkeit mit dem einen ersetzen , die Unterstützung für ausgewählte TensorFlow ops hat:

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

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

Beachten Sie, dass die 0.1.100 hier Version rein zum Zwecke der Prüfung / Entwicklung. Mit dem lokalen AAR installiert ist , können Sie den Standard verwenden TensorFlow Lite Java - Inferenz - APIs in Ihrem App - Code.