Installation von Snips (Offline-Sprachassistent) auf Raspi 3B+ mit ReSpeaker 4

06.01.2024
Dieser Inhalt ist bereits etwas älter.
This content is already a bit old.
Bild

In diesem Artikel zeige ich, wie man mit relativ wenigen Schritten und ein bisschen Zeit einen Offline-Sprachassistenten installiert und das ReSpeaker 4-HAT (http://wiki.seeedstudio.com/ReSpeaker_4_Mic_Array_for_Raspberry_Pi/) in Betrieb nimmt.

Da schöne, bzw. Besondere an "Snips" (https://snips.ai/) ist, dass es generell völlig offline und autark arbeitet. Inzwischen ist es möglich (durch die immer bessere Performance von Einplatinen-PCs und neuronalen Netzen) ein Sprachmodell in der Cloud zu trainieren und es dann auf einen relativ genügsamen Hardware laufen zu lassen.

Es wäre allerdings auch möglich, die Snips-Plattform nur als Hotword-Erkennung zu verwenden und danach die Audiodaten an Amazon oder Google weiterzuleiten und dort die Logik zu implementieren.

In diesem Artikel geht es allerdings um die vollständige Standalone-Implementierung der Plattform auf einem Raspberry Pi 3B+ mit ReSpeaker 4-HAT ohne solche Hilfsmittel.

 

Benötigte Komponenten:

1x Raspberry Pi 3B+

1x Micro-SD-Karte Class 10 mit mind. 4 GB (in meinem Fall war es eine 16GB Speicherkarte)

1x ReSpeaker 4 HAT

Sowie einen PC oder Notebook mit einem Desktop-Betriebssystem für Node.js und SAM (wird nur für die Einrichtung benötigt)

 

Grundinstallation

Für die Snips Plattform sollte Debain Stretch verwendet werden. Vorsicht: Die aktuellste Rasbian-Version basiert bereits auf Debian Buster und kann noch nicht für Snips verwendet werden, da hierzu die Repos noch nicht bei Snips verfügbar sind und es noch einige unschöne Softwarebugs gibt.

Die neuste Stretch-Version findet sich unter https://downloads.raspberrypi.org/raspbian/images/raspbian-2019-04-09/.

Auf die weitere Installation des Basissystems gehe ich nun hier nicht weiter ein.

Wichtig: Das SPI-Interface muss für die Nutzung des HAT aktiviert sein.

 

Die Plattform-Installation

Zuerst fügen wir die Snips.ai Paketquellen hinzu:

sudo apt-get update
sudo apt-get install -y dirmngr
sudo bash -c 'echo "deb https://raspbian.snips.ai/$(lsb_release -cs) stable main" > /etc/apt/sources.list.d/snips.list'
sudo apt-key adv --keyserver pgp.mit.edu --recv-keys D4F50CDCA10A2849
sudo apt-get update

Falls der PGP-Schlüssel nicht empfangen werden kann, hilft evtl. dieser Befehl weiter:

sudo apt-key adv --keyserver gpg.mozilla.org --recv-keys D4F50CDCA10A2849

Nach dem erfolgreichen Import der Schlüssel sollte nun eine Installation der eigentlichen Plattform möglich sein:

sudo apt-get install -y snips-platform-voice
sudo apt-get install -y snips-template snips-skill-server

Wir installieren mit den beiden Befehlen oben nahezu die ganze Snips-Plattform. Es wäre hier z.B. auch möglich, nur den Audio-Server zu installieren, um so genannte "Sateliten" zu installieren (https://docs.snips.ai/articles/platform/satellites).

Damit Snips und nun auch hören kann, muss das ReSpreaker HAT installiert werden. Hierzu klonen wir unsd das Git-Repo. Zuerst müssen wir und dazu aber noch Git installieren:

sudo apt-get install git

Danach klonen wir das Repo, wechseln in das Verzeichnis, markieren das Installations-Script als ausführbar und starten die Installation:

git clone https://github.com/respeaker/seeed-voicecard
cd seeed-voicecard
sudo ./install.sh

Da dauert jetzt ein bisschen, da die Kernelmodule für den Chipsatz nun auf dem Gerät nun für den aktiven Kernel erstellt werden.

Nach der Installation führen wir einen Neustart aus:

sudo reboot

Wenn alles funktioniert hat, kann man nun bereits beobachten, dass die LEDs des HAT direkt nach dem Boot kurz aufleuchten.

 

Installation von SAM

Nun muss die Plattform noch korrekt eingerichtet werden. Diese Arbeit nimmt einem das Kommandozeilentool "SAM" ab. Es kann auf einem beliebigen PC installiert werden und ermöglicht die Verwaltung des Snips-Geräte sowie später auch das Aufspielen des eigenen Assistenten.

Damit wir SAM auf dem PC nutzen können, müssen wir erst Node.js installieren. Das Installationspaket findet sich unter https://nodejs.org/en/

Nun öffnen wir die Eingabeaufforderung unter Windows und installieren SAM:

npm i snips-sam

 

Konfiguration der Basis mit SAM

Direkt nach der Installation können wir nun SAM nutzen, um uns mit unserem Raspberry zu verbinden:

sam connect <IP-Adresse des Raspi>

Nun den Usernamen (pi) sowie Kennwort eingeben (hoffentlich nicht mehr raspberry) und mit Return bestätigen.

Nun können wir die verfügbaren Audiogeräte abrufen und die Mikrofone einrichten:

sam setup audio

Hierbei wählt SAM automatisch das ReSpeaker 4-HAT als Mikrofone aus. Es muss nun nur noch festgelegt werden, womit Snips später Audio ausgeben soll. In meinem Beispiel benötige ich keine Sprachausgabe, deshalb setze ich hier den HDMI-Ausgang als Audioquelle.

Nun editieren wir die Datei /etc/snips.toml und fügen im Bereich [snips-dialogue] den Eintrag

sound_feedback_disabled_default = true

ein. Somit wird kein unnötiger Feedback-Sound über HDMI abgespielt. Wenn ein Audiogerät für die Ausgabe verwendet werden soll, entfällt dieser Schritt natürlich.

 

Konfiguration ReSpeaker 4-HAT LED

Um nun auch die LEDs auf dem HAT in Kombination mit Snips nutzen zu können, wird nun der "Snips ReSpeaker Skill" benötigt.

Auch hier klonen wir uns mittels Git das Repo auf den Raspberry. Das funktioniert auch mit SAM:

sam install actions -g https://github.com/snipsco/snips-skill-respeaker.git

Das Verhalten bzw. die Helligkeit der LEDs kann in der Config-Datei unter

/var/lib/snips/skills/snips-skill-respeaker/config.ini

angepasst werden. Die Dokumentation unter https://github.com/snipsco/snips-skill-respeaker ist hier hilfreich.

Nun müssen wir noch eine kleine Anpassung vornehmen, damit die Konfiguration in der Datei auch übernommen wird:

sudo crontab -e

Danach fügen wir folgende Zeile ein:

@reboot sleep 60 && systemctl restart snips-skill-server.service

Dieser Befehl wird von Cron direkt nach dem Start des Systems ausgeführt, in diesem Falle 60 Sekunden verzögert. Hiermit wir der Snips Skill-Server neu gestartet und die Konfiguration wird dann korrekt geladen.

 

Deaktivieren der Power/ACT-LED am Raspberry

Damit die rote Power-LED bzw. ACT-LED nicht stört, kann diese mit dem hinzufügen folgenden Zeilen in der /boot/config.txt deaktiviert werden:

# Disable the ACT LED.
dtparam=act_led_trigger=none
dtparam=act_led_activelow=off

# Disable the PWR LED.
dtparam=pwr_led_trigger=none
dtparam=pwr_led_activelow=off

 

Installation des Diagnosetools SAM-Watch

Um später mit SAM vom PC aus oder auch direkt über SSH auf dem Raspberry verfolgen zu können, welche "Intents" sowie Befehle erkannt werden, sollte das Paket snips-watch installiert werden:

sudo apt-get install snips-watch

 

Wie geht´s jetzt weiter?

Nun kann über die Snips-Konsole (https://console.snips.ai) ein erster Assistent erstellt (https://docs.snips.ai/getting-started/quick-start-console) und dann mittels SAM auf das Raspberry geladen werden:

sam install assistant -i proj_<Zufälliger Seed>

Nun "hört" das Raspberry auf das Hotword "Hey, Snips". Um zu sehen, ob Snips euch auch richtig "versteht" und der Intent mit den Slots auch korrekt erkannt wurde, hierbei den Befehl

sam watch

oder direkt auf dem Raspberry

snips-watch

ausführen.

 

Für die Einbindung des Assistenten gibt es z.B. für FHEM bereits ein Modul:

https://github.com/Thyraz/Snips-Fhem

Auch bei OpenHAB gibt es bereits Lösungen:

https://community.openhab.org/t/voice-control-how-to-use-snips-ai-and-mqtt-2-4/73947


 

Feedback, suggestions for improvement, further ideas?

Simply use the contact form or send an email directly to info@kirgus.net.