In diesem Beitrag startest du ein weiteres spannendes KI-Projekt mit deinem Dev Board Mini. Dieses Mal geht es darum, Sprache zu erkennen. Ein Keyphrase-Detektor, oft auch als Keyword Spotter (KWS) bezeichnet, ist eine einfache Sprachverarbeitung, die das Vorhandensein eines vordefinierten Wortes oder einer kurzen Phrase in einem Audiostrom erkennt. Das Prinzip kennst du von Wörtern und Phrasen wie „OK Google“ oder „Alexa“, die digitale Assistenten erkennen.
|
Weiteres Zubehör ist dafür nicht notwendig, denn das Board bringt ein eingebautes digitales PDM-Mikrofon mit. PDM steht für Pulse Density Modulation. Das ist eine Form der Modulation, um ein analoges Signal mit einem binären Signal darzustellen. Zunächst ist kein Bildschirm für das Projekt notwendig. Verbinde also dein Board mit dem Host-PC, öffne die Git Bash und starte mit mdt shell das Terminal von Mendel Linux.
Dateien herunterladen und installieren
Das Modell für die Spracherkennung, die Label-Datei und die übrigen benötigten Dateien des Audio Keyphrase Detectors befinden sich auf Github. Der Ordnung halber packst du alles in einen separaten Ordner, den du mit
mkdir speech && cd speech
erstellst und gleich dorthin wechselst. Dann klonst du das Github-Repository auf dein Board. Das erledigst du mit dem Befehl
git clone https://github.com/google-coral/project-keyword-spotter.git
Jetzt hast du alles, was du für das Projekt benötigst. Nun gilt es noch ein paar Python-Pakete zu installieren. Die Entwickler haben alles in ein Bash-Skript gepackt, um die Arbeit zu erleichtern. Führe es aus mit
sh install_requirements.sh
Das dauert eine ganze Weile, da das Paket scipy ziemlich groß ist und eine lange Liste von Libraries installiert wird. Wenn das Skript seine Arbeit getan hat, bist du bereit, mit dem ersten Spracherkennungs-Projekt loszulegen.
Spracherkennung ausprobieren
Du startest die Spracherkennung mit einem einfachen Beispiel und siehst, wie gut das Modell die Wörter erkennt, auf die es trainiert worden ist. Dazu führst du den folgenden Befehl aus:
python3 run_model.py
Das Python-Programm importiert das Modell, das im Unterverzeichnis „models“ liegt. Es ist für die Nutzung mit der Edge TPU des Boards kompiliert. Das erkennst du daran, dass edgetpu ein Bestandteil des Dateinamens ist.
Nach ein paar Sekunden erscheint die Ausgabe. Zunächst erfolgt die Angabe, welches Audio-Device zum Einsatz kommt, dann folgt der Audio-Stream. Solange du nichts sagst, läuft als Ergebnis der Spracherkennung „negative“ durch. Sprich nun eine Schlüsselphrase wie „move right“. Du siehst, dass erkannte Wörter gelb markiert sind, gefolgt von einem Wahrscheinlichkeitswert zwischen 0 und 1. Je höher der Wert, desto zuversichtlicher ist das Programm, dass es das Wort richtig erkannt hat. Der Wert 1, also 100 Prozent Wahrscheinlichkeit, wird aufgrund der Ähnlichkeit vieler Wörter nie erreicht. Im Beispiel kommt das Programm auf einen Wert von 0,996, dass es „move right“ korrekt erkannt hat. Mit [Strg]+[C] beendest du das Programm.
Im diesem Beispiel erkennt die Spracherkennung die Phrase „move right“ mit großer Genauigkeit.
Funktionsweise der Spracherkennung
Das Modell zur Erkennung von Schlüsselwörtern erfordert eine Eingabe von zwei Sekunden Audio, die in 32-dimensionale sogenannte Logmel-Daten umgewandelt werden. Logmel verwendet eine logarithmische Darstellung. Die Mel Frequency Cepstral Coefficients (MFCC) werden zur Spracherkennung eingesetzt und ermöglichen eine kompakte Darstellung des Frequenzspektrums. Mel leitet sich vom englischen Wort „Melody“ ab und ist die Maßeinheit für die wahrgenommene Tonhöhe.
Die Logmel-Daten werden alle 10 Millisekunden berechnet. Das bedeutet, dass zwei Sekunden Audio rund 200 Merkmalsvektoren oder Frames ergeben. Das Programm speichert einen Puffer mit den letzten 200 Frames und lässt sie alle N Frames durch das Modell laufen. Standardmäßig ist N auf 33 eingestellt. Du kannst den Wert aber mit dem Parameter --num_frames_hop ändern. Ein niedrigerer Wert etwa mit
python3 run_model.py --num_frames_hop 11
führt dazu, dass das Modell häufiger Inferenzen durchführt, was die Latenzzeit verringert, aber die Rechenkosten erhöht. Auf die Genauigkeit der Erkennung wirkt sich dies nicht aus.
Youtube per Sprache steuern
Nachdem du nun gesehen hast, wie die Spracherkennung funktioniert, geht es nun an ein cooles Projekt: Du steuerst Youtube mit deiner Stimme. Dazu verbindest du das Dev Board über den microHDMI-Anschluss mit einem Monitor. Um das Dev Board bedienen zu können, verbindest du eine Tastatur mit Touchpad mit dem USB-OTG-Anschluss. Das ist der rechte der beiden USB-C-Anschlüsse. Eventuell ist dafür ein Adapter notwendig.
Youtube läuft üblicherweise im Browser. Das Dev Board Mini verfügt jedoch nicht über ein X11-System für grafische Anwendungen. Doch wenn du Chromium installierst, werden die notwendigen Libraries mitinstalliert, so dass der Browser uneingeschränkt lauffähig ist. Allerdings ist danach kein vollständiges X11 vorhanden. Führe im Terminal nacheinander die folgenden beiden Befehle durch:
sudo apt install chromium
sudo apt install chromium-sandbox
Du kannst den Browser nun mit chromium& starten. Das & bewirkt, dass die Anwendung nicht mit dem Terminal verbunden bleibt. Rufe Youtube aus und wähle zum Beispiel eine Musiksammlung aus. Das Board hat einen 3,5mm-Kopfhöreranschluss und einen 2-Pin-Anschluss für einen Mono-Lautsprecher. Dann öffnest du ein neues Terminal und navigierst zum Verzeichnis /home/mendel/speech/project-keyword-spotter. Die Sprachsteuerung startest du mit
bash run_yt_voice_control.sh
Wechsle zurück zum Browser. Sage einen für Youtube relevanten Befehl wie „next song“, „volume up“ oder „mute“. Im Terminal erscheint die Erkennung, und im Browser wird der Sprachbefehl von Youtube ausgeführt. In manchen Fällen kann es passieren, dass der Anschluss eines Kopfhörers die Sprachsteuerung stört. Ein Monitor mit eingebautem Lautsprecher oder ein externer 2-Pin-Lautsprecher könnten hier für Abhilfe sorgen.
Youtube lässt sich mit Hilfe von einfachen Sprachbefehlen im Browser steuern.
Das Sprachsteuerungs-Projekt verwendet das Python-Modul PyUserInput, um Tastatureingaben zu simulieren. Eine Zuordnung zwischen den Sprachbefehlen und den Tasten-Kombinationen befindet sich in der Datei „commands_v2.txt“ im Unterverzeichnis „config“. Der Sprachbefehl „next song“ etwa ist mit der Tasten-Kombination [Shift]+[N] gemappt, die das Programm dann an Youtube übermittelt. Du kannst in der Datei auch neue Zuordnungen hinzuzufügen, also einem Sprachbefehl eine Aktion zuordnen. Grundsätzlich lassen sich so auch andere Webseiten steuern.
Liste der gültigen SprachbefehleDas Modell erkennt 148 Sprachbefehle. Um diese alle anzuzeigen, wechselst du mit |
Modelle erstellen oder neu trainieren
|