Serie: Sprachsteuerung - Teil 1

Do, 8. Juli 2021, Ralf Hersel

"Alexa, bestelle mir ein Puppenhaus". Die meisten von euch kennen diese lustige, bzw. verstörende Geschichte. Sehen wir einmal von den Fehlfunktionen und der Auswertung von Sprach-Kommandos in der Cloud ab, ist die Technik von STT (speech-to-text) faszinierend, solange sie unter kontrollierten Bedingungen abläuft. In dieser Serie widme ich mich der Umsetzung für den privaten Gebrauch unter Linux.

Niemand möchte eine Wanze selbst bezahlen und freiwillig seine Privatsphäre an Amazon kostenlos abgeben. Dennoch ist die Spracherkennung und Sprachsteuerung eine interessante Technologie, die auch im freien und privatsphäre-freundlichen Umfeld geschätzt wird. Der erste Teil dieser Serie erklärt die Voraussetzungen.

Sucht man im Internet nach 'Linux STT', so findet man als erstes (tätä) einen Artikel bei GNU/Linux.ch vom August 2020, an den ich mich nicht mehr erinnern kann, obwohl ich ihn geschrieben habe. Darin werden 10 verschiedene STT-Systeme kurz vorgestellt. Für diese Serie konzentriere ich mich auf Vosk, weil es funktioniert.

Vosk ist eines der neuesten Open-Source-Spracherkennungssysteme, da seine Entwicklung erst im Jahr 2020 begann. Im Gegensatz zu anderen Systemen ist Vosk nach der Installation sofort einsatzbereit, da es 10 Sprachen unterstützt (Englisch, Deutsch, Französisch, Türkisch...), wobei den Benutzern bereits relativ kleine Modelle in der Grösse von 50 MB zur Verfügung stehen (es gibt andere grössere Modelle mit bis zu 1,4 GB). Vosk funktioniert auch auf Raspberry Pi, iOS und Android-Geräten und bietet eine Streaming-API, um Spracherkennungsaufgaben online zu erledigen. Vosk hat Bindings für Java, Python, JavaScript, C# und NodeJS.

Das Prinzip

STT-Systeme nehmen als Eingabe eine Audiodatei entgegen und wandeln sie anhand eines Sprachmodells in Text um. Der gesprochene Text "Das ist ein Auto" wird in den geschriebenen Text "Das ist ein Auto" umgewandelt. Dabei kommen in der Regel grosse Sprachmodelle für einzelne Sprachen zum Einsatz. Ein englisches Sprachmodell kann nichts mit deutscher Sprache anfangen, und umgekehrt. Da eine Audiodatei als Eingabe unpraktisch ist, gibt es Module, die den Audio-Stream von einem Mikrofon direkt verarbeiten können. Die Ausgabe des Sprachmodells ist immer ein geschriebener Text. Dieser kann wiederum in ein Kommando umgesetzt werden, was in der Regel kein Bestandteil der SST-Systeme ist. Wenn man die Textausgabe "Taschenrechner" erhält, muss man sich selbst darum kümmern, diesen Text in ein Kommando zum Starten des Taschenrechners umzusetzen.

Die Installation

Vosk lässt sich sehr einfach bereitstellen. Zuerst installiert man das Grundsystem mit dem Kommando:

pip3 install vosk

Falls man den Python-Installer (pip3) noch nicht installiert hat, lässt sich das nachholen. Die eigene Distribution erklärt normalerweise, wie das geht. Unter Manjaro geht das mit: pacman -S python-pip

Vosk funktioniert nur auf aktuellen Linux Distributionen. Mein erster Versuch unter Ubuntu LTS 20.04 schlug fehl, da einige Abhängigkeiten fehlten und auch nicht nachinstalliert werden konnten. Erfolg hatte ich mit der Rolling-Distro Manjaro in einer virtuellen Maschine.

Nun hat man Vosk installiert, aber noch keine Schnittstelle, um damit zu arbeiten. Das holen wir im nächsten Schritt nach. Es empfiehlt sich, die folgenden Befehle in einen Development-Unterverzeichnis auszuführen, zum Beispiel in: /home/user/dev/. Bitte führt diese Befehle einzeln aus:

git clone https://github.com/alphacep/vosk-api
cd vosk-api/python/example
wget https://alphacephei.com/kaldi/models/vosk-model-small-en-us-0.15.zip
unzip vosk-model-small-en-us-0.15.zip
mv vosk-model-small-en-us-0.15 model
python3 ./test_simple.py test.wav

Mit dem letzten Kommando wird die Audiodatei 'test.wav' in die Spracherkennung geschickt. Als Ergebnis solltet ihr eine Ausgabe sehen, in der mehrere Zahlen als Text ausgegeben werden. Falls das bei euch funktioniert, ist der erste Teil der Serie überstanden. Im zweiten Teil erkläre ich wie man das Sprachmodell über ein Mikrofon füttert.

Wenn ihr Vosk mit eigenen Audiodateien testen möchtet, müsst ihr sicherstellen, dass die Dateien das richtige Format haben: PCM 16khz 16bit Mono. Falls ffmpeg installiert ist, kann man mit dem Skript: test_ffmpeg.py die Dateien konvertieren.

Quelle: https://alphacephei.com/vosk/