Einrichtungsguide

Last updated: March 14, 2021

Brauche ich spezielle Hardware?

Project Alice funktioniert nach eigenen Versuchen am besten auf einem Raspberry Pi mit dem Betriebssystem Raspberry Pi OS. Laut Alice selbst läuft Alice auf den Modellen (3a+, 3b, 3b+ und 4b). Dabei genügen laut Alice 1GB an RAM. Es werden jedoch mindestens 2GB empfohlen. Die 8GB Variante lohnt sich zur Zeit (März 2021) aufgrund des Preisleistungsverhältnisses nicht.

Installation auf einem Rechner

Eine Installation auf einem Rechner oder einer virtuellen Machine ist theoretisch möglich. Die Alice-Community hat eine Docker-Konfiguration bereitgestellt, die es erlaubt Alice auf Linux x86-Rechnern zu verwenden. Es soll laut Entwicklern möglich sein die Konfiguration mit WSL auf Windows lauffähig zu bekommen. Momentan ist eine Installation jedoch nur mit Google und Snips als ASR möglich. Daher ist es uns nicht gelungen diese Option selbst auszuprobieren. Wir haben eine Installation auf Ubuntu und Raspberry Pi Desktop auf einer virtuellen Machine unternommen und mussten leider feststellen, dass die Installation nicht so reibungslos verläuft wie auf dem Pi.

Wir fokussieren uns in dieser Installationsanleitung ausschließlich auf die Installation auf einem Rapsberry Pi. In Versuche und Erfahrungen findet man unsere alternativen Installationsversuche.

Minimalanforderung

Die minimale Hardwareanforderung ist wie anfangs erwähnt ein Raspberry Pi Model 3 mit 1 GB RAM und eine Micro SD Karte mit 8 GB Speicher für das Betriebssystem.

Zusätzliche Mindestanforderungen sind ein Mikrofon und ein Lautsprecher für die Interaktion mit dem Sprachassistenten. Für den Anschluss eines Mikrofons vorhandene Schnittstellen sind entweder USB oder GPIO.

Empfehlenswert für eine deutlichere Spracherkennung ist ein Mic-Array. Wir verwenden u.a. einen ReSpeaker 4-Mic Array welcher mittels GPIO auf dem Raspberry Pi aufgesteckt werden kann, was für Produktionszwecke empfehlenswert ist, da nicht viel Platz verschwendet wird und keine weiteren Kabel benötigt werden.

Eine andere Möglichkeit ist ein USB-Mikrofon zu nutzen wie z.B. ein einfaches Headset oder die PlayStation EyeToy Kamera. Dadurch benötigt man keinen zusätzlichen Lautsprecher was für Testzwecke praktisch sein kann. Lautsprecher können per Klinkenanschluss oder USB angeschlossen werden. Bluetoothlautsprecher haben wir nicht ausprobiert, müssten jedoch mit Pulseaudio auch funktionieren.

Smart Home

Für unseren Sprachassistenten verwenden wir außschließlich IoT-Geräte, welche das ZigBee-Protokoll unterstützen.

Zigbee Adapter

Um mit anderen IoT-Geräten über das ZigBee-Protokoll kommunizieren zu können benötigt man ein Adapter bzw. USB-Gateway. Es sei noch zu beachten, dass einige Adapter zusätzliche Hardware zum Flashen einer speziellen Firmware benötigen.

Hier eine Liste mit verschiedenen unterstützten Möglichkeiten.

Benötigte IoT-Geräte

Grundsätzlich kann man auch virtuelle Geräte und Räume erstellen und alles simulieren ohne ein eigenes Gerät dafür kaufen zu müssen.

In unserem Projekt verwenden wir jedoch eine smarte Glühbirne, die das ZigBee-Protokoll unterstützt.

Von uns verwendete Hardware

Für unser Projekt haben wir zwei verschiedene Konfigurationen, die hier beschrieben sind.

Installation

Falls noch kein Betriebssystem auf der SD-Karte des Pi installiert ist oder eine frische Neuinstallation gewünscht ist, ist der Schritt Installation und Konfiguration des Basissystems notwendig. Andernfalls kann dieser Teil übersprungen werden und es kann sofort mit der Installation von Alice begonnen werden.

Installation und Konfiguration des Basissystems

Das Betriebssystem was sich am besten für eine Installation von Project Alice eignet ist Raspberry Pi OS. Es ist möglich, dass andere Debian-Distributionen auch gut funktionieren jedoch können nach aktuellem Stand (März 2021) neuere Paketquellen oder andere Paketmanager problematisch für eine Installation sein. Die Minimalversion von Raspberry Pi OS reicht nach eigenen Versuchen aus.

Offizielle, vorgefertigte Images für den Pi

Wir werden nachdem wir den Pi neu aufgesetzt und konfiguriert haben Alice manuell installieren.

