Sprachgesteuerte Hausautomatisierung mit dem Raspberry Pi

Der Pi war schon lange da und Raspbmc brauchte ich eigentlich nicht.
Also nahm ich mir an diesem einen schicksalhaften Tag vor, dem Pi einen Sinn zu verschaffen.
Heraus kam ein Projekt zur Steuerung des Hauses mittels Sprache im Stil von StarTrek.

“Computer, Auf den Schirm!”

Nach einiger Recherche war auch eine Spracherkennungssoftware (oder besser ein Toolkit) gefunden: CMUSphinx.

Entgegen der landläufigen Meinung (Stackoverflow) braucht es KEIN Pulseaudio. Overhead ist immer böse und bringt in diesem Fall keinen Mehrwert, sondern nur mehr Fehlerquellen.

Hardwareliste für dieses Projekt:

Hiermit sollten die Grundlagen gegeben sein. Natürlich ist das ganze beliebig erweiterbar.

Zunächst zur Hardwarekonfiguration:

gpio-pinout-rev2

Quelle: http://www.hobbytronics.co.uk/raspberry-pi-gpio-pinout

Benötigt werden  Pin 2, 6 und 11. (Alternativen sind mit Codeanpassungen möglich)

Ich habe der Einfachheit halber das Breadboard genutzt; es ginge aber auch ohne.

Der 433Mhz Sender hat 4 Pins (Pin 1 ist mit ANT beschriftet), die wie folgt zu belegen sind:

  1. ca 17,3cm langer Draht als Antenne
  2. 5 Volt Vcc an GPIO Pin 2 des Pi
  3. Daten an GPIO Pin 11 des Pi
  4. Masse an GPIO Pin 6

IMG_20140322_143017 (Die hier mit rotem Kabel abgezweigten 3,3Volt werden für dieses Projekt nicht benötigt)

 

Nun zur Software:

Der Einfachheit halber mache ich alles als root. Beginnen wir also mit dem Pi.

Benötigt wird am besten eine mindestens 2GB große SD-Karte mit aktuellem Raspbian image. Ich gehe von einer sauberen Neuinstallation aus.

Es gibt mit der Kamera das Problem, dass sie nach einem Neustart stumm ist und man sie zunächst einmal aus- und wieder einstöpseln muss. Dieses Problem trat bei mir zunächst auf, ist aber nachdem ich den Modulparameter

“options snd_usb_audio ignore_ctl_error=1”

gesetzt hatte verschwunden. (Macht das Installationsskript selbstständig) Ich gebe jedoch keine Garantie, dass dies die Lösung ist.

Als nächstes ist mein Git Repo zu klonen und der Installer zu starten, welcher alles weitere automatisch macht. Dadurch konnte dieses Tutorial um einiges einfacher und kürzer gestaltet werden.

(Wer dem ganzen nicht traut kann sich natürlich auch einfach ansehen, was der Installer da macht.. es ist schließlich nur ein shell script.)

git clone https://github.com/Hypfer/rpi-vcha.git

cd rpi-vcha

chmod +x ./installer.sh && ./installer.sh

Nach Abschluss der Installation kann man nun mit

service rpi-vcha start

den listener starten.
Um zu sehen, ob und was geschieht kann man folgendes nutzen:

tail -f /var/log/rpi-vcha.log

 

Abschließend noch ein Video zur Demonstration:

 

 

Zum Einfügen weiterer Wörter:

http://www.speech.cs.cmu.edu/tools/lmtool-new.html

Da der verlinkte Generator mit dem englischen Sprachmodell arbeitet musste ich ein wenig mit den Lauten tricksen. Eine Liste aller Laute gibt es hier:

http://www.speech.cs.cmu.edu/cgi-bin/cmudict

(Alternativ könnte man das deutsche Sprachmodell von voxforge nutzen, jedoch würde dies viel mehr Arbeit und vermutlich auch weniger Präzision bedeuten.)

