Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Android-Schnellstart

Um mit TensorFlow Lite unter Android zu beginnen, empfehlen wir, das folgende Beispiel zu untersuchen.

Beispiel für die Klassifizierung von Android-Bildern

Lesen Sie die TensorFlow Lite Android-Bildklassifizierung, um eine Erklärung des Quellcodes zu erhalten.

Diese Beispiel-App verwendet die Bildklassifizierung, um kontinuierlich zu klassifizieren, was auch immer von der Rückfahrkamera des Geräts gesehen wird. Die Anwendung kann entweder auf einem Gerät oder einem Emulator ausgeführt werden.

Die Inferenz wird mithilfe der TensorFlow Lite Java-API und der TensorFlow Lite Android Support Library durchgeführt . Die Demo-App klassifiziert Frames in Echtzeit und zeigt die wahrscheinlichsten Klassifizierungen an. Der Benutzer kann zwischen einem Gleitkomma- oder einem quantisierten Modell wählen, die Thread-Anzahl auswählen und entscheiden, ob er auf einer CPU, einer GPU oder über NNAPI ausgeführt werden soll .

In Android Studio einbauen

Befolgen Sie die Anweisungen in README.md, um das Beispiel in Android Studio zu erstellen .

Erstellen Sie Ihre eigene Android-App

Um schnell mit dem Schreiben Ihres eigenen Android-Codes zu beginnen, empfehlen wir, unser Beispiel für die Klassifizierung von Android-Bildern als Ausgangspunkt zu verwenden.

Die folgenden Abschnitte enthalten einige nützliche Informationen für die Arbeit mit TensorFlow Lite unter Android.

Verwenden Sie die TensorFlow Lite Android Support Library

Die TensorFlow Lite Android Support Library erleichtert die Integration von Modellen in Ihre Anwendung. Es bietet APIs auf hoher Ebene, mit deren Hilfe rohe Eingabedaten in die vom Modell geforderte Form umgewandelt und die Ausgabe des Modells interpretiert werden können, wodurch die Menge des erforderlichen Boilerplate-Codes reduziert wird.

Es unterstützt gängige Datenformate für Ein- und Ausgaben, einschließlich Bilder und Arrays. Es bietet auch Vor- und Nachbearbeitungseinheiten, die Aufgaben wie das Ändern der Bildgröße und das Zuschneiden ausführen.

Befolgen Sie zunächst die Anweisungen in der TensorFlow Lite Android Support Library README.md .

Verwenden Sie den TensorFlow Lite AAR von JCenter

Um TensorFlow Lite in Ihrer Android-App zu verwenden, empfehlen wir die Verwendung des TensorFlow Lite AAR, das bei JCenter gehostet wird .

Sie können dies in Ihren build.gradle Abhängigkeiten wie folgt angeben:

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

Dieser AAR enthält Binärdateien für alle Android-ABIs . Sie können die Größe der Binärdatei Ihrer Anwendung reduzieren, indem Sie nur die ABIs einbeziehen, die Sie unterstützen müssen.

Wir empfehlen den meisten Entwicklern, die ABIs x86 , x86_64 und arm32 . Dies kann mit der folgenden Gradle-Konfiguration erreicht werden, die speziell nur armeabi-v7a und arm64-v8a , die die meisten modernen Android-Geräte abdecken sollten.

 android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
    }
}
 

Weitere abiFilters zu abiFilters finden Sie unter NdkOptions in der Android Gradle-Dokumentation.

Erstellen Sie TensorFlow Lite lokal

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

Richten Sie die Build-Umgebung mit Docker ein

  • Laden Sie die Docker-Datei herunter. Durch das Herunterladen der Docker-Datei erklären Sie sich damit einverstanden, dass die folgenden Nutzungsbedingungen Ihre Nutzung regeln:

Durch Klicken auf Akzeptieren erklären Sie sich hiermit einverstanden, dass die gesamte Nutzung des Android Studio und des Android Native Development Kit durch die Lizenzvereinbarung für das Android Software Development Kit unter https://developer.android.com/studio/terms geregelt wird (diese URL kann von Zeit zu Zeit von Google aktualisiert oder geändert werden).

Sie müssen die Nutzungsbedingungen bestätigen, um die Datei herunterladen zu können. Bestätigen Sie

  • 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 / tmp im Container mounten (beachten Sie, dass / tensorflow_src das TensorFlow-Repository im Container ist):
 docker run -it -v $PWD:/tmp 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, hängen Sie stattdessen dieses Hostverzeichnis ein (-v hostDir: / tmp).

  • 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}
 

Sie können jetzt mit dem Abschnitt "Erstellen und Installieren" fortfahren. Nachdem Sie die Bibliotheken erstellt haben, können Sie sie in / tmp im Container kopieren, damit Sie auf dem Host darauf zugreifen können.

