HH maczarr.de

"Jasper, Lights Off" - Sprachsteuerung im Eigenbau

I Am Iron Man

Alles fing damit an, dass vor einigen Monaten der Film "Iron Man 3" bei Amazon Prime mit ins freie Programm kam. Ich mag die aktuellen Iron Man-Filme, der aufgelockerte Tony, der aber auch seine Probleme hat kommt gut rüber. Weitaus interessanter finde ich aber den digitalen Assistenen J.A.R.V.I.S. - in den (alten) Comics noch ein loyaler Butler ist er in den neuen, modernisierten Versionen ein Computerprogramm mit neuronalem Netz im Hintergrund, der Aufgaben ausführt, Tonys Befehle auch implizit versteht und immer einen sarkastischen Spruch auf Lager hat. Doch Tony erwähnt auch, dass J.A.R.V.I.S. ursprünglich nur ein einfaches Sprach-Interface war um Aufgaben zu steuern.
War es bisher so, dass ich nach dem Schauen eines Iron Man-Films immer mal wieder schaute, was es neues bei Elon Musk gab, so recherchierte ich diesmal angefixt von J.A.R.V.I.S. was es eigentlich so für Möglichkeiten der Sprachsteuerung des Computers gab.

Sprachsteuerung, aber bitte ohne Cloud

Klar, Siri kennen wir inzwischen alle. Dazu kommt noch der nicht mit einem Namen ausgestattete Dienst von Google, dazu Cortana von Microsoft und auch Amazon ist mittlerweile mit einem Spracherkennungsdienst auf dem Markt. Und das sind nur die großen. Einige dieser Angebote stellen mittels einer API ihre Dienste auch anderen zur Verfügung, Google beispielsweise. Aber mir widerstrebt es einfach massivst, dass alles was ich sage erstmal an einen Google-Server geschickt wird, dort gespeichert, analysiert und dann der erkannte Text an mich zurück geschickt wird.
Doch dann stieß ich auf das Projekt "Jasper". Open Source, kostenlos und modular aufgebaut. So unterstützt Jasper zwar auch zur Spracherkennung Cloud-Dienste wie den von Google, aber eben auch rein lokal laufende wie Pocketsphinx. Das schöne an Jasper ist, man wählt den Dienst einfach bei der Installation aus bzw. kann auch einen anderen später installieren und per Konfiguration einfach umstellen. ("Choosing an STT engine")

TTS und STT

Bei der verbalen Interaktion mit dem Computer gibt es zwei wesentliche Komponenten. Spreche ich mit dem Computer, so kommt eine "Speech-To-Text"-Software (STT) ins Spiel. Per Mikrophon wird meine Sprache an die Software übergeben, diese versucht dann daraus Wörter zu erkennen und liefert den erkannten Text an die Software zurück. Die Software muss dann einprogrammiert haben, wie sie auf welchen Text reagiert - welche Aufgaben werden also ausgeführt.

Das Erkennen von Sprache ist ein interessantes Feld. Die Software muss trainiert werden indem sie von vielen vielen Texten Sprachbeispiele als Audio-Datei hat, dazu noch die Text-Repräsentation und dann noch alle Worte im Text phonetisch aufgeschrieben. Desto mehr Daten die Software zum Trainieren hat umso besser kann sie Sprache erkennen. Die Software teilt die aufgenommene Sprache auch erstmal in Phoneme aus denen dann erst die Worte abgeleitet werden. Wie schon gesagt, ein sehr interessantes Feld, aber soll hier jetzt nicht Hauptthema sein. (Inzwischen wird auch eher mit Phonem-Gruppen als einzelnen Phonemen gearbeitet, aber wie schon gesagt: anderes Thema...)

So, die Software hat jetzt schon Text aus Sprache erkannt, den Text einem Programm übergeben, dieses hat daraufhin eine Aufgabe durchgeführt und nun? Das Resultat einfach am Bildschirm ausgeben lassen? Wie langweilig! Nein, der Computer soll sprechen. Dafür nutzt man nun eine "Text-To-Speech"-Software (TTS). Das Programm übergibt einfach den vorzulesenden Text an die TTS-Software, diese generiert daraus eine Audio-Datei, welche anschließend abgespielt wird.

Aufgaben, Aufgaben, Aufgaben

Zurück zu Jasper. Angefixt von der Thematik kaufte ich mir sogleich einen Raspberry Pi 2 und installierte Jasper auf dem Mini-Computer. Hier und da etwas hakelig, aber im Großen und Ganzen ist die Installationserklärung auf der Projekt-Website gut. Zugegebenermaßen wird da offiziell nicht von einem Support des RasPi 2 gesprochen, ging aber wie schon gesagt dennoch bei mir.
Wenn man dann fertig ist kann Jasper ein paar Standardaufgaben, mit denen es ausgeliefert wird, z.B. die Zeit ansagen, Spotify steuern, Facebook vorlesen und einen Status posten, E-Mails von GMail abholen und Hacker-News vorlesen. Doch der Clou an Jasper ist, dass das System modular aufgebaut ist und man einfach selbst Module schreiben kann um Jasper um die eigenen Bedürfnisse zu erweitern.
Es gibt Module bei denen man
- einen Befehl spricht, der direkt ausgeführt wird oder Jasper noch Rückfragen stellen kann (Standard Module),
- von Jasper angesprochen wird, wenn etwas neues passiert ist (Notification Module).

Für beide Arten von Modulen sind Beispiele im Lieferumfang dabei, sodass man sich dort anschauen kann, wie der Code aufgebaut sein muss. Außerdem gibt es Tutorials auf der Website.

Jasper ist in Python geschrieben. Zuvor habe ich noch nie irgendwas mit Python gemacht, aber man kommt schnell rein und kann seine eigenen Module verfassen.

Fazit

Jasper ist eine tolle Basis um ins Thema einzusteigen. Der Aufbau der Software scheint gut durchdacht, mir gefällt der modulare Ansatz bei der Spracherkennungs- sowie Sprachausgabe-Software und ebenso die Erweiterung des Funktionsumfangs durch eigene Module für die einzelnen Aufgaben.
Die kostenlose Spracherkennungssoftware Pocketsphinx, die lokal auf dem Raspberry Pi läuft, ist leider nicht so super. Man sollte sich besser zum Auslösen von Aufgaben auf einfache, wenige Begriffe beschränken anstatt in ganzen Sätzen sprechen zu wollen, da die Software hier sonst viele falsche Erkennungstreffer landet. So ist "Jasper, Lights Off" besser als "Jasper, would you please switch the lights off". Man muss allerdings sagen, dass man heutzutage natürlich durch die Cloud-Dienste à la Google und Siri verwöhnt ist was die Trefferquoten angeht. Diese Firmen haben schlichtweg die Asche da richtig reinzubuttern.
Achja, Sprache: Die Sprachausgabe habe ich problemlos auf Deutsch gestellt, das ist kein Ding. Die Spracherkennung sollte man besser auf Englisch lassen, da hier mehr Trainingsdaten vorliegen und die Erkennung somit besser ist als für die deutsche Sprache.

Falls sich jetzt jemand gefragt hat, wo hier eigentlich mal der Befehl "Jasper, Lights Off" näher beleuchtet wurde ('n Brüller-Gag, oder!?), dem kann ich nur sagen: das kommt demnächst in einem gesonderten Beitrag. Ich habe tatsächlich vor meine Jasper-Module und deren Verzahnung mit anderen (IoT-)Geräten einzeln zu besprechen. Dieser Eintrag ist eh schon wieder so lang, dass den keiner liest.