1. Einführung

Hinweis: Für dieses Codelab ist ein physisches Gerät zum Testen erforderlich.
TensorFlow ist ein universelles Framework für maschinelles Lernen. TensorFlow kann überall verwendet werden. Die Einsatzmöglichkeiten gehen vom Trainieren riesiger Modelle auf mehreren Clustern in der Cloud bis hin zum lokalen Ausführen von Modellen auf einem eingebetteten System wie einem Smartphone.
In diesem Codelab wird TensorFlow Lite verwendet, um ein Bilderkennungsmodell auf einem Android-Gerät auszuführen.
Android Studio 4.1 oder höher installieren
Wenn Sie Android Studio 4.1 oder höher noch nicht installiert haben, laden Sie es herunter und installieren Sie es, während Sie Ihr TensorFlow Lite-Modell trainieren.
Lerninhalte
- Wie Sie mit TensorFlow Lite Model Maker einen eigenen benutzerdefinierten Bildklassifikator trainieren
- Wie Sie mit Android Studio das TensorFlow Lite-Modell importieren, um das benutzerdefinierte Modell mit CameraX in eine Android-App zu integrieren
- Wie Sie die GPU auf Ihrem Smartphone verwenden, um Ihr Modell zu beschleunigen
Umfang
Eine einfache Kamera-App, die ein TensorFlow-Bilderkennungsprogramm ausführt, um Blumen zu identifizieren.

Lizenz: Kostenlos nutzbar
2. Blumenerkennung mit Colab trainieren
Bevor Sie mit dem Modelltraining beginnen, laden Sie Android Studio 4.1 oder höher herunter und installieren Sie es.
Öffnen Sie das Colab , in dem gezeigt wird, wie Sie mit Keras einen Klassifikator trainieren, um Blumen mithilfe von TensorFlow Lite-Transfer Learning zu erkennen.
3. Arbeitsverzeichnis einrichten
Git-Repository klonen
Mit dem folgenden Befehl wird das Git-Repository geklont, das die für dieses Codelab erforderlichen Dateien enthält:
git clone https://github.com/hoitab/TFLClassify.git
Wechseln Sie als Nächstes in das Verzeichnis, in das Sie das Repository gerade geklont haben. Hier arbeiten Sie für den Rest dieses Codelabs:
cd TFLClassify
4. Android-Skelett-App einrichten

Android Studio 4.1 oder höher installieren
Wenn Sie Android Studio 4.1 oder höher noch nicht installiert haben, gehen Sie und installieren Sie es.
Projekt mit Android Studio öffnen
Öffnen Sie ein Projekt mit Android Studio. Führen Sie dazu die folgenden Schritte aus:
- Öffnen Sie Android Studio
. Wählen Sie nach dem Laden die Option „Vorhandenes Projekt öffnen“ in diesem Pop-up-Fenster aus:

- Wählen Sie in der Dateiauswahl
TFLClassify/build.gradleaus Ihrem Arbeitsverzeichnis aus.
- Beim erstmaligen Öffnen des Projekts wird das Pop-up-Fenster „Gradle Sync“ (Gradle-Synchronisierung) angezeigt, in dem Sie gefragt werden, ob Sie den Gradle-Wrapper verwenden möchten. Klicken Sie auf „OK“.

- Aktivieren Sie auf Ihrem Smartphone den Entwicklermodus und das USB-Debugging, falls Sie das noch nicht getan haben. Dies ist eine einmalige Einrichtung. Befolgen Sie diese Anweisungen.
- Sobald sowohl Ihr Projekt als auch Ihr Smartphone bereit sind, können Sie es auf einem echten Gerät ausführen. Wählen Sie dazu
TFL_Classify.startaus und klicken Sie in der Symbolleiste auf die Schaltfläche „Ausführen“
:

- Erlauben Sie der TensorFlow-Demo jetzt den Zugriff auf Ihre Kamera:

