Einfache App für die Audioklassifizierung erstellen

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

33af0fdb0a027fa8

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:

  • android_studio_folder.pngstarter: Startcode, auf dem Sie für dieses Codelab aufbauen.
  • android_studio_folder.pngfinal: Code für die fertige Beispiel-App abgeschlossen

Auslöser-App importieren

Importieren Sie zuerst die Starter-App in Android Studio.

  1. Öffnen Sie Android Studio und wählen Sie Import Project (Gradle, Eclipse ADT usw.) aus.
  2. Öffnen Sie den Ordner starter (audio_classification/codelab1/android/starter) aus dem zuvor heruntergeladenen Quellcode.

7c0f27882a2698ac

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.

  1. Wähle in der Android Studio Symbolleiste die Option Projekt mit Gradle-Dateien synchronisieren (b451ab2d04d835f9.png) 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 (Ausführen.png).

5518972c21705945.png

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).

91e39900ff58818c.png

Modelle werden nach Domains kategorisiert. Die, die Sie derzeit benötigen, ist eine der Audio-Problemdomains.

9d44d38c297bf3dc.png

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.

65dc0f610eb27762

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.

konfb3cfeb310e1f51.png

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.

7cca2c22ed8cf4c8

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.

95e0eca881d35f6b.png

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.

703b1842fb09e893.png

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

92e81894674a5b0.png

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“ (Ausführen.png).

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.

33af0fdb0a027fa8

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

Hast du Fragen?

Probleme melden