Spracherkennung mit dem Coral Dev Board Mini

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.

 

In diesem Blog erscheint nach und nach eine Serie von Artikeln, die sich mit dem Coral Dev Board Mini beschäftigen und dir zeigen, wie du damit umgehst und was du alles damit machen kannst.

Teil 1: Coral Dev Board Mini: Künstliche Intelligenz für den Hobbykeller

Teil 2: Das Coral AI Dev Board Mini im Überblick

Teil 3: Das Coral Dev Board Mini anschließen und loslegen

Teil 4: Mendel Linux: Das Betriebssystem des Coral AI Dev Board Mini

Teil 5: Kamera an das Coral AI Dev Board Mini anschließen

Teil 6: Die Erweiterungsleiste des Coral Dev Board Mini

Teil 7: Programmieren mit dem Coral AI Dev Board Mini

Teil 8: Bilderkennung mit dem Dev Board Mini und der Coral Camera

Teil 9: Spracherkennung mit dem Coral Dev Board Mini

Teil 10: Gestenerkennung mit dem Coral Dev Board Mini

Teil 11: KI-Modelle für das Coral AI Dev Board Mini erweitern

Extra: Mit dem Edge TPU-Compiler Modelle für das Coral Dev Board Mini erstellen

 

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.

 

Die Spracherkennung identifiziert den gesprochenen Befehl

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 per Sprachbefehl steuern

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 Sprachbefehle

Das Modell erkennt 148 Sprachbefehle. Um diese alle anzuzeigen, wechselst du mit
cd config
in das entsprechende Unterverzeichnis. Darin befindet sich die Datei „labels_gc2.raw.txt“. Sie enthält die Wörter, auf die das Modell trainiert ist. Um sie anzuzeigen, gibst du im Terminal den Befehl
less labels_gc2.raw.txt
ein. Du erhältst von der Git Bash eine Warnung, die du mit der Eingabetaste ignorierst. Es erscheint die Liste mit den Wörtern. Mit der Leertaste blätterst du weiter, und mit q beendest du die Ausgabe. Zu den gültigen Sprachbefehlen zählen etwa „volume up“, „volume down“, „mute“, „unmute“, „next song“ und „random song“.

 

 

Modelle erstellen oder neu trainieren


Um ein Modell zu erstellen, das die deutsche Sprache versteht, oder um die englischen Sprachbefehle zu erweitern, in beiden Fällen ist es notwendig, ein neues Modell zu erstellen oder ein bestehendes neu zu trainieren.


Du kannst Modelle jedoch nicht direkt mit TensorFlow Lite trainieren, mit dem das Board arbeitet – TensorFlow ist ein Framework für Machine Learning und Lite eine abgespeckte Version. Stattdessen musst du ein Modell von einer TensorFlow-Datei mit der Endung .pb – das steht für protobuf – in eine TensorFlow Lite-Datei mit der Endung .tflite-Datei konvertieren. Das erledigt der TensorFlow Lite-Konverter. Sobald du ein TensorFlow-Lite-Modell vorliegen hast, verwendest du den Edge TPU Compiler, um eine Datei zu erstellen, die mit der Edge TPU des Dev Board Mini kompatibel ist.


Das Trainieren eines neuronalen Netzwerks von Grund auf erfordert eine sehr große Menge an Trainingsdaten und benötigt sehr viel Rechenzeit. Aber statt ein eigenes Modell zu erstellen und es von Grund auf zu trainieren, kannst du auch ein vorhandenes Modell, das bereits mit der Edge TPU kompatibel ist, mithilfe einer Technik namens Transfer Learning neu trainieren. Dabei beginnst du mit einem Modell, das für eine verwandte Aufgabe trainiert ist, und führst damit ein weiteres Training durch, um dem Modell neue Klassifizierungen anhand eines kleinen Datensatzes beizubringen. Ein künftiger Artikel dieser Serie befasst sich näher mit dem Transfer Learning.

 

AiArtificial intelligenceCoral dev board miniCoral.aiGoogle aiKiKünstliche intelligenz

Leave a comment

All comments are moderated before being published