Serie: Sprachsteuerung - Teil 2

Mo, 12. Juli 2021, Ralf Hersel

Im zweiten Teil der Serie über die Sprachsteuerung unter Linux, verwenden wir ein Mikrofon, um die Speech-to-Text Maschine zu füttern. Im ersten Teil wurde die Grundinstallation der Vosk-Engine und der Vosk-Schnittstelle beschrieben. Danach konntet ihr eine WAV-Datei mit gesprochenen Zahlen von Vosk in geschriebene Zahlen umwandeln lassen. Nun testen wir die Mikrofon-Schnittstelle.

Das Python-Skript für die Mikrofon-Schnittstelle befindet sich im Verzeichnis: ../vosk-api/python/example. Bevor man das Testen kann, muss zuerst die Eingabequelle (das Mikrofon) ermittelt werden. Dazu ruft man das Skript mit dem Parameter -l auf, worauf es eine Liste der erkannten Devices anzeigt:

./test_microphone.py -l

   0 HDA Intel: Generic Analog (hw:0,0), ALSA (2 in, 2 out)
   1 sysdefault, ALSA (128 in, 128 out)
   2 front, ALSA (0 in, 2 out)
   3 surround40, ALSA (0 in, 2 out)
   4 surround51, ALSA (0 in, 2 out)
   5 surround71, ALSA (0 in, 2 out)
   6 samplerate, ALSA (128 in, 128 out)
   7 speexrate, ALSA (128 in, 128 out)
*  8 pulse, ALSA (32 in, 32 out)
   9 speex, ALSA (1 in, 1 out)
  10 upmix, ALSA (8 in, 8 out)
  11 vdownmix, ALSA (6 in, 6 out)
  12 dmix, ALSA (0 in, 2 out)
  13 default, ALSA (32 in, 32 out)

Bei mir sieht das so aus; bei euch anders.

Höchstwahrscheinlich werdet ihr diese Liste gar nicht sehen, weil Python eine Fehlermeldung wirft, und sich beschwert, dass das Modul sounddevice fehlt. Das lässt sich mit pip3 install sounddevice schnell nachholen. Sollte Python jetzt meckern, dass PortAudio fehlt, habt ihr Pech gehabt. Bei meinem ersten Versuch unter Ubuntu 20.04 hatte ich dieses Problem und bin nicht weitergekommen. Mit einem aktuellen Manjaro lief die Sache nach der Installation von sounddevice problemlos.

Nun muss man ausprobieren, welches Device das richtige ist. In meinem Fall war es die Nummer 8 (pulse, ALSA). Zum Testen verwendet man wieder das Skript, dieses Mal gibt man die Device-Nr als Parameter mit: ./test_microphone.py -d 8. Im Terminal läuft nun die permanente Spracherkennung. Ich empfehle, es mit einfachen englischen Wörtern zu Testen, zum Beispiel: one, two, in, out, usw. Falls nichts erkannt wird, habt ihr das falsche Device gewählt.

./test_microphone.py -d 8

( 10 Zeilen Load-Geschwurbel )

{
  "partial" : "one"
}
{
  "partial" : "one way"
}
{
  "partial" : "one three one"
}
{
  "partial" : "one way or the"
}

Im obigen Beispiel habe ich die Worte 'one two three' mehrmals hintereinander eingesprochen.

Wer mit einem anderen Sprachmodell spielen möchte, kann sich hier das gewünschte Modell herunterladen. Im ersten Teil (zweiter Code-Block) ist beschrieben, wie man das macht. Die Ergebnisse bei der Spracherkennung mit dem englischen Modell waren auf meinem Notebook (eingebautes Mikrofon) eher schlecht. Ob das an der virtuellen Maschine oder am schlechten Mikrofon lag, kann ich nicht beurteilen.

Die Worterkennung wird vom Test-Skript als JSON-Struktur im Terminal ausgegeben (siehe letzten Codeblock). Zum Testen mag das in Ordnung sein, für eine Sprachsteuerung jedoch nicht. Im dritten Teil der Serie zeige ich, wie man die Software so modifiziert, dass erkannte Worte in Steuerbefehle umgewandelt werden.

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