ivanka test-setup

felix schwenzel, , in artikel    

letzte woche kam der raspberry und ein ps3 eye kamera/mikrofon, das ich neben den anderen komponenenten für ivanka bestellt hatte. auf die lieferung von eckstein, mit dem aufsteckmikrofon-hat und lautsprecher, warte ich noch immer. ich versuche ja eher weniger bei amazon zu bestellen, aber wenn man sich anguckt wie eckstein meine bestellung händelte, fühle ich mich inspiriert dann doch wieder lieber bei amazon zu bestellen. von eckstein wurde vor allem stille geliefert, erst als ich nach über einer woche nachfragte, antwortete man mir, dass es störungen im zulieferungsprozess gäbe (meine worte) und ich mich noch mindestens eine woche gedulden müsse.

trotzdem konnte ich mir meine neue sprachassistentin, die alexa ablösen soll, zusammenbauen. an den raspberry schloss ich, neben den kamera/mikorofon von sony, dass gerade mal 10 euro kostet aber 4 richtmikrofone verbaut hat und exzellente empfehlungen für sprachassistenten hat, einen batteriebetriebenen mini-lautsprecher, der noch bei uns rumlag, an den kopfhörerausgang an. auf eine SD-karte kopierte ich raspbian, so wie die hervorragende snips-doku das empfiehlt, der ich schritt für schritt folgte.

das betriebsystem und snips selbst zu installieren ging schnell und war nicht übermässig anspruchsvoll. die tools, insbesondere das snips eigene sam, macht die installation wirklich einfach — wenn man mindestens weiss was eine kommandozeile ist. ein bisschen kniffelig war ein konfigurationsaspekt, der eher schlecht dokumentiert ist. seit ein paar releases lässt die snips konfigurationsdatei (/etc/snips.toml) nämlich zu, dass man, statt des mosquitto mqtt-servers auf dem raspberry, auch seinen vorhandenen, eigenen mosquitto nutzen kann. das problem (bei mir) war allerdings, dass mit dem externen, also dem vorhandnen mqtt-server, nichts mehr richtig funktionierte. die spracherkennung funktionierte noch, aber weder der demo-client noch nachinstallierte apps wollten richtig funktionieren. nach einigen stunden debugging war klar, mit externem mqtt geht’s nicht. zu viele komponenten, vor allem aber zu viele fertige action-scripte haben den lokalen mqtt-server hardgecodet auf localhost:1883.

das ist aber auch kein problem, ich habe den lokalen snips-mosquitto einfach in meinen eigenen mosquitto gebridged. in der /etc/mosquitto/mosquitto.conf habe ich folgendes ergänzt:


connection snipsmqtt
address <remote ip>:<port>
remote_username <username>
remote_password <password>
remote_clientid snips
start_type automatic
topic hermes/dialogueManager/# in
topic hermes/asr/# in
topic hermes/hotword/# out
topic hermes/intent/# out
topic hermes/asr/# out
topic hermes/hotword/# out
topic hermes/nlu/# out
topic hermes/tts/# in

damit leitet der snips-mosquitto alle relevanten topics an meinen homeassistant-mqtt-server weiter und empfängt alles was homeassistant zurückschickt.

snips nutzt mqtt als bus. das heisst, alle snips-komponenten kommunizieren über mqtt. der snips-audioserver sendet ständig audiosample-schnipsel über mqtt, die wiederum von der snips wake-/hotword-komponente aufgefangen und analysiert werden. schlägt die hotword komponente alarm, schnappt die ASR-komponente (Automatic Speech Recognition) die audio-samples auf und versucht gesprochenen worte aus den audio-samples zu extrahieren. die extrahierten, gesprochenen sätze werden dann wieder über mqtt an die NLU-komponente (Natural Language Understanding) weitergegeben, die aus den worten den sinn zu exrahieren versucht. danach übernehmen scripte, aktionen oder dialog-komponenten und am ende die tts-komponente (Text to Speech). alles über mqtt.

bevor ich weiter in technische details gehe, fang ich mal mit dem fazit an: das funktioniert alles sehr, sehr gut, mit ein paar abstrichen.

sowohl das eingebaute, mitgelieferte hot-/wakeword (auf deutsch nur eins: „hey snips“), als auch die spracherkennung und analyse funktioniere solide. die standardmässige sprachausgabe, die, wie alles andere, lokal auf dem raspberry stattfindet, ist ein bisschen erbärmlich. pico2wave hört sich noch schlimmer an, als die unheimlichen, von apple mitgelieferten tts-stimmen (auf deutsch „Anna“, auf englisch „Alex“, „Fred“, „Samantha“ und „Victoria“).

ebenso enttäuschend wie die sprachsynthese, ist die personalisierte, „custom“ hotword-erstellung. ein bisschen war das ja der witz, eine sprachassistin zu haben die wir nicht mit „alexa“ aufrufen müssen, sondern mit „ivanka“. snips liefert ein python-script mit dem die aufnahme von audio-schnipseln wirklich einfach ist und diese persönlichen modelle reagieren dann auch auf „ivanka“, aber eben auch auf geschirrklappern, naseschnäuzen, husten oder wenn die beifahrerin etwas lauter redet. auf was diese persönlichen modelle nicht reagieren: wenn die beifahrerin „ivanka“ sagt. um universelle hotword-modelle zu bauen, die mit verschiedenen, möglichst allen stimmen und dialekten funktionieren, benötigt man tausende verschiedene sprachsamples mit denen dann das modell trainiert wird.

die schwächen der weckwort-erkennung, sowie der standard text-zu-sprache-komponente, lassen sich aber dank der extrem modularen bauweise von snips gut beheben. weil eben alles über den mqtt-bus geht und die komponenten nicht direkt, sondern eben über über mqtt-nachrichten kommunizieren, kann man einfach komponenten ergänzen oder austauschen. dazu in einem anderen artikel mehr.

der rest von snips funktioniert aber, wie gesagt, enorm befriedigend. die spracherkennung, das anlegen, pflegen von skills, intents, slots und die integration in home-assistant funktionieren so gut, dass ich die original alexa bereits vor vier tagen ausgestöpselt habe. die von uns am häufigsten genutzten alexa-funktionen (lichtsteuerung in der küche, timer, einkaufsliste (via bring), wetter) konnte ich bereits alle in snips nachbauen. dazu in separaten artikeln mehr.

was mich an der original-alexa damals sehr begeistert hat war, dass sie mich auch hörte (wenn’s ruhig war), wenn ich neben der küche auf dem klo sass und sagte: „alexa, licht im flur ausschalten!“ ich fand das gleichzeitig (technisch) beeindruckend, aber auch ein bisschen creepy. wenn alexa mich bei geöffneten türen (und ruhe) auch auf dem klo hört, was hört sie sonst noch alles? mein provisorischer snips-setup mit dem ps3 eye kamera/mikrofon funktioniert aber erstaunlicherweise genauso gut! ohne sonderlich laut zu werden, kann ich snips auch auf dem klo sitzend sagen, das licht im flur an (oder aus) zu schalten.

ich bin gespannt, ob der etwas kompaktere mikrofon-hat, wenn er denn irgendwann mal von eckstein geliefert wird, genauso beeindruckend funktionieren wird.

snips
von links: alexa (offline), ps3 eye kamera/mikrofon, raspberry und ein lautsprecher. dazwischen bastelkram.

die original alexa liegt noch in der küche, allerdings offline und kabellos, als kandis-dosen-beschwerer. so richtig vermisst habe ich sie in den letzten tagen, seit dem sie offline ist, nicht. snips ist toll!