1. Hinweis
TensorFlow ist ein Multi-Learning-Framework für Machine Learning. Sie können verwendet werden, um riesige Modelle geräteübergreifend in der Cloud zu trainieren oder lokal auf einem eingebetteten System wie Ihrem Smartphone auszuführen.
In diesem Codelab wird TensorFlow Lite verwendet, um auf einem Android-Gerät ein Audioklassifizierungsmodell auszuführen.
Lerninhalte
- Vortrainiertes ML-Modell finden, das verwendet werden kann
- Audioklassifizierung in Echtzeit vornehmen
- Verwenden Sie die TensorFlow Lite-Supportbibliothek, um die Modelleingabe und die Ausgabe des Nachverarbeitungsmodells vorzuverarbeiten.
- Sie verwenden die Audio-Task-Bibliothek, um alle Aufgaben im Zusammenhang mit Audio zu erledigen.
Aufgaben
Eine einfache Audioerkennungs-App, die ein TensorFlow Lite-Audioerkennungsmodell ausführt, um Audioinhalte des Mikrofons in Echtzeit zu erkennen
Voraussetzungen
- Eine aktuelle Version von Android Studio (Version 4.1.2 oder höher)
- Physisches Android-Gerät mit Android-Version 23 (Android 6.0)
- Der Beispielcode
- Grundkenntnisse der Android-Entwicklung in Kotlin
2. Beispielcode abrufen
Code herunterladen
Klicken Sie auf den folgenden Link, um den gesamten Code für dieses Codelab herunterzuladen:
Entpacken Sie die heruntergeladene ZIP-Datei. Dadurch wird ein Stammordner (odml-pathways
) mit allen erforderlichen Ressourcen entpackt. Für dieses Codelab benötigen Sie nur die Quellen im Unterverzeichnis audio_classification/codelab1/android
.
Hinweis:Sie können das Repository auch klonen:
git clone https://github.com/googlecodelabs/odml-pathways.git
Das Unterverzeichnis android
des Repositorys audio_classification/codelab1/android
enthält zwei Verzeichnisse:
- starter: Startcode, auf dem Sie für dieses Codelab aufbauen.
- final: Code für die fertige Beispiel-App abgeschlossen
Auslöser-App importieren
Importieren Sie zuerst die Starter-App in Android Studio.
- Öffnen Sie Android Studio und wählen Sie Import Project (Gradle, Eclipse ADT usw.) aus.
- Öffnen Sie den Ordner
starter
(audio_classification/codelab1/android/starter
) aus dem zuvor heruntergeladenen Quellcode.
Um sicherzustellen, dass alle Abhängigkeiten für Ihre App verfügbar sind, sollten Sie Ihr Projekt mit Gradle-Dateien synchronisieren, wenn der Import abgeschlossen ist.
- Wähle in der Android Studio Symbolleiste die Option Projekt mit Gradle-Dateien synchronisieren () aus.
Starter-App ausführen
Nachdem du das Projekt in Android Studio importiert hast, kannst du die App zum ersten Mal ausführen.
Verbinden Sie Ihr Android-Gerät per USB mit Ihrem Computer und klicken Sie in der Symbolleiste von Android Studio auf Ausführen ().
3. Vortrainiertes Modell suchen
Für die Audioklassifizierung benötigen Sie ein Modell. Beginnen Sie mit einem vortrainierten Modell, damit Sie es nicht selbst trainieren müssen.
Für vortrainierte Modelle verwenden Sie TensorFlow Hub ( www.tfhub.dev).
Modelle werden nach Domains kategorisiert. Die, die Sie derzeit benötigen, ist eine der Audio-Problemdomains.
Für Ihre App führen Sie eine Ereignisklassifizierung mit dem YAMNet-Modell durch.
YAMNet ist ein Audioereignisklassifikator, der Audiowellenformen als Eingabe nutzt und unabhängige Vorhersagen für jedes von 521 Audioereignissen erstellt.
Das Modell yamnet/classification wurde bereits in TensorFlow Lite konvertiert. Es nutzt eigene Metadaten, durch die die Nutzung der TFLite-Task-Bibliothek für Audio vereinfacht werden kann.
Wählen Sie den richtigen Tab aus: TFLite (yamnet/classification/tflite) und klicken Sie auf Herunterladen. Du kannst die Metadaten des Modells auch unten sehen.
Diese Modelldatei (lite-model_yamnet_classification_tflite_1.tflite
) wird im nächsten Schritt verwendet.
4. Neues Modell in die Basis-App importieren
Zuerst verschieben Sie das heruntergeladene Modell aus dem vorherigen Schritt in den Ordner „Assets“ in Ihrer App.
Klicken Sie in Android Studio im Projekt-Explorer mit der rechten Maustaste auf den Ordner assets.
Ein Pop-up-Fenster mit einer Liste der Optionen wird angezeigt. Dazu gehört auch, den Ordner in Ihrem Dateisystem zu öffnen. Auf einem Mac ist dies Reveal in Finder (Öffnen), im Windows-Fenster Open in Explorer (Datei im Explorer öffnen) und unter Ubuntu die Option Show in Files (In Dateien anzeigen). Suchen Sie das passende Betriebssystem für Ihr Betriebssystem aus und wählen Sie es aus.
Kopieren Sie dann das heruntergeladene Modell.
Kehren Sie anschließend zu Android Studio zurück und die Datei sollte im Ordner Assets zu sehen sein.
5. Neues Modell in die Basis-App laden
Folgen Sie jetzt einigen der TODOs und aktivieren Sie die Audioklassifizierung mit dem Modell, das Sie dem vorherigen Schritt hinzugefügt haben.
Um die Aufgaben leicht zu finden, öffne in Android Studio das Menü: Ansicht > Tool Windows > TODO. Daraufhin wird ein Fenster mit der Liste geöffnet, das Sie einfach anklicken können, um direkt zum Code zu gelangen.
In der Datei build.gradle
(die Modulversion) finden Sie die erste Aufgabe.
TODO 1 besteht darin, die Android-Abhängigkeiten hinzuzufügen:
implementation 'org.tensorflow:tensorflow-lite-task-audio:0.2.0'
Alle anderen Codeänderungen werden auf dem MainActivity
gespeichert.
TODO 2.1 erstellt die Variable mit dem Modellnamen, der bei den nächsten Schritten geladen wird.
var modelPath = "lite-model_yamnet_classification_tflite_1.tflite"
TODO 2.2 Sie legen einen Mindestgrenzwert fest, um eine Vorhersage aus dem Modell zu akzeptieren. Diese Variable wird später verwendet.
var probabilityThreshold: Float = 0.3f
Unter TODO 2.3 laden Sie das Modell aus dem Ordner „Assets“. Die in der Audio Tasks-Bibliothek definierte AudioClassifier-Klasse ist so konfiguriert, dass das Modell geladen werden kann. Außerdem werden Ihnen alle erforderlichen Methoden zum Ausführen von Inferenzen und zum Erstellen eines Audiorekorders bereitgestellt.
val classifier = AudioClassifier.createFromFile(this, modelPath)
6. Audio aufnehmen
Die Audio Tasks API bietet verschiedene Hilfsmethoden, mit denen Sie einen Audiorekorder mit der richtigen Konfiguration Ihres Modells erstellen können (z. B. Abtastrate, Bitrate, Kanäle). Damit müssen Sie die Datei nicht mehr manuell finden und Konfigurationsobjekte erstellen.
TODO 3.1:Erstellen Sie die Tensor-Variable, in der die Aufzeichnung gespeichert wird, und legen Sie dann die Formatspezifikation für den Rekorder fest.
val tensor = classifier.createInputTensorAudio()
TODO 3.2: Zeigt die Spezifikationen des Audiorekorders an, die im vorherigen Schritt durch die Metadaten des Modells definiert wurden.
val format = classifier.requiredTensorAudioFormat
val recorderSpecs = "Number Of Channels: ${format.channels}\n" +
"Sample Rate: ${format.sampleRate}"
recorderSpecsTextView.text = recorderSpecs
TODO 3.3: Erstellen Sie den Audiorekorder und beginnen Sie mit der Aufzeichnung.
val record = classifier.createAudioRecord()
record.startRecording()
Bis jetzt hört deine App auf dem Mikrofon deines Smartphones zu, funktioniert aber nicht. Sie gehen dies im nächsten Schritt durch.
7. Inferenz zum Modell hinzufügen
In diesem Schritt fügen Sie der App den Inferenzcode hinzu und zeigen ihn auf dem Bildschirm an. Der Code hat bereits einen Timer-Thread, der alle halbe Sekunde ausgeführt wird und in dem die Inferenz ausgeführt wird.
Die Parameter für die Methode scheduleAtFixedRate
geben im Code unter 500 Millisekunden an, wie lange auf den Start der Ausführung und die Zeit zwischen der nachfolgenden Aufgabe gewartet wird.
Timer().scheduleAtFixedRate(1, 500) {
...
}
TODO 4.1 – Code zum Verwenden des Modells hinzufügen Sie laden die Aufzeichnung zuerst in einen Audiotensor und übergeben sie dann an den Klassifikator:
tensor.load(record)
val output = classifier.classify(tensor)
TODO 4.2: Um bessere Inferenzergebnisse zu erzielen, werden alle Klassifizierungen mit einer sehr geringen Wahrscheinlichkeit herausgefiltert. Hier verwenden Sie die Variable, die in einem vorherigen Schritt (probabilityThreshold
) erstellt wurde:
val filteredModelOutput = output[0].categories.filter {
it.score > probabilityThreshold
}
TODO 4.3:Um das Lesen des Ergebnisses zu vereinfachen, erstellen Sie einen String mit den gefilterten Ergebnissen:
val outputStr = filteredModelOutput.sortedBy { -it.score }
.joinToString(separator = "\n") { "${it.label} -> ${it.score} " }
TODO 4.4 Die Benutzeroberfläche aktualisieren. In dieser sehr einfachen Anwendung wird das Ergebnis nur in einer TextView angezeigt. Da sich die Klassifizierung nicht im Hauptthread befindet, müssen Sie für diese Aktualisierung einen Handler verwenden.
runOnUiThread {
textView.text = outputStr
}
Sie haben den folgenden Code hinzugefügt:
- Modell aus dem Ordner „Assets“ laden
- Audiorekorder mit der richtigen Konfiguration erstellen
- Inferenz ausführen
- Die besten Ergebnisse werden auf dem Bildschirm angezeigt
Alles, was du dafür brauchst, testet die App.
8. Finale App ausführen
Du hast das Audioklassifizierungsmodell in die App integriert. Teste es also.
Verbinde dein Android-Gerät und klicke in der Symbolleiste von Android Studio auf „Ausführen“ ().
Bei der ersten Ausführung müssen Sie der App die Berechtigung für die Audioaufnahme gewähren.
Wenn du die Berechtigung erteilt hast, verwendet die App beim Starten das Mikrofon des Smartphones. Zu Beginn können Sie in der Nähe des Smartphones sprechen, da eine der Klassen, die YAMNet erkennt, Gesprochenes ist. Eine weitere leicht zu testende Klasse ist das Andocken oder Klatschneln.
Sie können auch versuchen, die Hundegebell und viele andere mögliche Ereignisse zu erkennen (521). Eine vollständige Liste finden Sie unter Quellcode oder in der Datei mit Labels.
9. Glückwunsch!
In diesem Codelab haben Sie gelernt, wie Sie mit TensorFlow Lite ein vortrainiertes Modell für die Audioklassifizierung finden und in Ihrer mobilen App bereitstellen. Weitere Informationen zu TFLite finden Sie in diesen Beispielen.
Behandelte Themen
- TensorFlow Lite-Modell in einer Android-App bereitstellen.
- Modelle aus TensorFlow Hub finden und verwenden
Nächste Schritte
- Passen Sie das Modell mit Ihren eigenen Daten an.
Weitere Informationen
- Dokumentation zu TensorFlow Lite
- TensorFlow Lite-Supportbibliothek
- TensorFlow Lite-Aufgabenbibliothek
- Dokumentation von TensorFlow Hub
- Integriertes maschinelles Lernen mit Google-Technologien