Es gibt aber noch die Möglichkeit ein vorgefertigtes Image inkl. Alice Installation auf die SD-Karte zu flashen. Da das Projekt noch immer in einer Beta-Phase ist, wurden für die letzten Beta-Versionen jedoch keine vorgefertigten Images erstellt. Dies wird sich laut Entwicklerteam jedoch ab der Veröffentlichung von Version 1.0 ändern.

Bis dahin ist eine manuelle Installation die empfohlene Installationsvariante.

Flashen der SD-Karte

Die SD-Karte kann mithilfe des Raspberry Pi Imagers geflasht werden, welches eine plattformunabhängige Möglichkeit darstellt. Man wählt das gewünschte Image im Imager aus, dieses wird anschließend heruntergeladen und auf die ausgewählte SD-Karte geflasht. Mit dem Raspberry Pi Imager lassen sich außerdem auch fremde Images flashen.

Es kann jedoch auch ein anderes Flashing-Tool verwendet werden Unter Linux und Mac gibt es verschiedene Open Source GUI-Anwendungen, es lässt sich aber auch dd in der Kommandozeile verwenden. Unter Windows gibt es u.a. Win32DiskImager und Rufus.

SSH und WLAN einrichten

Nachdem die SD-Karte geflasht ist muss um auf den Raspberry Pi ganz ohne Monitor zuzugreifen zu können der SSH-Server zunächst aktiviert werden. Dazu erstellt man in /boot eine leere Datei namens ssh.

Um auch auf den Ethernet-Anschluss zu verzichten lohnt es sich auch sofort das WLAN zu konfigurieren. Dazu erstellt man ebenfalls in /boot eine Datei namens wpa_supplicant.conf mit folgender Strutkur:

country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="ToBeReplaced"
    scan_ssid=1
    psk="mySecretPsk"
    key_mgmt=WPA-PSK
}
Anmeldung per SSH und erste Schritte

Nun kann man den Pi anschalten und sich per SSH anmelden. Der zum Login erforderliche Benutzername ist standardmäßig pi und das Standardpasswort lautet raspberry.

Um eine SSH-Verbindung aufzubauen kann man unter Windows entweder PuTTY, den Fork KiTTY oder auch neuerdings direkt wie unter Linux und Mac den ssh-Befehl im Terminal nutzen:

ssh pi@raspberrypi

Das Passwort lässt sich mit passwd ändern. Als nächstes ist es wichtig das System auf den neusten Stand zu bringen. Dies tut man mit sudo apt-get update gefolgt von sudo apt-get dist-upgrade -y.

Weitere Konfiguration mit Raspi-Config

Im Konfigurationstool sudo raspi-config lassen sich weitere Dinge konfigurieren wie Sprache, Tastatur, Hostname und Zeitzone.

raspi-config

Um die GUI zu deaktivieren kann Boot / Auto Login auf Console … gesetzt werden. In Interface Options sollte SPI und I2C aktiviert werden. Anschließend sollte noch das Dateisystem unter Advanced Options mit Expand Filesystem vergrößert werden.

Nun kann das System neugestartet werden.

Installation von Alice

Alice ist noch in Beta und unterliegt kontinuierlicher Veränderung. Die Zielgruppe sind aktuell alle, die grundlegendes Wissen zu ihren Geräten haben, Systemlogs lesen und Python Module installieren können.

Installation mithilfe von Docker

Neben der x86-Docker-Konfiguration gibt es außerdem noch eine Konfiguration speziell für ARM-Architekturen (Raspberry Pi etc.). Diese haben wir selbst nicht ausprobiert. Alternativ zu einer manuellen Installation kann ab diesem Punkt Alice mithilfe von Docker installiert werden. Dazu gibt es ein Github-Repo mit einer Anleitung zur Installation.

Git installieren und Alice clonen

Zunächst einmal muss (falls noch nicht vorhanden) git installiert werden:

sudo apt-get install git -y

Danach kann man auch das Repo von Project Alice im Homeverzeichnis clonen:

cd
git clone https://github.com/project-alice-assistant/ProjectAlice.git
Alice Konfigurieren

Vor dem Starten der Installation muss erst einmal die Konfiguration vorgenommen werden. Dazu kopiert man die Konfigurationsdatei ProjectAlice.yaml ins /boot-Verzeichnis.

sudo cp ~/ProjectAlice/ProjectAlice.yaml /boot/ProjectAlice.yaml

Nun kann man die Konfigurationsdatei mit dem Editor seiner Wahl bearbeiten. Beispielsweise mit sudo nano /boot/ProjectAlice.yaml.

Es lässt sich ein Mikrofontreiber von vielen auswählen, der automatisch installiert wird (ReSpeaker etc.) aber auch Sprache, Regionales, Techstack, Offlinetauglichkeit usw. einstellen. Einiges davon kann auch anschließend im Webinterface noch einmal angepasst werden.