- Auf Ihrem Smartphone wird der folgende Bildschirm mit Zufallszahlen anstelle der tatsächlichen Ergebnisse angezeigt:

5. TensorFlow Lite zur Android-App hinzufügen
- Wählen Sie links im Projektexplorer das Modul
startaus:

- Klicken Sie mit der rechten Maustaste auf das Modul
startoder klicken Sie aufFile(Datei) und dann aufNew(Neu) >Other(Sonstiges) >TensorFlow Lite Model(TensorFlow Lite-Modell).

- Wählen Sie den Speicherort des Modells aus, an dem Sie zuvor das benutzerdefinierte trainierte
FlowerModel.tfliteheruntergeladen haben.

- Klicken Sie auf
Finish(Fertig). - Am Ende sehen Sie Folgendes: Das FlowerModel.tflite wurde erfolgreich importiert und enthält allgemeine Informationen zum Modell, einschließlich der Ein- und Ausgabe sowie Beispielcode für den Einstieg.

6. Optional: TODO-Liste ansehen
Mit der TODO-Liste können Sie ganz einfach zu der Stelle navigieren, an der Sie das Codelab aktualisieren müssen. Sie können sie auch in Ihrem Android-Projekt verwenden, um sich an zukünftige Aufgaben zu erinnern. Sie können TODO-Elemente mit Codekommentaren hinzufügen und das Keyword TODO eingeben. So greifen Sie auf die Liste der TODOs zu:
- Eine gute Möglichkeit, um zu sehen, was wir tun werden, ist die TODO-Liste. Wählen Sie dazu in der oberen Menüleiste
View(Ansicht) >Tool Windows(Toolfenster) >TODOaus.

- Standardmäßig werden alle TODOs in allen Modulen aufgeführt, was etwas verwirrend sein kann. Wir können nur die Start-TODOs sortieren, indem wir auf die Schaltfläche „Gruppieren nach“ auf der Seite des TODO-Bereichs klicken und
Modules(Module) auswählen.

- Maximieren Sie alle Elemente unter den Startmodulen:

7. Benutzerdefiniertes Modell mit TensorFlow Lite ausführen
- Klicken Sie in der TODO-Liste auf TODO 1 oder öffnen Sie die Datei MainActivity.kt und suchen Sie nach TODO 1. Initialisieren Sie das Modell, indem Sie diese Zeile hinzufügen:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
ImageAnalysis.Analyzer {
...
// TODO 1: Add class variable TensorFlow Lite Model
private val flowerModel = FlowerModel.newInstance(ctx)
...
}
- In der Methode „analyze“ für den CameraX-Analyzer müssen wir die Kameraeingabe
ImageProxyin eineBitmapkonvertieren und einTensorImage-Objekt für den Inferenzprozess erstellen.
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 2: Convert Image to Bitmap then to TensorImage
val tfImage = TensorImage.fromBitmap(toBitmap(imageProxy))
...
}
- Verarbeiten Sie das Bild und führen Sie die folgenden Vorgänge für das Ergebnis aus:
- Sortieren Sie die Ergebnisse absteigend nach Wahrscheinlichkeit unter dem Attribut
score, wobei die höchste Wahrscheinlichkeit zuerst angezeigt wird. - Verwenden Sie die ersten k Ergebnisse, wie durch die Konstante
MAX_RESULT_DISPLAYdefiniert. Optional können Sie den Wert dieser Variablen ändern, um mehr oder weniger Ergebnisse zu erhalten.
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 3: Process the image using the trained model, sort and pick out the top results
val outputs = flowerModel.process(tfImage)
.probabilityAsCategoryList.apply {
sortByDescending { it.score } // Sort with highest confidence first
}.take(MAX_RESULT_DISPLAY) // take the top results
...
}
- Konvertieren Sie die sortierten und gefilterten Ergebnisse in Datenobjekte
Recognition, die vonRecyclerViewüber Datenbindung verwendet werden können:
override fun analyze(imageProxy: ImageProxy) {
...
// TODO 4: Converting the top probability items into a list of recognitions
for (output in outputs) {
items.add(Recognition(output.label, output.score))
}
...
}
- Entfernen Sie die Kommentarzeichen bei den folgenden Zeilen oder löschen Sie sie, um die gefälschten Ergebnisse zu generieren, die wir zuvor gesehen haben:
// START - Placeholder code at the start of the codelab. Comment this block of code out.
for (i in 0..MAX_RESULT_DISPLAY-1){
items.add(Recognition("Fake label $i", Random.nextFloat()))
}
// END - Placeholder code at the start of the codelab. Comment this block of code out.
- Führen Sie die App auf einem echten Gerät aus. Wählen Sie dazu
TFL_Classify.startaus und klicken Sie in der Symbolleiste auf die Schaltfläche „Ausführen“
:

