Spracherkennung und Computersteuerung mit Sprache ist sehr cool und seit Jahren hätte ich das gern für meinen Computer. Und jetzt langsam ist es möglich die Spracherkennung auf dem eigenen Rechner ablaufen zu lassen, ohne seine Stimme ins Internet und in die Fänge der großen Techgiganten zu senden.
Aber wie bei allen neuen Sachen, ist nichts einfach. Wer schon einmal versucht hat DeepSpeech oder Kaldi auf dem eigenen Rechner zu installieren, kennt die Probleme. Vor allem Dank der vielen Abhängigkeiten in Bezug zur Hardware, das Betriebsystem, der Version des Betriebsystem, die Versionen der Scriptsprachen die benötigt werden, Packete die von dem Scriptsprachen wiederum benötigt werden und die sich aber gegenseitig nicht ausstehen können, den Mondphasen und dem Wasserstand des Flusses Budhiganga.
Zum Glück tauchen von Entwicklern die sich mit Sprachsystemen auskennen, immer mehr Dockerimages auf, die 99% dieser Probleme lösen.
Im heutigen Eintrag soll es um Rhasspy gehen. Rhasspy ist kein Personal Assistent Komplettsystem bietet aber viele Komponenten die zur Zeit verfügbar sind in einem einfachen System zum testen an. Rhasspy kümmert sich um alles bis auf die Logik Es ist Modular aufgebaut. Zugriff auf diese Module gibt es per API oder durch einen MQTT Server. Wunderschön umgesetzt und arbeitet ohne Probleme mit Node-RED zussammen, dass ich dann im zweiten Teil bespreche.
Etappenziel
Mein Ziel war es, ein System aufzusetzen, dass auf einen Sprachbefehl reagiert und entsprechend antwortet. Mein Rechner ist ein Manjaro Linux Laptop mit integriertem Mikrophone.
Das Projekt verfügt über eine ziemlich umfangreiche Dokumentation, die sich hier befindet: https://rhasspy.readthedocs.io/en/latest/installation/
Als erstes wird Rhasspy mit Docker installiert:
docker run -d -p 12101:12101 \
--name rhasspy \
--restart unless-stopped \
-v "$HOME/.config/rhasspy/profiles:/profiles" \
-v "/etc/localtime:/etc/localtime:ro" \
--device /dev/snd:/dev/snd \
rhasspy/rhasspy \
--user-profiles /profiles \
--profile de
Rahsspy wird auch auf Deutsch angeboten, deswegen habe ich --profile
von en
auf de
geändert. (Einen kleinen Spickzettel für Docker gab’s in meinem letzten Blogeintrag)
Nachdem der Container installiert ist, kann mit http://localhost:12101 auf Rhasspy zugegriffen werden.
Jetzt müssen noch in den einzelnen Bereichen die gewünschten Module aktiviert werden und benötigte Dateien werden runter geladen. Diese neu runter geladenen Dateien werden von Rhasspy im persistenten Teil gespeichert, sind also auch für andere Container verfügbar.
Soundprobleme
Meine Lautsprecher und mein Mikrophone funktionieren, manchmal. Und dies ist mit einer der Gründe warum Sprachassistenten noch keine weite Verbreitung in Linux erlebt haben. Sound gehört nicht zu Linux stärken. Rhasspy benutzt Alsa für den Sound. Was auch an sich gut funktioniert. Will ich jedoch mit Pulseaudio auf dem Desktop noch Musik hören wird es schwierig. Für die, die sich mit der Soundproblematik in Linux nicht so auskennen. Alsa ist so etwas wie die unterste Ebene, es bietet grob gesagt die Soundkarte als Datei bzw Dateien an. Das hat einen kleinen Nachteil, nur ein Programm kann immer nur auf die besagten Dateien zugreifen. Gleichzeitig Sound von Firefox und VLC ist in der Grundkonfiguration nicht vorgesehen. Um dieses Problem zu umgehen und etwas mehr Funktionalität anzubieten, wurde Pulseaudio erfunden. Es schnappt sich einfach die von Alsa bereitgestellte Soundkarte und jedes Programm das jetzt Sound ausgeben will wird von Pulseaudio zusammen gemixt. Bei der Rhasspydokumentation steht auch eine Anleitung wie man mit asound.conf Rhasspy dazu überreden kann mit Pulseaudio zusammenzuarbeiten. Funktioniert bei mir leider nicht. Sobald mein Pulseaudio aktiviert wird hat Docker keinen Zugriff mehr auf die Soundkarte und weicht nicht auf Pulseaudio aus. Auf einem Raspberry Pi der nur für den Assistenten da ist, wäre das natürlich komplett egal, da wird einfach Alsa direkt verwendet, aber auf einem Desktopsystem nervt es mich doch schon. Ich werde in einem weiteren Blogeintrag erörtern wie dieses Problem gelöst oder wenigstens umgangen werden kann.
Im nächsten Eintrag wird Rhasspy konfiguriert.