Google bietet mit seinen AIY Bausätzen (Voice, Vision) interessante Möglichkeiten deren Schnittstellen am Raspberry Pi zu verwenden. So kann das AIY Voice Kit zur Spracherkennung genutzt werden. Etwas Ähnliches gibt es zwar auch mit Amazon Alexa (auf dem Raspberry Pi), aber hier haben wir die Wahl, dass die Stimme erst auf Knopfdruck übertragen und ausgewertet wird.
Allerdings benötigt das Setup des Google AIY Voice Kits am Raspberry Pi normalerweise Bildschirm und Tastatur, was wir in diesem Tutorial umgehen. Die Einrichtung findet komplett per SSH statt.
Zubehör
Das AIY Voice Kit kam in der ersten Version ohne einen Raspberry Pi (Zero WH), wird aber inzwischen damit ausgeliefert. Wir brauchen also lediglich das Kit sowie einen USB Adapter.
Falls du ein V1.0 Kit hast, benötigst du noch einen Raspberry Pi (Model B) sowie Mikro-SD-Karte und ein USB-Typ-C-Kabel. Der Code und die weiteren Schritte unterscheiden sich nicht. Lediglich der Aufbau ist ein wenig anders. Allerdings ist eine Aufbauanleitung bei beiden Kits inklusive.
AIY Voice Kit Zusammenbau
Das Voice Kit kommt mit mehreren Komponenten und einem faltbaren Karton (Cardboard). Die Schritte zum Zusammenbauen entnimmst du am besten der beiliegenden Anleitung. Alternativ bietet Google auch auf der Website bebilderte Schritt-für-Schritt-Anleitungen für V2 (sowie für V1) an.
Am Ende steht das fertige Voice Modul mit seinem farbigen Button vor dir.
Software flashen
Zunächst einmal gehen wir auf die Github Seite der AIY Projekte und laden das Image mit der Endung .img.xz. Dieses flashen wir mittels Balena Etcher auf unsere SD-Karte. Details dazu findest du u.a. hier.
Der Vorgang wird einige Zeit dauern. Am Ende bearbeiten wir allerdings noch den Inhalt der SD-Karte. Wir erstellen dort zwei Textdateien. Die erste Datei namens „ssh“ (ohne Anführungszeichen und ohne Dateiendung) bekommt keinen Inhalt. Dadurch aktivieren wir SSH.
Außerdem können wir direkt unser W-LAN Netzwerk konfigurieren. Dieser Schritt fällt natürlich weg, wenn dein Pi nur per Ethernetkabel mit dem Router verbunden ist. Wir erstellen dazu eine weitere Datei mit dem Namen „wpa_supplicant.conf“ (ohne Anführungszeichen). Diese Datei bekommt folgenden Inhalt:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=DE network={ ssid="DEIN WLAN NAME" psk="WLAN PASSWORD" key_mgmt=WPA-PSK }
Ersetze den Namen und das Passwort deines W-LAN Netzes entsprechend (die Anführungszeichen sollten hier stehen bleiben).
Google Cloud APIs aktivieren und nutzen
Für die nächsten Schritte benötigen wir einen Google Account und müssen uns einen Cloud API Key besorgen. Dies ist allerdings sehr einfach möglich und kostet bei normaler Nutzung auch nichts. Zunächst gehen wir dazu auf console.cloud.google.com und loggen uns mit unserem Account ein (ggf. einen neuen erstellen) und akzeptieren die Geschäftsbedindungen.
Danach erstellen wir ein neues Projekt (Topbar -> Select a Project -> New Project) und geben ihm einen Namen (bspw. „RPi Voice Kit“) und erstellen es.
Wir werden zur Projektseite weitergeleitet. Hier wählen wir auf der linken Navigationsleiste „APIs & Services“ -> „Library“ aus und suchen anschließend nach „Google Assistant API„. Diese aktivieren wir.
Erneut werden wir weitergeleitet. Hier erscheint eine Textbox, dass wir noch keine Zugangsdaten haben und diese zunächst erstellt werden müssen. Auf der rechten Seite befindet sich der Button, mit dem wir das tun können („Create Credentials“).
Wähle anschließend „Google Assistant API“ sowie „Other UI (Windows, CLI Tool)“ und als Zweck „User Data“ aus.
Beim Drücken des unteren Buttons („What credentials do I need?“) erscheint ein Popup. Hier drücken wir „Set up Consent Screen“, wodurch ein neuer Tab geöffnet wird. Wähle dort als User Typ „External“ aus und drücke den Create Button.
Gib einen Namen für dein Projekt, sowie deine E-Mail-Adresse ein. Die restlichen Einstellungen (in Schritt 1, 2, 3 und 4) können so bleiben.
Nachdem wir alles erstellt haben, klicken wir auf der linken Navigationsleiste auf „Credentials“ und anschließend auf den „Create Credentials“ Button. Hier wählen wir „OAuth client ID„.
Wähle als Application Typ „Desktop App“ aus und drücke den Create Button. Unter OAuth 2.0 Client IDs siehst du nun einen neuen Eintrag. Hier drücken wir ganz rechts den Download Button, wodurch eine Datei namens „client_secret_<…>.json“ heruntergeladen wird.
Öffne diese Datei auf deinem PC mit einem Texteditor. Den Inhalt kopieren wir gleich auf den Raspberry Pi.
SSH Zugriff auf den Raspberry Pi und Einstellungen setzen
Bevor wir weitermachen, müssen wir uns per SSH auf den Raspberry Pi einloggen. Danach erstellen wir im Home Verzeichnis (/home/pi
) eine Datei namens „assistant.json“ und fügen den Inhalt der Textdatei dort ein.
sudo nano ~/assistant.json
Speichere anschließend mit STRG+O und schließe den Editor mit STRG+X.
Machen wir weiter mit den Einstellungen. Zunächst prüfen wir, ob der Ton und Mikrofon aktiv sind:
/home/pi/AIY-projects-python/checkpoints/check_audio.py
Nun können wir ggf. die Lautstärke anpassen, falls der Ton zu laut ist:
alsamixer
Mit den Pfeiltasten können wir den Ton lauter/leiser stellen.
Spracherkennungs-Demo
Wir führen nun das erste Demo Skript aus:
/home/pi/AIY-projects-python/src/examples/voice/assistant_library_demo.py
Hier wird uns nun eine URL angezeigt, unter der wir uns authentifizieren müssen. Anschließend bekommen wir einen Code, den wir dort eingeben. Danach kannst du mit „Hey Google“ die Spracherkennung aktivieren und z.B. Fragen stellen.
Weitere Beispiele findest du in der Übersichtsseite. Ein Blick auf die weiteren Skripte lohnt sich definitiv, da man hier Inspiration für weitere Aufgaben bekommen kann. In den Skripten kann man auch die Sprache einstellen / ändern.
In meinen Augen ist besonders der Speech-to-Text Service sehr interessant. Idealerweise gibt es dafür auch ein Beispielskript für Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
#!/usr/bin/env python3 # Copyright 2017 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """A demo of the Google CloudSpeech recognizer.""" import argparse import locale import logging from aiy.board import Board, Led from aiy.cloudspeech import CloudSpeechClient def get_hints(language_code): if language_code.startswith('en_'): return ('turn on the light', 'turn off the light', 'blink the light', 'goodbye') return None def locale_language(): language, _ = locale.getdefaultlocale() return language def main(): logging.basicConfig(level=logging.DEBUG) parser = argparse.ArgumentParser(description='Assistant service example.') parser.add_argument('--language', default=locale_language()) args = parser.parse_args() logging.info('Initializing for language %s...', args.language) hints = get_hints(args.language) client = CloudSpeechClient() with Board() as board: while True: if hints: logging.info('Say something, e.g. %s.' % ', '.join(hints)) else: logging.info('Say something.') text = client.recognize(language_code=args.language, hint_phrases=hints) if text is None: logging.info('You said nothing.') continue logging.info('You said: "%s"' % text) text = text.lower() if 'turn on the light' in text: board.led.state = Led.ON elif 'turn off the light' in text: board.led.state = Led.OFF elif 'blink the light' in text: board.led.state = Led.BLINK elif 'goodbye' in text: break if __name__ == '__main__': main() |
Dass Google seine Dienste nicht völlig umsonst anbietet, versteht sich leider von selbst. So sind im Moment bis zu 60 Minuten pro Monat kostenlos; danach kostet jede Minute 0.024 USD. Der Vorteil des Buttons besteht also darin, dass nicht jeglicher Text umgewandelt wird, sondern nur der relevante Teil.
Fazit
Das AIY Voice Kit von Google für den Raspberry Pi bietet meiner Meinung nach einen netten Einstieg in einige der Cloud Services von Google. Natürlich ist es zum Teil auch Googles Strategie hier die eigenen APIs zu promoten. Nichtsdestotrotz muss man sagen, dass sie auch eine der besten Sprach-APIs im Moment haben.
Dennoch könnte man die Hardware auch ohne Google Services nutzen. Hier könnte man andere kostenlose oder Open-Source Lösungen verwenden. Umgesetzt habe ich das zwar noch nicht, aber wenn dafür größeres Interesse besteht, kann ich dies in Zukunft tun.
Ein Kommentar
Hi und vielen Dank für die Dokumentation. Allerdings habe ich beim Abschnitt „erster Demoskript“ nicht alles verstanden.
…..unter der wir uns authentifizieren müssen –> Wie?
…..anschließend bekommen wir einen Code. –> von wo bekommen wir einen Code?
Dnake für die Klärung
ribo0713