- Auf Ihrem Smartphone wird der folgende Bildschirm mit Zufallszahlen anstelle der tatsächlichen Ergebnisse angezeigt:

8. Optional: Inferenz mit GPU-Delegaten beschleunigen
TensorFlow Lite unterstützt mehrere Hardwarebeschleuniger, um die Inferenz auf Ihrem Mobilgerät zu beschleunigen. Die GPU ist einer der Beschleuniger, die TensorFlow Lite über einen Delegatenmechanismus nutzen kann. Sie ist relativ einfach zu verwenden.
- Öffnen Sie build.gradle unter dem Modul
startoder klicken Sie in der TODO-Liste auf TODO 5 und fügen Sie die folgende Abhängigkeit hinzu:
// TODO 5: Optional GPU Delegates
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
- Kehren Sie zur Datei MainActivity.kt zurück oder klicken Sie in der TODO-Liste auf TODO 6. Ersetzen Sie die einfache Initialisierung von „flowerModel“ durch Folgendes: Rufen Sie eine Instanz der GPU-Kompatibilitätsliste ab und initialisieren Sie die GPU, je nachdem, ob sie zu den aufgeführten kompatiblen GPUs gehört. Andernfalls initialisieren Sie stattdessen 4 CPU-Threads, um das Modell auszuführen:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
ImageAnalysis.Analyzer {
...
// TODO 1: Add class variable TensorFlow Lite Model
// Initializing the flowerModel by lazy so that it runs in the same thread when the process
// method is called.
private val flowerModel: FlowerModel by lazy{
// TODO 6. Optional GPU acceleration
val compatList = CompatibilityList()
val options = if(compatList.isDelegateSupportedOnThisDevice){
Log.d(TAG, "This device is GPU Compatible ")
Model.Options.Builder().setDevice(Model.Device.GPU).build()
} else {
Log.d(TAG, "This device is GPU Incompatible ")
Model.Options.Builder().setNumThreads(4).build()
}
...
}
- Ändern Sie die Modellinitialisierung, um sie zu verwenden, indem Sie
optionszur Methodeneingabe hinzufügen:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
ImageAnalysis.Analyzer {
private val flowerModel: FlowerModel by lazy{
...
// Initialize the Flower Model
FlowerModel.newInstance(ctx, options)
}
}
- Führen Sie die App auf einem echten Gerät aus. Wählen Sie dazu
TFL_Classify.startaus und klicken Sie in der Symbolleiste auf die Schaltfläche „Ausführen“
:

9. Weitere Informationen
Hier finden Sie weitere Informationen:
- Probieren Sie andere TFLite-Modelle aus, die mit der ML-Modellbindung von tfhub.dev kompatibel sind.
- Weitere Informationen zu TFLite finden Sie in der Dokumentation auf tensorflow.org und im Code-Repository.
- Testen Sie andere vortrainierte TFLite-Modelle, einschließlich einer Hot-Word-Erkennung für die Sprachausgabe und einer Version für intelligente Antworten auf dem Gerät.
- Allgemeine Informationen zu TensorFlow finden Sie in unserer Dokumentation zum Einstieg.