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
https://youtu.be/78tSz5aHM5Y
Inhaltsverzeichnis
Hardware
- Raspberry Pi 3
- Netzteil (2,5A@5,1V),
- Eine Class 10 MicroSD Karte
- Ein Netzwerkkabel
- Ein SD-Kartenleser
- Ein USB Sound Karte mit Line-In (günstig, schlechte Qualität)
- Alternativ ein passender RasPi HAT mit Line In oder onboard MIC (teuer, besser Qualität)
- Ein Mikrophon
- Lautsprecher mit 3,5mm Klinke oder im Bildschirm integrierten Lautsprechern (HDMI)
Zusätzlich empfohlen
- Ein Gehäuse für den Pi mit Lüfter Vorbereitung
- Ein Lüfter für das Gehäuse
- Kabellose Media Center Tastatur
- HDMI Kabel
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.
- Legt euch einen Entwickler Account an, ein vorhandenes Amazon Konto geht auch
- Erstellt euch ein Device und Security Profile für die Kommunikation mit der AVS Cloud
- Wichtig! Folgende URLS im Security Profile hinterlegen sonst geht später der Auth schief
- Allowed origins: https://localhost:3000 und http://localhost:3000
- Allowed origins return: https://localhost:3000/authresponse und http://localhost:3000/authresponse
- Wichtig! Folgende URLS im Security Profile hinterlegen sonst geht später der Auth schief
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:
1 2 |
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
1 2 |
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.
1 2 3 4 5 6 |
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.
1 2 |
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.
1 2 3 4 |
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
1 |
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
1 |
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ß!