Aus Raspberry Pi Geek 01/2014

Aktivitätsüberwachung für allein lebende Senioren (Seite 3)

Bei Seheiah handelt es sich um einen in Python 2.7 implementierten Daemon, der aus vier nebenläufigen Threads (Datenbank, Verhaltensüberwachung, Alarmkaskade, Spracherkennung) besteht. Die Konfiguration erfolgt über die zentrale Datei seheiah.cfg. Die Datenbank richten Sie über folgenden Befehl ein:

$ sqlite3 Name.db < PfadZuSeheiah/helpers/activity_log.sql

Der Flusssensor erfordert einige Bastelei, denn er muss mit einem Vorwiderstand versehen werden [4]. Den Arduino-Sketch zum Auslesen finden Sie unter PfadZuSeheiah/helpers/flowmeter.c.

Eine Udev-Regel wie in Listing 1 sorgt dafür, dass der Arduino möglichst immer an derselben Schnittstelle auftaucht und nicht mal als /dev/ttyUSB0 und ein anderes Mal als /dev/ttyUSB1 erkannt wird. Die nötigen Parameter liefert der Befehl lsusb, nachdem Sie das Mikroprozessorboard mit dem RasPi verbunden haben. Der ausführende Nutzer sollte tunlichst der Gruppe plugdev angehören, damit später die vom Arduino gesendeten Daten problemlos gelesen werden können.

Listing 1

 

#/etc/udev/rules.d/70-microcontrollers.rules
#arduino uno
SUBSYSTEMS=="usb", KERNEL=="ttyACM[0-9]*", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0001", SYMLINK+="sensors/arduino_%s{serial}", MODE="660", GROUP="plugdev"
#seeeduino
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="sensors/arduino_%s{serial}", MODE="660", GROUP="plugdev"

Spracherkennung

Den meisten Aufwand erfordert die Spracherkennungssoftware. Seheiah verwendet Pocketsphinx [5] und generiert ein eigenes Akustikmodell. Das hat den Vorteil, dass es direkt für den zukünftigen Nutzer optimiert ist und undeutliche Aussprache sowie Dialekte keine Probleme bereiten. Der Nachteil: Das Akustik-Modell muss intensiv trainiert werden.

Nach abgeschlossenem Training genügen die vier Befehle ALARM AUS, BYE BYE, HILFE und TEST, um Seheiah zu steuern. Diesen wird jeweils der Trigger SEHEIAH vorangestellt, um Fehlerkennungen zu vermeiden. Es wäre beispielsweise tragisch, wenn Oma nach einer längeren Reise wieder daheim ist, sich telefonisch bei ihren Lieben zurückmeldet, sich dabei mit “Bye bye” verabschiedet und kurz danach über ihren Koffer stürzt.

Um Seheiah per Zuruf steuern zu können, benötigt man neben Pocketsphinx auch noch Sphinxbase [6] und Sphinxtrain [7]. Hinzu kommen noch eine Reihe Abhängigkeiten, die folgender Befehl nachzieht:

$ sudo apt-get install cython python-gst0.10 python-gst0.10-dev gstreamer-tools gstreamer0.10-plugins-base libpulse-dev gstreamer0.10-pulseaudio

Seheiah ruft Pocketsphinx über eine Gstreamer-Pipeline auf. Die Zeile export GST_PLUGIN_PATH=/usr/local/lib/gstreamer-0.10 in der Datei ~/.profile sorgt dafür, dass das entsprechende Plugin später ohne viel Gefrickel gefunden wird. Ferner sind noch einige Anpassungen nötig, um sich später einige Überraschungen zu ersparen. Im Sphinxbase-Verzeichnis löschen Sie python/sphinxbase.c, im Pocketsphinx-Ordner python/pocketsphinx.c. Beide sind fehlerhaft und werden während des Installationsprozesses von Cython neu generiert.

In den Dateien gstpocketsphinx.c und gstvader.c im Verzeichnis /pocketsphinx-0.8/src/gst-plugin setzen Sie die Sample-Rate von 8000 auf 16000 (rate = (int) 16000). Eine Rate von 8000 Hz eignet sich nur für Spracherkennung via Telefon.

Nach diesen Vorarbeiten installieren Sie Sphinxbase, Pocketsphinx und Sphinxtrain jeweils mit ./configure, make clean all und sudo make install.

Akustikmodell

Für das Training des Akustikmodells bringt Seheiah bereits ein Sprachmodell sowie einige Konfigurationsdateien (PfadZuSeheiah/acoustic_model/) mit. Die lästige Pflicht vor der Kür ist das Aufnehmen von genügend Rohmaterial. Die Sphinx-Entwickler nennen als Basis fünf Stunden Audio-Material bei einem Sprecher und geringem Vokabular.

Im Test ließen sich bereits mit 50 Wiederholungen jedes Kommandos sehr brauchbare Resultate erzielen. Um auf die von den CMU-Sphinx-Entwicklern empfohlene Trainingsmenge von fünf Stunden zu kommen, müssten Sie jedes Kommando rund 500 Mal üben. Die Aufnahmen speichern Sie im Unterverzeichnis wav/ mit folgendem Befehl:

$ arecord -r 16000 -D hw:1,0 -d 5 -f S16_LE -c 1 Name#.wav

Dateinamen der Form Name#.wav dienen für Testzwecke, es gibt je drei Exemplare für alle vollständigen Kommandos mit Trigger (SEHEIAH + Kommando). Die Dateinamen für die einzelnen Kommandos zeigt die Tabelle “Dateinamen und zugehörige Kommandos”. Mit AUS tat sich Pocketsphinx im Test schwer. Das wichtige Kommando HILFE sollten Sie intensiv üben.

Dateinamen und zugehörige Kommandos

Datei

Kommando

alarm_aus#.wav

SEHEIAH ALARM AUS

aus#.wav

AUS

bye#.wav

SEHEIAH BYE BYE

hilfe#.wav

SEHEIAH HILFE

ohilfe#.wav

HILFE

test#.wav

SEHEIAH TEST

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 7 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