Aus Raspberry Pi Geek 01/2016

Raspberry Pi per Sprache steuern (Seite 2)

Installation von Jasper

Die Installation von Jasper mit dem Skript jasper-install aus dem gleichnamigen Github-Projekt des Autors [4] ermöglicht das maßgeschneiderte Installieren von Jasper ohne großen manuellen Aufwand. Das Skript geht von einem frisch eingerichteten Raspbian auf einer mindestens 8 GByte großen Speicherkarte aus. Die initiale Konfiguration mit Raspi-config sollten Sie bereits abgeschlossen haben, insbesondere muss die Wurzelpartition den gesamten verfügbaren Platz einnehmen. Dann klonen Sie die Dateien des Projekts auf den Rechner und werfen die Installation an (Listing 1).

Vorher editieren Sie noch die Datei jasper-install.cfg nach Ihren Vorstellungen. Die ausgelieferte Version passt für den RasPi 2; setzen Sie einen Raspberry Pi der ersten Generation ein, müssen Sie noch die Konfiguration von Pocketsphinx aus den Quellen aktivieren. Dazu setzen Sie die Variablen INSTALL_pocketsphinx=0, INSTALL_pocketsphinx_data=1 und INSTALL_pocketsphinx_src=1. Greifen Sie per SSH auf den RasPi zu, nehmen Sie die Installation besser gleich in einer per screen gestarteten Sitzung vor – so muss die SSH-Session nicht die ganze Zeit bestehen.

Die Installationsorgie dauert sehr lange – auf einem RasPi etwa sieben bis acht Stunden, das Modell 2 benötigt nur halb so lang. Die Dauer hängt außerdem von der Geschwindigkeit des Internetanschlusses und der SD-Karte ab. Die Bibliothek OpenFST benötigt mit mehr als fünf Stunden (RasPi 1) die längste Übersetzungszeit. Sie lässt sich aufgrund ihres enormen Speicherbedarfs selbst auf dem RasPi 2 nicht mit allen Prozessoren parallel kompilieren – bei vier aktiven Prozessoren kommt das System irgendwann nicht mehr aus dem Swappen heraus. Legen Sie das Wurzeldateisystem von Raspbian auf eine per USB angeschlossene Festplatte, sparen Sie beim Modell 2 noch einmal ungefähr die Hälfte der Zeit ein.

Nach der Installation starten Sie Jasper mit dem Befehl jasper. Dazu muss das Benutzerkonto Mitglied der Gruppe audio sein. Hängen Sie noch ein --debug an das Kommando, bekommen Sie detaillierte Meldungen über den Ablauf. Der erste Start dauert immer etwas länger, da das Programm zuerst das Vokabular für die STT-Engine aufbereiten muss. Alternativ lässt sich Jasper auch als Systemdienst einrichten. Details dazu sowie weitere Infos zum Einrichten und Nutzen des Systems liefern die Datei README sowie die Originaldokumentation des Jasper-Projekts.

Listing 1

 

$ git clone http://github.com/bablokb/jasper-install
$ cd jasper-install
$ nano jasper-install.cfg
$ sudo ./jasper-install all

Möchten Sie lieber auf das rund 1,3 GByte große, originale Jasper-Image zurückgreifen, laden Sie es von der Projektwebseite [3] oder der Heft-DVD herunter. Dann schreiben Sie es wie ein Standard-Raspbian mit einem Image-Programm wie Win32 Disk Imager oder unter Mac OS X und Linux mit Dd auf eine Speicherkarte. Nach dem ersten Start des RasPi mit dem Jasper-Image sollten Sie Raspi-config aufrufen, die Lokalisierung auf deutsche Gegebenheiten anpassen (Tastaturlayout, Zeitzone, Sprache) sowie die Soundausgabe gegebenenfalls von HDMI auf 3,5-mm-Klinke umstellen.

Damit Jasper später alle Bibliotheken und Programme findet, steht als Nächstes das Anpassen der Konfigurationsdatei ~/.profile an. Hier fügen Sie die Zeilen aus Listing 2 ein. Der Befehl source ~/.profile aktiviert die Änderungen für die aktuelle Sitzung.

Listing 2

 

LD_LIBRARY_PATH="/usr/local/lib"
export LD_LIBRARY_PATH
PATH=$PATH:/usr/local/lib/
export PATH

