Startseite>Raspberry Pi per Sprache steuern
Aus Raspberry Pi Geek 01/2016

Raspberry Pi per Sprache steuern (Seite 2)

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.

Listing 4

 

# Restart-Modul für Jasper
import re
import os
WORDS = ["REBOOT", "YES", "OKAY", "NO"]
def isValid(text):
  return bool(re.search(r'\breboot\b', text, re.IGNORECASE))
def handle(text, mic, profile):
  mic.say("Really reboot the system now?")
  response = mic.activeListen()
  if bool(re.search(r'\b(yes|okay)\b',response,re.IGNORECASE)):
    mic.say("Initiating reboot. Please wait for system restart")
    os.system("sudo reboot")
  else:
    mic.say("Reboot cancelled")

Am Anfang (Zeile 5) steht die Definition der Schlüsselwörter für das neue Modul. Darauf folgen zwei Funktionen (die genau so heißen müssen): isValid(text) prüft, ob der transkribierte Text für das Modul überhaupt relevant ist. Der Aufruf handle(text,mic,profile) löst dann die Aktion aus. Die Wörter “YES”, “OKAY” und “NO” sind zwar keine Schlüsselwörter und werden auch nicht vom Modul geprüft; die Aufnahme in die Wortliste sorgt aber dafür, dass sie im Vokabular landen (dort sind alle zu erkennenden Wörter hinterlegt).

In unserem Fall (Neustart des Rechners) fragt Jasper zur Sicherheit noch mal nach. Da die Funktion auch Zugriff auf das Profil des Nutzers hat (dritter Parameter, ausgelesen aus der Profildatei ~/.jasper/profile.yml), lassen sich dort hinterlegte Passwörter, Benutzer-IDs und so weiter nutzen.

Ein Problem der Jasper-Architektur liegt in der Fokussierung auf Schlüsselwörter. Nur die definierten Wörter landen im Vokabular und werden somit von Jasper erkannt. An frei formulierten Texten scheitert das Programm. Ebenso kommt es zu Konflikten zwischen den Modulen, sobald diese identische Wörter erkennen und verarbeiten. Für diesen Fall gibt es die Variable PRIORITY – das Modul mit der höchsten Priorität geht vor.

Anpassungen

Aus der Sicht von deutschsprachigen Nutzern steht das Anpassen der Sprache an erster Stelle. Das klappt jedoch nicht ohne erheblichen Aufwand, da die zugrundeliegenden STT-Toolkits Deutsch nur sehr eingeschränkt unterstützen. Es geht unter anderem darum, ein eigenes akustisches Modell zu erstellen. Details dazu finden sich auf den Seiten von Voxforge [6]. Diverse Foreneinträge machen klar, dass es sich dabei um keine Sache von wenigen Stunden oder Tagen handelt.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland