Sprachassistentin Alexa auf dem Raspberry Pi – RasPi Echo

Erstellt am 26. August 2017 von At2oo1

raspberry.tips
raspberry.tips - Raspberry Pi Projekte und Tutorials

Erst seit kurzem hat Amazon den Amazon Voice Service (AVS) auch für andere Systeme und Geräte geöffnet, ihr kennt den Amazon Voice Service von Alexa, Amazons Sprachassistentin z.B. im Amazon Echo oder Echo Dot. Das AVS Software-Entwicklerkit (AVS Device SDK) ist für den Raspberry Pi verfügbar was es uns ermöglicht unsere eigene Sprachassistentin (ich nenne Sie mal RasPi Echo) zu basteln. Heute möchte ich euch eine kleine Einführung in die Installation des SDK und der Entwicklung mit dem AVS SDK auf dem Raspberry Pi geben. In meinem Beispiel benutze ich einen selbst gebauten “Amazon (RasPi) Echo” auf Basis des Raspberry Pi.

Video der AVS Sample App auf meinem Raspberry Pi

Hardware

Zusätzlich empfohlen

Amazons Echo verwendet ein spezielles “Far Field Microphone”, für meine Tests verwende ich ein ganz einfaches 3,5mm Klinke Mic, das eignet sich sicherlich nicht für Aufnahmen über mehrere Meter genügt aber für dieses Beispiel.

Es gibt ein Far Field Mic DIY Kits mit dem Namen ReSpeaker das auch mit dem Raspberry Pi funktioniert, es ist Amazons Echo Hardware sehr ähnlich, die Software ist aber noch nicht ausgereift. Von Amazon gibt es ein 4Mic Entwicklungs-Board, das ist aber m.E. viel zu teuer. Ggf. macht Amazon das 7Mic Hardware Entwicklungskit auch der Öffentlichkeit für einen ordentlichen Preis zugänglich.

Vorbereitungen

Ihr benötigt am Besten einen Raspberry Pi 3 mi aktiviertem SSH Zugang, zur Einrichtung befolgt ihr am Besten meinen Einsteiger-Tutorial.

Wichtig!
Das AVS SDK ist nur unter Raspbian Jessie unterstützt verwendet daher noch das letzte Jessie Image von hier.

Raspberry Pi bei Amazon AVS anlegen

Bevor wir starten benötigt ihr einen Entwickler Account bei Amazon und ein angelegtes Gerät um mit der AVS Cloud kommunizieren zu dürfen. Ich referenziere hier die sehr gut beschriebenen Amazon Blog Beiträge.

  1. Legt euch einen Entwickler Account an, ein vorhandenes Amazon Konto geht auch
  2. Erstellt euch ein Device und Security Profile für die Kommunikation mit der AVS Cloud
    1. Wichtig! Folgende URLS im Security Profile hinterlegen sonst geht später der Auth schief
      1. Allowed origins: https://localhost:3000 und http://localhost:3000
      2. Allowed origins return: https://localhost:3000/authresponse  und http://localhost:3000/authresponse

Build Tools für das AVS SDK auf dem Raspberry Pi installieren

Nun müsst ihr auf eurer Raspberry Pi Jessie Installation die notwendigen Tools installieren, das Setup dauert eine ganze Weile da die Libraries und Tools aus den Sourcen compiliert werden müssen, nehmt euch mehrere Stunden Zeit dafür. Ich referenziere hier auf die HowTos von Amazon und ergänze wo Infos fehlten jeweils unter den Links / Beschreibungen.

Hinweiße zu Kapitel 2:

  • Unter 2.7.2 müsst ihr vor die cp und mkdir Befehle ein sudo schreiben

Danach starten wir mit Kapitel 3 der AVS SDK Anleitung, wir erstellen das SDK für Raspbian und Testen den AVC.

Hinweiße zu Kapitel 3:

Da das Kapitel 3 voraussetzt das ihr ein git repository clonen könnt beschreibe ich mein Vorgehen zu Punkt 3.1 kurz:

cd $SOURCE_FOLDER
git clone https://github.com/alexa/avs-device-sdk

Dann legen wir uns noch eine Variable an um auf die Sourcen via $SDK_SRC Variable zuzugreifen

echo "export SDK_SRC=$SOURCE_FOLDER/avs-device-sdk" >> $HOME/.bash_aliases
source $HOME/.bashrc

Weiter mit Punkt 3.2, passt beim kopieren des cmake Befehls auf, der Text ist eine Zeile wird beim kopieren aber auf zwei geteilt, kopiert vorher in einen Texteditor und macht eine Zeile daraus. Ich habe mir für Kapitel 3.3 folgende Verzeichnisse angelegt und die Sound Files mit wget dorthin runtergeladen.

mkdir -p $HOME/avs/sounds

wget -O $HOME/avs/sounds/alarmSoundFile.mp3 https://images-na.ssl-images-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-voice-service/docs/audio/states/med_system_alerts_melodic_01._TTH_.mp3
wget -O $HOME/avs/sounds/alarmShortSoundFile.mp3 https://images-na.ssl-images-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-voice-service/docs/audio/states/med_system_alerts_melodic_01._TTH_.mp3
wget -O $HOME/avs/sounds/timerSoundFile.mp3 https://images-na.ssl-images-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-voice-service/docs/audio/states/med_system_alerts_melodic_02._TTH_.mp3
wget -O $HOME/avs/sounds/timerShortSoundFile.mp3 https://images-na.ssl-images-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-voice-service/docs/audio/states/med_system_alerts_melodic_02._TTH_.mp3

Das ist meine fertige AlexaClientSDKConfig.json Konfiguration

  • clientSecret: Aus der Amazon Developer Konsole kopieren (Alexa > AVS Get Startet > Mange auf das passende Produkt)
  • deviceSerialNumber: Eindeutig vergeben, z.B. 000001, 000002 usw
  • refreshToken: Irgendwas ohne Sonder und Leerzeichen eintragen, wird während des Auth Vorgangs neu erzeugt und ersetzt
  • clientID: Aus der Amazon Developer Konsole kopieren (Alexa > AVS Get Startet > Mange auf das passende Produkt)
  • deviceTypeId: Das ist die “Product ID” aus der Developer Konsole aus der Produkt Liste (Alexa > AVS Get Startet)

Kompiliert und Installiert nun wie beschrieben (sudo vor make install hinzufügen), das dauert circa eine Stunde wie in Kapitel 3.4 beschrieben. Für Kapitel 3.5 und 3.6 solltet ihr euch auf dem Desktop eures Pi befinden und von dort in einem Terminal folgenden Befehl aufrufen. Am Besten geht das Remote via VNC oder xRDP.

cd $HOME/BUILD
python AuthServer/AuthServer.py

Öffnet dann einen Browser, z.b. Chromium und navigiert auf http://localhost:3000 wenn euer Security Pofil aus der Developer Konsole und eure Config Datei zusammenpasst landet ihr auf der Amazon Anmeldeseite. Andernfalls erhaltet ihr einen passenden Fehler. Meldet euch mit eurem Entwickler Account an um euer Raspberry Pi mit SDK zu autorisieren.

Wenn nach Bestätigung alles geklappt hat ist der Vorgang abgeschlossen

Zum Testen der Sample App und der Verbindung führen wir folgenden Befehl aus.

cd $HOME/BUILD/SampleApp/src
TZ=UTC 
sudo ./SampleApp $HOME/BUILD/Integration/AlexaClientSDKConfig.json $LOCAL_BUILD/models

Wichtig!
Eure USB Sound Karte muss als default Sound Device hinterlegt sein. Folgendes habe ich dafür getan:

Deaktivieren des OnBoard Sound, bearbeitet eure config.txt

sudo nano /boot/config.txt

Ändert “dtparam=audio=on” zu “dtparam=audio=off” und speichert mit STRG+X, Y und Enter.

Dann erlauben wir es das auch eine USB-Sound Karte zum Standard Device werden kann, editiert hierzu folgende Datei

sudo nano /lib/modprobe.d/aliases.conf

Fügt vor “options snd-usb-audio index=-2” zum auskommentieren eine Raute (#) ein und Speichert mit STRG + X, Y und Enter. Nach einem Reboot solltet ihr die SampleApp ohne Fehler starten können. (ggf. muss noch in der Datei “~/.asoundrc” der Device 1 durch 0 ersetzt werden). Stellt am Besten via alsamixer noch die Lautstärke für die Ausgabe und Eingabe ganz hoch.

Viel Spaß!

Sprachassistentin Alexa auf dem Raspberry Pi – RasPi Echo
raspberry.tips