Anschließend führen Sie die Anweisungen aus Listing 3 aus. Der letzte Befehl erzeugt die Datei ~/.jasper/profile.yml und fragt dabei E-Mail-Adresse und Passwörter verschiedener Dienste ab. Diese Daten verlassen nie den Rechner, können aber auch erst einmal leer bleiben. Die erzeugte Datei ergänzen Sie dann mit ein paar weiteren Zeilen; das Ergebnis sollte etwa so aussehen wie in Listing 4.

Listing 3

 

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install python-dev python-pip bison libasound 2-dev libportaudio-dev python-pyaudio
$ git clone https://github.com/jasperproject/jasper-client.git jasper
$ sudo pip install --upgrade setuptools
$ sudo pip install -r jasper/client/requirements.txt
$ cd ~/jasper/client
$ python populate.py

Listing 4

 

# Minimale Profildatei für Jasper
carrier: ''
first_name: Raspberry
gmail_password: ''
last_name: Pi
location: Munich
wmo_id: 10866
timezone: Europe/Berlin
phone_number: ''
prefers_email: true
stt_engine: sphinx
pocketsphinx:
  fst_model: '/home/pi/phonetisaurus/g014b2b.fst'
  hmm_dir: '/usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k'
tts_engine: espeak-tts
espeak-tts:
  voice: 'default+m3'
  pitch_adjustment: 40
  words_per_minute: 120

Die Zahl in Zeile 7 entspricht der ID von München in der World Meteorological Organization – Jasper nutzt diese Nummer zum Ermitteln des aktuellen Wetters. Die IDs anderer Städte erfahren Sie etwa über Weather Underground [5]. Nach diesen Vorarbeiten rufen Sie Jasper händisch mit dem Befehl jasper/jasper.py auf. Ab dem nächsten Boot startet Jasper automatisch – möchten Sie das nicht, editieren Sie mittels crontab -e die Crontab und entfernen die entsprechende Zeile.

Zu Befehl

Nach dem Start meldet sich Jasper mit blecherner Stimme und wartet auf das Schlüsselwort “Jasper” (amerikanisch wie “Tschäsper” ausgesprochen). Das Programm antwortet mit zwei kurzen Piepsern und erwartet nun einen Befehl. Erkennt Jasper das gesprochene Kommando, dann führt es dieses aus und beendet die Sequenz mit einem tiefen Ton. Danach beginnt die Schleife von vorne. Auf der Projektseite von Jasper gibt es dazu ein kurzes Demovideo.

In der Praxis erweisen sich die Ergebnisse der Erkennung als durchwachsen. Das liegt zum einen daran, dass Pocketsphinx einfach nicht mit der Erkennungsqualität von Googles Spracherkennung mithält. Zum anderen geht die Standardinstallation von einem englischen Akustikmodell aus, sodass Jasper deutschsprachige Nutzer schlechter versteht. Bei ersten Tests sollte Jasper dennoch einige Kommandos erkennen. Von zentraler Bedeutung ist dabei ein gut eingestelltes Mikrofon, das die Sprache klar und ohne wesentliche Nebengeräusche aufnimmt.

Befehle erkennt Jasper auch an Schlüsselwörtern. Das Projekt liefert als Beispiele eine ganze Reihe von sogenannten Modulen mit. Ein Beispiel wäre: “What time is it?” – hier erkennt Jasper das Schlüsselwort “time” und sagt die aktuelle Uhrzeit an. Weitere Beispiele wären “How will the weather be tomorrow?” oder “What is the meaning of life?”.

Neben diesem von den Jasper-Entwicklern aktiver Modus getauften Verfahren gibt es auch einen passiven Modus. Jasper ruft dazu zum Beispiel regelmäßig ein E-Mail-Konto ab und liest neue Mails automatisch vor – zumindest in der Theorie. Der passive Modus ist im Projekt irgendwie auf der Strecke geblieben, mehr als die Ausgabe im Log passiert hier nicht. Will Jasper partout nicht verstehen, was Sie sagen, lohnt sich der Start im Debug-Modus. Dazu fügen Sie einfach --debug an den Befehl an und sehen dann auf der Kommandozeile alles, was Jasper versteht – oder eben auch nicht.

Eigene Module

Die vorgefertigten Beispiele dienen als Demo der Möglichkeiten von Jasper. Zum Erstellen eigener Befehle benötigen Sie minimale Python-Kenntnisse – mit den Vorlagen aus dem Verzeichnis jasper/client/modules/ geht es aber eigentlich sogar ohne. Listing 4 zeigt ein einfaches Beispiel – unter welchem Namen Sie die Datei ablegen, ist egal: Jasper durchsucht alle Python-Dateien im Modulverzeichnis.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben