Vor einigen Wochen zeigte ich Euch, wie man einen Raspberry Pi als Amazon Alexa laufen lassen kann. Das brauchte 3 Terminal-Fenster und eine VNC Verbindung, war aber schon ziemlich cool. Die guten Leute bei Google haben sich nicht lumpen lassen und nun eine Raspberry Pi Version des eigenen Google Assistant herausgebracht. Natürlich musste ich das einfach für Euch testen. Das Ergebnis: Das Raspberry Pi Projekt von Google ist super cool :)

Alles, was Ihr braucht finet Ihr auch in der Developer Documentation bei Google, dennoch hier die kurzen Schritte, die bei mir gut und reibungslos funktioniert haben.

Hardware & Co

  1. Raspberry Pi 3 (ab €39,99)
  2. Ein USB-Mikrofon mit ordentlicher Qualität (unter €10)
  3. Lautspecher mit 3.5mm Klinkenstecker (oder zu mindestens Kopfhörer)

Voraussetzungen

Ich gehe davon aus, dass du den Raspberry Pi 3 vollständig installiert hast, dieser bereits mit deinem Heimnetzwerk verbunden ist und du weißt, wie man eine SSH Verbindung aufbaut. Für Google Assistant ist es weiterhin ganz wichtig, dass du das Datum und die Uhrzeit richtig eingestellt hast. Der Raspberry Pi 3 holt sich das normalerweise direkt von einem Time-Server. Dennoch überprüfe kurz mit date , dass Datum und Uhrzeit stimmen.

Wenn du alle Voraussetzungen erfüllt hast, können wir loslegen!

Ein Entwickler-Projekt anlegen und Konfigurieren

  1. Gehe zur Google Developer Project Seite und lege ein neues Projekt an, indem du „Create Project“ auswählst und den Anweisungen auf dem Bildschirm folgst
  2. Aktiviere die Google Assistant API indem du diesen Link anklickst, die Terms of Service sollte man natürlich gelesen haben
  3. Richte einen OAuth Client ein, das ist nicht ganz so „logisch“, wenn du jedoch diesen Unterpunkten folgst, sollte es recht reibungslos klappen
    • Erstelle eine Client ID über diesen Link
    • In der Registerkarte OAuth Consent Screen gibst du dem Projekt bitte einen Namen (z.B. GA on RPi) und klickst auf Speichern
    • Klick auf Other und gibt der Client ID einen Namen
    • Klicke nun auf Create. Eine Dialogbox erscheint, die Daten hier musst du dir nicht merken und du kannst die Dialogbox einfach schließen
    • Ganz rechts finest du nun einen „Download-Pfeil ⬇„, diesen bitte anklicken, damit du eine JSON-Datei mit dem Client Secret herunterladen kannst. Die Datei hat einen schrecklich langen Namen, nach dem Muster client_secret_<client-id>.json
  4. Kopiere nun die JSON-Datei mit dem Client-Secret auf deinen Raspberry Pi 3. Am einfachsten gehst du in den Downloads-Ordner und nutzt ⌘+i, um dir den Namen aus dem Dialog zu kopieren und dann nutzt du folgenden Befehl, um die Datei zu kopieren. Natürlich musst du den Dateinamen noch ersetzen.
    • scp ~/Downloads/client_secret_die_schrecklich_lange_client-id.json pi@IP_DEINES_RASPBERRY_PI_3:/home/pi/
  5. Fast Fertig! Jetzt noch über die Activity Controls deinem Projekt eine ganze Menge an Rechten geben. Die folgenden werden auf jeden Fall benötigt und waren bei mir alle auf Englisch angezeigt und erst mal deaktiviert:
    • Web & App Activity
    • Location History
    • Device Information
    • Voice & Audio Activity

Ich selbst muss zugeben, dass die ganzen Rechte, die man hier freigibt schon ein wenig Unwohlsein hervorrufen könnte. Die Voice & Audio Activity speichert z.B. nicht nur, was du gesagt hast, sondern das von Google gehörte Voice Sample – du kannst dir also später selbst zuhören. Für Entwickler spannend, bei Amazon ist es nicht anders, aber unter Umständen willst du ein eigenes Google Konto für solche Projekte anlegen und pflegen, damit du nicht zu viel deiner Privatsphäre opfern musst

Aufnahme & Wiedergabe am Raspberry Pi 3 testen

Da wir ja nur mit SSH mit unserem Pi verbunden sind, müssen wir jetzt noch schauen, dass unser Mikrofon und die Lautsprecher funktionieren. Im besten Fall geht das ganz schnell in drei Schritten:

  1. Wiedergabe testen, mit: speaker-test -t wav – du hörst eine Stimme, mit ctrl+c wirst du diese wieder los
  2. Aufnahme testen, mit: arecord –format=S16_LE –duration=5 –rate=16k –file-type=raw out.raw  – du nimmst hier 5 Sekunden etwas auf, also sag auch was ;)
    1. Aufname mit aplay –format=S16_LE –rate=16k out.raw abspielen
  3. Unter Umständen, die Lautstärke anpassen (das war bei mir nötig): alsamixer

Wenn die Wiedergabe und/oder Aufnahme nicht funktioniert hat, dann hat Google hier eine sehr gute Anleitung, was zu tun ist!

Quelltext laden, installieren und endlich mit dem Google Assistant sprechen!

Das Google SDK läuft nur unter Python 3 und es wird eine virtuelle Umgebung genutzt, um das Google Assistant Projekt von der restlichen System-Umgebung zu isolieren. Mit folgenden Befehlen legst Du los. Was hier so kurz aussieht, dauert eine ganze Weile und führt zu vielen, langen Anzeigen im Terminal.

sudo apt-get update
sudo apt-get install python3-dev python3-venv
python3 -m venv env
env/bin/python -m pip install --upgrade pip setuptools
source env/bin/activate

Jetzt solltest Du bereits in der virtuellen Python Umgebung sein. Das erkennst Du daran, dass (env) $ am Anfang der Zeile steht. Die Umgebung passt also, jetzt brauchen wir den Quelltext für das Projekt und diesen kannst du mit pip installieren

python -m pip install --upgrade google-assistant-library

Das Projekt nutzt OAuth, um deine Zugangsberechtigung zu überprüfen, ein gutes OAuth Tool stellt Google natürlich zur Verfügung. Besonders wertvoll, es unterstützt einen „Headless Mode“, damit du nicht per VNC verbunden sein musst:

python -m pip install --upgrade google-auth-oauthlib[tool]

Mit folgendem Befehl, kannst du den OAuth Flow starten – natürlich den Namen deiner .json Datei einfügen:

google-oauthlib-tool --client-secrets /home/pi/client_secret_Deine_schrecklich_lange_client-id.json --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless

In deinem Terminal erscheint jetzt eine URL. Die kopierst du aus dem Terminal und gehst zu Safari / Chrome / Firefox und schickst die URL dort ab. Du bekommst eine Antwot von Google, die du im Terminal eingibst, um den OAuth Flow abzuschliessen. Bei mir sah das so aus:

google-oauthlib-tool --client-secrets /home/pi/client_secret_MEIN_SCHRECKLICH_LANGES_CLIENT_SECRET.apps.googleusercontent.com.json --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless

Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=_MEIN_SCHRECKLICH_LANGES_CLIENT_SECRET.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fassistant-sdk-prototype&state=STATE_VARIABLE&access_type=offline&prompt=consent

Enter the authorization code: MEIN_AUTHORIZATION_CODE

credentials saved: /home/pi/.config/google-oauthlib-tool/credentials.json

ENDLICH! Du kannst Das Projekt starten!

google-assistant-demo

Alles was du jetzt tun musst, ist „Hey Google“ oder „OK Google“ zu sagen und dann deine Frage zu stellen. Der Terminal gibt dir ein wenig Feedback, was genau geschieht

ON_MUTED_CHANGED:
  {'is_muted': False}
ON_START_FINISHED

ON_CONVERSATION_TURN_STARTED
ON_END_OF_UTTERANCE
ON_RECOGNIZING_SPEECH_FINISHED:
  {'text': 'who invented the Macintosh'}
ON_RESPONDING_STARTED:
  {'is_error_response': False}
ON_RESPONDING_FINISHED
ON_CONVERSATION_TURN_FINISHED:
  {'with_follow_on_turn': False}


Claus Wolf

Seit 1994 im Netz unterwegs und seit 2004 eingefleischter Mac-Nutzer.

15 Kommentare

Orhan · 7. Juni 2017 um 10:41

Hallo Claus ein wirklich guter Anleitung. Dennoch habe ich da ein paar Fragen. Aber bevor ich die eigentliche Frage stelle, läuft der Google Assistent auf Englisch?
Wenn ja hat sich das schon für mich erledigt…

Gruß

    Claus Wolf · 7. Juni 2017 um 11:56

    Leider, ja. Google Assistant kommt erst in einigen Monaten auch mit deutscher Spracherkennung

Martin Fenk · 7. August 2017 um 19:42

Ich hab deine Anleitung nicht ausprobiert werde ich aber bald mal machen dennoch stellt sich mir die frage wie ich einen eigenen befehl zu meinen Google home auf dem raspberry hinzufügen kann

Katsche · 9. August 2017 um 08:43

Hallo Claus,
muss es zwindend ein RPi3 sein wegen der Google SDK oder kann man auch einen RPi zero W verwenden?

Gruß Katsche

    Claus Wolf · 9. August 2017 um 09:16

    Gute Frage. der Zero ist was schwach auf der Brust ;) muss5 du also mal ausprobieren…

      Katsche · 19. August 2017 um 21:02

      Hi Claus,

      ich habe versucht deiner Anleitung zu folgen und habe noch zwei Fragen dazu:

      1. bei dem Befehl um den OAuth Flow zu starten steht am Ende der Zeile „–headless“…. bei mir wird dort ein Fehler in der Konsole angezeigt und wenn ich headless kurzerhand weglasse komme ich weiter. Ist vermutlich nicht richtig oder?

      2. wie genau kann ich das Projekt starten? Nach dem Reboot bin ich nicht mehr in der virtuellen Umgebung!

      PS! nach wie vor benutze ich den RPi zero w
      Gruß Katsche

        Claus Wolf · 20. August 2017 um 19:25

        sorry, da habe ich leider keine echte Antwort… ;( vielleicht findet sich jemand anderes, der das beantworten kann

    Martin Fenk · 9. August 2017 um 18:51

    Ich habe einen raspberry b+ nicht übertaktet und es funktioniert

      Katsche · 21. August 2017 um 07:10

      Hallo Martin,
      kannst Du mir bei meinen oberen Problem helfen?

      * wie genau startest Du das Skript?
      * wie komme ich in der virtuellen Umgebung?
      Gruß Katsche

        Martin Fenk · 21. August 2017 um 13:05

        Ich starte das Script immer von Hand mit diesen befehl

        /home/pi/bin/voice-recognizer-shell.sh

        src/main.py

        Den unteren Befehl kannst du auch durch diesen eretzen

        python3 src/main.py -T clap

        Der bewirkt das du nicht auf den Knopf drücken musst sondern klatschen und dann reden

        Das ganze lässt sich auch über Autostart Scripte regeln ich hab es noch nicht ausprobiert da der Assistent auf englisch ist und ich ihn nicht auf deutsch kriege

        Mit virtueller Umgebung meist du sicherlich das (env) pi@raspberry kein plan wie dies jetzt heißt die startest du mit diesem befehl

        /home/pi/bin/voice-recognizer-shell.sh

        Ich hoffe das ich dir weiter helfen konnte

soobi · 21. August 2017 um 00:23

Hey super Anleitung.
Funktioniert der Assistent auch offline? Bzw Reagiert er auf Ok Google ohne internet?

    Claus Wolf · 21. August 2017 um 06:28

    Nein, das gute Stück braucht ein Internet und die APIs von Google, um zu funktionieren. Am Wochenende habe ich http://aiyprojects.withgoogle.com/voice/ gebaut – nachdem ich eine Kopie von MagPi ergattert hatte. Dort muss man sogar einen Knopf drücken, damit es geht.

Simon · 28. März 2018 um 15:56

Hallo,bei mirgibt es einen Fehler beim Starten. es heißt:

„google-assistant-demo
usage: google-assistant-demo [-h] [–credentials OAUTH2_CREDENTIALS_FILE]
–device_model_id DEVICE_MODEL_ID
[–project_id PROJECT_ID] [-v]
google-assistant-demo: error: the following arguments are required: –device_model_id“

Hat jemand eine Lösung für mich?
Schonmal im Vorraus danke

Marc Jung · 6. Juli 2018 um 17:08

google-assistant-demo
Traceback (most recent call last):
File „/home/pi/env/bin/google-assistant-demo“, line 11, in
sys.exit(main())
File „/home/pi/env/lib/python3.5/site-packages/google/assistant/library/__main__.py“, line 113, in main
raise Exception(‚Missing –device-model-id option‘)
Exception: Missing –device-model-id option

Was mach ich falsch ?

Google Home Mini – der schlaue Lautsprecher von Google – MacTopics.de · 11. Februar 2018 um 20:08

[…] Leben fand. Danach bastelte ich mir aus einem Raspberry Pi einen Amazon Echo und später einen Google Assistant, aber auch diese Nachbauten konnten mich nicht ganz überzeugen. Nette Spielereien, aber leider […]

Schreibe einen Kommentar zu Claus Wolf Antworten abbrechen

Avatar-Platzhalter

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.