19 Gedanken zu „Sprachgesteuerte Hausautomatisierung mit dem Raspberry Pi“

  1. Interessantes Projekt. Wenn ich mal wieder etwas Geld habe werde ich mich mal daran setzen und es nachbauen. Vielen Dank für das Tutorial und damit für den leichteren Einstieg.

    Eine Frage noch: Benötigt der RasPi im Betrieb einen Internetzugang? Ich würde ihn gerne offline betreiben.

    Für die Wetterauskunft, News und ähnlichem benötigt man natürlich das Internet.

    1. Dank Sphinx arbeitet das ganze auch ohne Internet. Darauf habe ich extra wert gelegt. 🙂

      Du müsstest dann nur ggf. die Cronjobs aus dem Installscript und die Aufrufe im Code anpassen/entfernen.

  2. Ich erhalte während der Installation zahlreiche “permission denied” und andere Fehlermeldungen. Bin leider ein Unix Noob und weiss nicht, was da falsch gelaufen ist. Basis war ein saubere Debian Wheezy Installation – danach habe ich nur das PW geändert und die Schritte wie beschrieben ausgeführt. Wie bekomme ich das gefixt?

    Das Projekt ist superinteressant, da wir hier eine Haussteuerung mit KNX und Loxone installiert haben und ich dann über Sprachbefehle das ganze Haus steuern könnte.

    Danke!

    1. An achso. Das Installationsskript geht davon aus als root ausgeführt zu werden und nicht mit sudo.
      Simpelste Lösung auf die schnelle wäre eine root Shell mit sudo bash zu öffnen und es dann darin auszuführen.

  3. danke – jetzt bin ich weiter, es gibt nur noch zwei fehlermeldungen, die sich wiederholen:
    configure: error: SphinxBase was not found on your system.
    configure: error: You need to install bison

  4. Hello,
    I’d like you to translate this article in English please.
    I think I’m not the only one to admit it’s a really neat feature to our Pi’s.
    Please write me a mail if you’re interested in translating it 😀

  5. hi,

    wenn ich auf ein sauberes raspbian dein installer.sh ausführe wie beschrieben als root, kommen einige Meldungen das Abhängigkeiten fehlen, z.B. automake, autoconf und libtools. Hast du die in deiner Anleitung vergessen oder liegt bei mir ein anderer Fehler vor?

    1. vergiss es …ich hätte mal ins installer.sh skript schauen sollen 😉 war nicht als root angemeldet und deswegen hat er die installation am Anfang der Abhängigkeiten übersprungen und die Fehler produziert.

  6. Hi,

    wie müsste man rpi-vcha.c abändern damit man “computer” oder jedes andere beliebige Wort als keyword benutzen kann?

    Also man sagt “Computer” und als Antwort kommt ein hoher Piepston, erst dann kann man einen weiteren Befehl sprechen.

    1. An der Stelle habe ich damals aufgegeben. 🙂 Sollte _eigentlich_ gar nicht mal so schwer zu implementieren sein, aber ich hab einfach so gar keine Ahnung von C und dem Toolkit da.

      Wenn du das so hin bekommst wäre es super wenn du bescheid gibst.

      1. Also ein bisschen rumprobieren würde ich schon gerne…habs jetzt hinbekommen, dass zumindest mal alles wie auch bei dir im Video funktioniert. Wenn ich in der rpi-vcha.c was ändere muss ich doch erst neu kompilieren, aber mit gcc -c rpi-vcha.c klappt das nicht. Wie kann ich denn da jetzt weiter dran basteln?

  7. Hallo nochmal,

    ich hab alles wie angegeben installiert und es kam auch keine Fehlermeldung. Beim Starten kommt einfach nichts, es wird das log file angelegt es bleibt aber leer. Deshalb hab ich mal folgendes ausprobiert und folgende Fehlermedlung erhalten. Was mache ich falsch?

    /usr/local/bin/rpi-vcha hw:1,0 -lm /usr/local/etc/rpi-vcha/languagemodel.lm -dict /usr/local/etc/rpi-vcha/dict.dic
    /usr/local/bin/rpi-vcha: error while loading shared libraries: libpocketsphinx.so.1: cannot open shared object file: No such file or directory

    1. Lösung zu meinem Problem:

      export LD_LIBRARY_PATH=”/usr/local/lib”

      aber geht immer noch nicht 🙁

      Bin leider auch zu schlecht im Programmieren um da was reißen zu können. Eigentlich wäre mein Plan über Pocketsphinx (ist das einzige mit continuous listen Modus) die Keyword Abfrage zu machen und dann auf wit.ai umzuschwenken um eine natürliche Spracherkennung zu erreichen. Aber ich glaube das bekomme ich nie hin 🙁

    2. okay habs hinbekommen… mit folgendem Zusatz lässt es sich kompilieren 🙂

      sudo gcc -I /usr/local/include/sphinxbase/ -I /usr/local/include/pocketsphinx/ `pkg-config pocketsphinx –cflags –libs` rpi-vcha.c -o rpi-vcha.o

      Jetzt muss ich nur noch ne Idee haben wie man das in C umsetzt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.