Spracherkennung, Chatbot mit Watson und Raspberry Pi

Erstellt von Sebastian am Do, 02.03.2017 - 11:07
IBM Bluemix Watson Raspberry Pi

IBM stellt in seiner Bluemix Cloud-Plattform als Service (PaaS) unter anderem die Dienste von Watson Analytics zur Verfügung. Mit Hilfe der Services Speech to Text (Spracherkennung), Conversation (Chatbot) und Text to Speech (Sprachausgabe) lässt sich auf dem Raspberry Pi ein intelligentes System erschaffen. Durch die tiefere Integration der Dienste können hiermit auch Haussteuerungen oder Kundeninformationssysteme (KIS) realisiert werden.

Grundlage ist neben der Anschaffung eines Raspberry Pi (Einkaufsliste) mit allen relevanten Komponenten, die komplette Einrichtung des Systems. Darauf baut die Installation, der für Watson notwendigen Teile, auf. Zusätzlich ist ein USB Mikrofon notwendig und Lautsprecher oder ein Fernseher mit HDMI Anschluss.

HINWEIS: Die hier beschriebene Installation ist auf Deutsch. Leider sind nicht alle Watson Dienste für die deutsche Sprache erhältlich. Insbesondere die Spracherkennung funktioniert noch nicht auf Deutsch.

Mikrofon prüfen

Bei dem Raspberry Pi 3 funktioniert der Playstation Eye Treiber direkt.

$ lsusb
Bus 001 Device 006: ID 1415:2000 Nam Tai E&E Products Ltd. or OmniVision Technologies, Inc. Sony Playstation Eye

Zum Testen reicht das Aufnehmen und Abspielen einer kurzen Datei. Hierbei helfen die Advanced Linux Sound Architecture (ALSA) Tools.

$ sudo apt-get install alsa-base alsa-utils

$ arecord -D plughw:1,0 -f cd test.wav
$ aplay test.wav

Speech to Text (Spracherkennung)

Der folgende Teil basiert auf den Beispielen des TJBot welcher von IBM selber zur Verfügung gestellt wird.

Der erste Schritt besteht darin, das Node.js Repository einzubinden. Dies ermöglicht die Installation der aktuellsten Version. Danach lässt sich der Code von Github.com auschecken und die Abhängigkeiten installieren.

$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
$ sudo apt-get install -y nodejs

$ git clone https://github.com/ibmtjbot/tjbot.git
$ cd tjbot/recipes/speech_to_text
$ npm install

Jetzt ist ein guter Zeitpunkt erreicht einen (kostenlosen) Bluemix Account anzulegen. Der Prozess ist selbsterklärend. Andernfalls gibt es ein kleines PDF dazu. Nach der Einrichtung des Accounts ist unter Services - Watson - Text to Speech ein neuer Dienst anzulegen. In der Einstellung des Services stehen unter dem Punkt Serviceberechtigungsnachweise - Berechtigungsnachweise anzeigen die Zugangsdaten. Diese sind in der config.js zu hinterlegen.

Der Beispielcode sieht das Einschalten einer mehrfarbigen LED von Adafruits vor. Ich habe diese LED nicht und war nur an der Ausgabe des Dienstes interessiert. Ich habe daher eine Kopie der Hauptdatei erstellt und den Code innerhalb der LED Steuerung auskommentiert. Nach dem Starten lauscht der Raspberry Pi auf die Sprache und wartet bis zur ersten Sprechpause. Die erkannten Sätze erscheinen dann in der Textausgabe.

$ vi config.js

$ cp stt.js stt_console.js
# Licht Code auskommentiert
$ sudo node stt_console.js

Update: Der vereinfachte Code ohne die Lichtsteuerung kann jetzt in meinem Github.com Projekt heruntergeladen werden.

$ git clone https://github.com/spech66/watson_speech_to_text.git
$ cd watson_speech_to_text
$ npm install
$ vi config.js
$ sudo node speech_to_text.js

Chatbot und Text to speech (Sprachausgabe)

Mit den beiden zusätzlichen Services ist das Erstellen von interaktiven Systemen sehr einfach. In dem oben bereits ausgecheckten Code findet sich das Verzeichnis conversations. Hier lauscht der Raspberry Pi auf ein Aktivierungswort (Watson als Default) und schickt den Satz nach dem Schlüsselwort an den Conversations Dienst, dieser ermittelt eine sinnvolle Antwort und schickt den Text zurück. Der Text kann dann durch den Sprachausgabedienst in eine Audiodatei umgewandelt werden, die sich dann abspielen lässt. Zuerst die Services Text to Speech und Conversation aktivieren. Danach sind in beiden Services wieder die Zugangsdaten hinterlegt. Diese gehören in die config.js Datei.

$ cd ~/crmcopter/tjbot/recipes/conversation
$ vi config.js

Damit eine sinnvolle Konversation entstehen kann muss noch ein Dialog angelegt werden. In dem Service Conversatin gibt es den Button "Launch Tool", hier gelangt man zum eigentlich Designer. Nach dem Anlegen eines Workspaces kann unter der Übersicht - Workspaces - View Details die Workspace ID kopiert werden.

Intents

Mit den Intents sind Schlüsselwörter und Sätze für den folgenden Dialog zu definieren. Für das Beispiel sollten mindestens zwei Intents ("Hello" und "Goodbye") erstellt werden. Jeder Intent erhält dazu eine Reihe von möglichen Alternativen Worten und Sätzen (siehe Bild unten).

Dialoge

Dialoge verknüpfen Intents zu einer Verknüpfung von Aktionen und Reaktionen. Mit der Hilfe von If Abfragen können die Intents ermittelt werden (siehe Bild). Die Reaktion definiert die Rückgabe des Textes des Service.

Starten

sudo node conversation.js
# WATSON und TEXT sagen

 

Einige Produktlinks sind Amazon Affiliate Links und unterstützen den Ausbau der Webseite. Vielen Dank für deinen Einkauf über einen der Links! Ich freue mich auch über eine kleine Spende mittels PayPal.Me/SPech.