Richten Sie die Build-Umgebung ohne Docker ein

Installieren Sie die Voraussetzungen für Bazel und Android

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-Systems .
  2. Das Android NDK wird benötigt, um den nativen (C / C ++) TensorFlow Lite-Code zu erstellen. Die aktuell empfohlene Version ist 17c, die Sie hier finden .
  3. Das Android SDK und die Build-Tools können hier oder alternativ als Teil von Android Studio bezogen werden . Build Tools API> = 23 ist die empfohlene Version zum Erstellen von TensorFlow Lite.
Konfigurieren Sie WORKSPACE und .bazelrc

Führen Sie das Skript ./configure im Checkout-Verzeichnis TensorFlow aus und antworten Sie mit "Ja", wenn das Skript die interaktive Konfiguration des ./WORKSPACE für Android ./WORKSPACE . Das Skript versucht, 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 Skriptaufforderung bereitgestellt werden. Eine erfolgreiche Konfiguration sollte Einträge ähnlich den folgenden in der Datei .tf_configure.bazelrc im Stammordner ergeben:

 build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r17c"
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"
 

Erstellen und installieren

Sobald Bazel ordnungsgemäß 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
 

Dadurch wird eine AAR-Datei in bazel-bin/tensorflow/lite/java/ generiert. Beachten Sie, dass dadurch ein "fetter" AAR mit mehreren unterschiedlichen Architekturen erstellt wird. Wenn Sie nicht alle benötigen, verwenden Sie die für Ihre Bereitstellungsumgebung geeignete Teilmenge. Von dort aus gibt es verschiedene Ansätze, um die .aar-Datei in Ihrem Android Studio-Projekt zu verwenden.

Fügen Sie AAR direkt zum Projekt hinzu

Verschieben Sie die Datei tensorflow-lite.aar in ein Verzeichnis namens libs in Ihrem Projekt. Ändern Sie die build.gradle Datei Ihrer App, build.gradle auf das neue Verzeichnis zu verweisen, und ersetzen Sie die vorhandene TensorFlow Lite-Abhängigkeit durch die neue lokale Bibliothek, z.

 allprojects {
    repositories {
        jcenter()
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    compile(name:'tensorflow-lite', ext:'aar')
}
 
Installieren Sie AAR im lokalen Maven-Repository

Führen Sie den folgenden Befehl aus 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
 

build.gradle Sie im mavenLocal() Ihrer App build.gradle , dass Sie über die Abhängigkeit mavenLocal() verfügen, und ersetzen Sie die Standardabhängigkeit TensorFlow Lite durch die Abhängigkeit, die ausgewählte TensorFlow-Operationen unterstützt:

 allprojects {
    repositories {
        jcenter()
        mavenLocal()
    }
}

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

Beachten Sie, dass die Version 0.1.100 hier nur zum Testen / Entwickeln dient. Wenn der lokale AAR installiert ist, können Sie die Standard- Java-Inferenz-APIs von TensorFlow Lite in Ihrem App-Code verwenden.

Erstellen Sie eine Android-App mit C ++

Es gibt zwei Möglichkeiten, TFLite über C ++ zu verwenden, wenn Sie Ihre App mit dem NDK erstellen:

Verwenden Sie die TFLite C-API

Dies ist der empfohlene Ansatz. Laden Sie den bei JCenter gehosteten TensorFlow Lite AAR herunter , benennen Sie ihn in tensorflow-lite-*.zip und entpacken Sie ihn. Sie müssen die vier Header - Dateien in include headers/tensorflow/lite/ und headers/tensorflow/lite/c/ Ordner und die entsprechende libtensorflowlite_jni.so dynamische Bibliothek in jni/ Ordnern in Ihrem NDK Projekt.

Die Header-Datei c_api.h enthält grundlegende Dokumentationen zur Verwendung der TFLite C-API.

Verwenden Sie die TFLite C ++ API

Wenn Sie TFLite über die C ++ - API verwenden möchten, können Sie die gemeinsam genutzten C ++ - Bibliotheken erstellen:

32bit armeabi-v7a:

 bazel build -c opt --config=android_arm //tensorflow/lite:libtensorflowlite.so
 

64bit arm64-v8a:

 bazel build -c opt --config=android_arm64 //tensorflow/lite:libtensorflowlite.so
 

Derzeit gibt es keine einfache Möglichkeit, alle benötigten Header-Dateien zu extrahieren. Sie müssen daher alle Header-Dateien in tensorflow/lite/ aus dem TensorFlow-Repository aufnehmen. Darüber hinaus werden Sie Header - Dateien aus benötigen FlatBuffers und Abseil .