Die Konfigurationsdatei ist im YAML-Format. Damit die Installation reibungslos verläuft muss sichergestellt werden das zwischen : und Wert ein Leerzeichen ist:   ❌ key:value   ✔️ key: value

Alice starten

Nun muss nur zum Repository gewechselt werden und das Python-Script gestartet werden.

cd ~/ProjectAlice
python3 main.py

Im Hintergrund wird anschließend die Installation vorgenommen, dies erfordert eine Internetverbindung, da die Treiber und weiteren Softwarekomponenten nicht im Repo enthalten sind und aus dem Netz geladen werden müssen. Alle für Alice benötigten Dienste werden eingerichtet, sodass beim nächsten Neustart alles von alleine startet und im Hintergrund läuft.

Nachdem Alice als eigener Dienst eingerichtet worden ist und im Hintergrund läuft, sieht man keine Ausgaben mehr in der Konsole. Dafür kann man aber die Logs überprüfen: tail -f /var/log/syslog.

Bei eingeschalteten Lautsprechern hört man beim Start von Alice einen kurzen Ton.

Es ist wichtig bei der ersten Installation zu warten bis alles was im Hintegrund geschieht wirklich zu Ende ist. Denn selbst nach Neustart werden noch weitere Sachen geladen und u.a. die NLU trainiert.

Falls Alice nicht startet gibt es einen Troubleshooting Guide von Alice selbst, der weiterhelfen kann.

Systemweites Wakeword erstellen

Je nachdem welche Wakeword Engine man verwendet gibt es andere Möglichkeiten neue Wakewords hinzuzufügen. Für Snips gibt es dazu ein Hilfsskript.

Repository clonen

Zunächst clonen wir das Repository welches das Hilfsskript enthält und betreten das Verzeichnis:

git clone https://github.com/snipsco/snips-record-personal-hotword.git
cd snips-record-personal-hotword/

Dependencies installieren

Nun müssen wir die Dependencies des Skripts installieren:

sudo apt-get install python-numpy python-pyaudio python-soundfile

Samples aufnehmen

Bevor wir mit der Aufnahme starten müssen wir zunächst den ProjectAlice-Dienst stoppen um unser Mikro freizugeben:

sudo systemctl stop ProjectAlice

Nun starten wir das Hilfsskript mit dem Namen des zu erstellenden Wakewords als Parameter:

python script_recording.py your_hotword_name

Das Wakeword soll in drei verschiedenen Geschwindigkeiten bzw. Tonlagen gesprochen werden. Eine ruhige Umgebung ist wichtig um ein gutes Modell erstellen zu können. Die Aufnahme startet indem man auf Enter drückt.

Falls Aufnahmen zu lang oder zu verschieden voneinander sind erscheinen Warnungen. Warnung zu (ALSA… and/or jack server…) bei jedem Schritt können ignoriert werden. Die samples werden für ein optimales Ergebnis auch nachbearbeitet.

Wenn das Modell erzeugt ist wird der Pfad wo das Modell liegt vom Skript angegeben. Dieser sollte notiert werden, da er für den nächsten Scritt gebraucht wird.

Modell testen und Empfindlichkeit anpassen

Bevor das Modell testen sollte Project Alice und die Wakeword-Engine ausgeschaltet sein:

sudo systemctl stop snips-hotword

Nun kann folgendes Kommando eingegeben werden:

snips-hotword --model <path_to_your_model>=<sensitivity>

path_to_your_model ist der im letzten Schritt generierte Pfad und sensitivity ist die Empfindlichkeit. Diese sollte zwischen 0 und 1 liegen. Je höher die Sensitivity ist, desto anfälliger für Fehler ist das Wakeword. Standardmäßig ist die Sensitivity bei 0.5.

Modell hinzufügen

Nachdem das Modell ausreichend getestet ist, kann das Modell hinzugefügt werden. path_to_your_model sollte das Modell und die erzeugte config.json enthalten.

sudo mkdir -p  ~/ProjectAlice/trained/hotwords/<your_hotword_name>; sudo mv <path_to_your_model> ~/ProjectAlice/trained/hotwords/

Nun kann die snips.toml Datei angepasst werden:

sudo nano /etc/snips.toml

Um das Defaultwakeword zu erhalten kann das Model erweitert werden (ansonsten ist der erste Eintrag zu ersetzen):

[snips-hotword]
model = ["/home/pi/ProjectAlice/trained/hotwords/snips_hotword=0.53","<new_path_to_your_model>=<sensitivity>"]

Wenn alles abgeschlossen ist starten wir ProjectAlice neu.

sudo systemctl restart snips-hotword
sudo systemctl restart ProjectAlice