Quantcast
Channel: Swisscom ICT » Project 365d
Viewing all articles
Browse latest Browse all 66

Sprachsteuerung in der ICT WG – Theorie und Praxis

$
0
0

Wäre es nicht cool, das eigene Zuhause per Sprache steuern zu können? Genau das haben wir uns in der ICT WG auch gedacht. Zwar können wir mit der App HabDroid unseres Smart Home Servers mittlerweile einige Dinge über das Natel steuern. Aber das Handy aus der Tasche holen, entsperren, App öffnen und darin navigieren, schmälert Usabilty und Experience leider so sehr, dass wir es meistens lassen. Der Wohnung ein Gehör zu verleihen, wäre in vielerlei Hinsicht praktischer. Und verdammt cool.

Aber gibt’s das nicht schon?

Die bekanntesten und akkuratesten Spracherkennungen sind Google Now, aktuell nur für Smartphones, und Apples Siri, das bereits in HomeKit integriert ist und die smarten Geräte idealerweise sogar beim Namen kennt. Es gibt eine Reihe weiterer Produkte mit Sprachunterstützung für das Smart Home, zum Beispiel Amazons schon im September ’14 vorgestellter WiFi-Speaker Echo mit integrierter Sprachassistentin Alexa, die mit den Bewohnern interagiert, indem sie Kommandos entgegennimmt und entsprechend reagiert. Out of the box lassen sich Philips Hue Lampen steuern, Einkaufszettel erstellen oder auf Nachfrage Texte von Wikipedia wiedergeben. Amazon integriert ständig neue Features und hat Ende Juni einen DevKit für Alexa veröffentlicht, der Dritten erlaubt, Alexa neue Skills für eigene Anwendungen beizubringen. Ob man Amazons auditive Standleitung ins Wohnzimmer freiwillig mit Strom versorgt, bleibt natürlich jedem selbst überlassen. Aktuell ist Echo sowieso nur in den USA erhältlich.

Auf den grossen Durchbruch warten wir allerdings auch hier noch, was wohl auch an der Komplexität von Sprache liegt. Während unser Gehirn nicht nur einzelne Worte und Sätze, sondern auch Emotionen, Sarkasmus und andere Dinge des Sprechers erkennt, sieht es in der Software ein wenig anders aus. Das behalten wir uns im Hinterkopf, falls es mal nicht klappt wie wir es gerne hätten :)

Unser Ansatz

Unser System soll kontinuierlich auf ein Schlüsselwort lauschen, aber bitte nicht alles in die Cloud Von-Welchem-Datensammler-Auch-Immer streamen. Das versuchen wir (leider immernoch) mit der quelloffnenen Voice Recognition Software Pocketsphinx zu erreichen. Da die Qualität des Keyword Spotting gerade so eigentlich nicht ausreicht (siehe Live Demo) und für den dann folgenden Befehl bei weitem nicht akkurat genug ist, nehmen wir den Befehl auf und senden ihn als Datei zur Googles Speech-To-Text (STT) API. Den empfangenen Text sendet der Pi dann an OpenHab, wo der Befehl via einfachem String Processing verarbeitet wird. OpenHab bedient sich wiederum Googles Text-To-Speech (TTS) API um nachzufragen, falls für ein Befehl nicht alle Parameter vorliegen oder um eine Konversation zu führen.

speech

 

Raspberry Pi

So viel zur Theorie. Zu allererst brauchen wir ein Mikrofon: Das Samson Meteor USB Mic hat eine ausgezeichnete Aufnahmequalität und auch das Design hat uns überzeugt, soll es doch später unsere Wohnung schmücken. Am Raspberry Pi funktioniert es out of the box. Mit dmesg und lsusb sehen wir, dass für das neu eingesteckte Mikrofon Treiber geladen wurden. Die erste Aufnahme machen wir erfolgreich mit arecord und aplay spielt uns das File über den Audiojack oder HDMI wieder ab. Die Aufnahmelautstärke erhöhen wir mit alsamixer auf circa 80%.

Wie schon erwähnt, bekamen wir das Keyword Spotting auf dem Raspberry Pi leider nicht stabil zum laufen, sodass wir als Trigger OpenHab Events nutzen. Das kann zum Beispiel das ‘Öffnen der Eingangstür’, ‘Drücken eines HomeMatic Tasters’, ‘Alarm eines Bewegungsmelders’ oder einfach eine fixe Uhrzeit sein. OpenHab führt dann via SSH den Befehl zum Aufnehmen des Befehls auf dem Pi aus. Die Länge der Aufnahmedauer in Sekunden und der Name des OpenHab Item, in dem der Befehl als String schliesslich abgespeichert wird, werden als Parameter übergeben.

abc3

Um vom Mikrofon aufzunehmen und die Sprache als Text zu bekommen, nutzen wir auf dem Raspberry die PiAUISuite. Folgender Befehl nimmt Ton vom Mikrofon auf, schickt die Datei an Google und gibt den Text zurück, der im obigen Skript in $message gespeichert wird:

abc5

 OpenHab

In OpenHab wird die Sprachsteuerung initiiert, zum Beispiel wenn die Tür geöffnet wird:

abc1

Für die Ausgabe von Text in Sprache haben wir auf unserer Synology gTTS installiert, eine in Python geschriebene Schnittstelle zur Google TTS API, die im Skript texttospeech.sh gerufen wird. Die Audiodatei wird auf unserem Share music abgelegt und anschliessend vom Sonos System abgespielt.

abc2

Wir warten, bis die Audiodatei komplett abgespielt wurde und geben vor der Aktivierung des Mikrofons auf dem Pi noch einen Beep-Sound aus. Sobald der Pi dann alles erledigt hat, erhalten wir im Item VoiceCommand ein Update mit dem aufgenommenen Text und können entsprechend reagieren:

abc

 

Das Ergebnis

Wie genau das jetzt abläuft, wird am besten in unseren kleinen Videos klar:

 

 

Natürlich wissen wir, was unser System als Nächstes sagt oder fragen wird. Richtige Unterhaltungen können wir leider – oder auch zum Glück – nicht führen. Trotzdem macht es viel Spass und kann sogar nützlich sein, auch wenn die Performance der Texterkennung oft zu wünschen übrig lässt. Würdest du auch sprachgesteuerte Dinge einsetzen? Und falls ja: hättest du auch Bedenken bei einem Mikrofon, das permanent alles zu einem grossen (US) Unternehmen sendet?


Viewing all articles
Browse latest Browse all 66

Trending Articles