Mit der Weboberfläche lässt sich Alice ganz leicht konfigurieren und mit Skills erweitern. Darüber hinaus lassen sich Hintergrundprozesse mit Syslog und Alicewatch nachvollziehen.
Skills können Widgets haben, die man in Home hinzufügen kann. Smart Home Geräte und Alice Satelites kann man in Mein Haus anordnen.
Das Webinterface ist unter dem Port 5000 erreichbar. Es ist erforderlich entweder die IP-Adresse des Raspberry Pis bzw. den Hostname zu kennen um darauf zuzugreifen.
Skills bringen manchmal Widgets mit sich, die man in Home hinzufügen und anordnen kann. Dazu klickt man einfach auf den Bearbeiten-Button und erhält verschiedene Optionen. Mit dem Plus kann man neue Widgets hinzufügen.
Anfangs sind zwei Widgets vom Skill DateDayTimeYear verfügbar.
Unter Skills sieht man alle installierten Skills. Zu Anfang ist das AliceCore, die Haupteinheit und vier weitere Skills.
In der Ansicht sieht man Autor, Version, das Icon der Kategorie und den Status. Man kann sich auch Intents des Skills anzeigen lassen wie auch Einstellungen verändern wenn der Skill dies erlaubt. Manche Skills haben auch eine kleine Bedienungsanleitung.
Schon von Werk aus verfügt Alice über einige Intents, die man weder deaktivieren noch entfernen kann. Dazu zählen die Intents der Skills AliceCore, Contextsensitive und RedQueen wie auch die Skills selbst.
Um Skills hinzuzufügen klickt man oben rechts auf das Download Symbol und bekommt eine Ansicht aller verfügbaren Skills.
Nun kann man einen oder mehrere Skill auswählen und den Download mit dem Download-Button bestätigen.
Nun werden alle Skills im Hintegrund geladen. Leider bekommt man auf der Download Seite kein Feedback bzw. hört die Download-Animation nicht auf auch wenn der Skill schon installiert ist. In Syslogs lässt sich gut verfolgen was im Hintegrund geschieht.
Um in den Adminbereich zu gelangen muss man Nutzernamen und Passwort eingeben. Standardmäßig ist das admin und 1234.
Unter Alice Einstellungen kann man unter anderem den Tech Stack konfigurieren, Advanced Debug, Dev Mode sowie Scenarios (Node Red) aktivieren/deaktivieren. Nachdem man seine Einstellungen gemacht hat muss man ganz unten mit einem Klick auf Speichern bestätigen.
Unter Utilities kann man Alice und den Rapsberry neustarten, die NLU trainieren, das System und die Skills aktuallisieren, wie auch neue Benutzer und Wakewords erstellen. Man kann außerdem das Modell der Wakewords verbessern aber auch Alice auf Werkseinstellung zurücksetzen.
In mein Haus ist es möglich Räume zu erstellen, die Inneneinrichtung zu modellieren und seine Geräte in die erstellten Räume hinzuzufügen. Außerdem lässt sich ein Backup davon erstellen.
Für eine gute Befehlserkennung muss ein gutes Zusammenspiel zwischen Sprecherkennung (ASR) und Befehlserkennung (NLU) gegeben sein. Es kann aber auch sein, dass eine Konfiguration Sprachbefehle mancher Nutzer besser erkennt als die anderer Nutzer.
Die ASR ist für die Spracherkennung zuständig. Sie wandelt Sprache in Text um. Anhand des erkannten Texts Text wird im nächsten Schritt von der NLU der passende Befehl bestimmt. Damit der Befehl auch richtig erkannt werden kann, muss die ASR also gute Vorarbeit leisten.
Mithilfe der Systemlogs und Alice Watch lässt sich überprüfen was die ASR erkennt und welchen Befehl die NLU ermittelt. Bei einer erfolgreichen Spracherkennung seitens der ASR, bitte den Punkt Befehlserkennung anschauen.
Es ist ein bekanntes Problem, dass offline/open-source ASRs zumindest auf Deutsch und anderen Sprachen nicht zuverlässig funktionieren. ASRs, die in der Cloud arbeiten haben dieses Problem nicht, da sie täglich genügend Spracheingaben von ganz verschiedenen Nutzern (nach Sprache, Geschlecht, Alter etc.) erhalten und somit jeden Tag dazu lernen und ihre Spracherkennung verbessern können.
Die Modelle von Open Source ASRs werden anhand eines Textkorpus mit einer begrenzten Anzahl an Sprechern vortrainiert und werden üblicherweise im Betrieb nicht viel besser. Für die englische Sprache gibt es Modelle, die zuverlässiger funktionieren als für andere Sprachen. Es kann aber unabhängig vom Modell so sein, dass die ASR eine Stimme besser erkennt und eine andere überhaupt nicht. Daher wäre ein erster möglicher Schritt zu schauen ob der Sprachassistent eine andere Person besser versteht.
Falls dies keinen Unterschied macht ist zu überprüfen welche ASR genutzt wird. Unter Alice stehen derzeit vier verschiedene ASRs zu Verfügung:
Snips ist nur für Englisch verfügbar und führt bei Auswahl das System in ein Reboot-Cycle. Deepspeech kann ausgewählt werden, verwendet aber standardmäßig ein Modell für Englisch und bietet daher vom Werk aus auch keine gute Texterkennung.
Die ASR von Google funktioniert laut Entwicklern, die es selbst einsetzen sehr zuverlässig. Für die Konfiguration muss jedoch ein Google Cloud Computing Konto erstellt werden und die Verwendung des ASR-Dienstes kostet sobald die Quota überschritten ist. Ein Vorteil für den Einsatz der Google ASR mit Alice anstatt von Google Home ist, dass erst nach der Wakeworderkennung die Sprachaufnahmen an Google gesendet werden.
Ausschließlich Pocketsphynx ist für Deutsch von Werk aus einsatzfähig, liefert aber nach Erfahrung auch nicht immer zuverlässige Ergebnisse. Laut den anderen Teams funktioniert Pocketsphynx unter Rhasspy besser. Es muss an dieser Stelle gesagt werden, dass Alice die ASR nachträglich nicht trainiert bzw. anhand der verfügbaren Intents optimiert. Nur die NLU wird im jetzigen Stand trainiert.
Es ist möglich Deepspeech nachträglich mit einem deutschen Modell auszustatten. Dazu kann folgendes Modell verwendet werden.
Team 4 hat genau dies getan und für Rhasspy dokumentiert. Dazu kann das vortrainiertes Modell für die Version 0.7.4 verwendet werden. Bei Alice muss dafür die Datei core/asr/model/DeepSpeechAsr.py
angepasst werden. Zum einen muss bei denden Dependencies die Version 0.7.4 anstelle von 0.6.1 angegeben werden und die API-Aufrufe entsprechend angepasst werden. Darüber hinaus kann man bei Angabe der URLs und mit einer Überprüfung der eingestellten Sprache Alice automatisch das Deutsche Modell herunterladen lassen wenn Deutsch als Sprache ausgewählt ist.
Falls Deepspeech schon aktiv ist muss nun Deepspeech in der Virtuellen Umgebung deinstalliert werden, das vorhandene Modell gelöscht werden und anschließend neugestartet werden:
~/ProjectAlice/venv/bin/pip3 uninstall deepspeech
rm -R ~/ProjectAlice/trained/asr/deepspeech/de/
sudo reboot
Nun sollte Deepspeech mit neuer Version und deutschem Modell automatisch installiert werden.
Falls die Spracherkennung zuverlässig genug funktioniert, kann es auch an der NLU liegen, dass der gewünschte Intent nicht erkannt wird. Wenn die NLU nicht richtig trainiert ist, liefert sie einen geringen Confidence-Wert und scheitert bei fast jedem Versuch oder erkennt womöglich sogar einen anderen, nichtgewollen Intent.
Die NLU kann man im Admin-Menü unter Utilities trainieren.
Es kann passieren, dass Alice (Version 1.0 Beta 4) es aufgrund eines Fehlers nicht schafft vollständig zu booten und ständig neu startet. Falls Alice in einem Reboot-Cycle gefangen ist, kann das verschiedene Gründe haben. Dies kann sofort nach der Installation passieren üblicherweise aber auch nach dem Ändern bestimmter Einstellungen. Um den Grund dafür herauszufinden kann ein Blick in die Logfiles hilfreich sein.
less /var/log/syslog
Wir sind auf folgende Situationen gestoßen bei denen Alice beim ersten Start nach einer Neuinstallation immer wieder neustartet:
Während der Installation muss genau ein Treiber für das Mikrofon angegeben werden. Dieser wird dann bei der Installation heruntergeladen und installiert. Falls beim Neustart nach der Installation kein Mikrofon erkannt wird, da entweder der falsche Treiber bei der Installtion ausgewählt worden ist oder einfach kein Mikrofon angesteckt oder per Bluetooth verbunden ist, dann kann dies ein Grund dafür sein, dass Alice immer wieder neu startet.
In Alice wir standardmäßig Hermes LED installiert. Es kann jedoch sein, dass Hermes LED nicht startet weil das Python-Package GPIO Zero nicht installiert ist, das für die Ansteuerung der LEDs gebraucht wird. Falls Hermes LED nicht startet, kommt Alice in ein Reboot-Cycle bis Hermes LED wieder erfolgreich startet.
Dec 10 12:38:35 alice python[13668]: Traceback (most recent call last):
Dec 10 12:38:35 alice python[13668]: File "main.py", line 135, in <module>
Dec 10 12:38:35 alice python[13668]: main()
Dec 10 12:38:35 alice python[13668]: File "main.py", line 120, in main
Dec 10 12:38:35 alice python[13668]: slc = HermesLedControl(args)
Dec 10 12:38:35 alice python[13668]: File "/home/pi/hermesLedControl/models/HermesLedControl.py", line 135, in __init__
Dec 10 12:38:35 alice python[13668]: self._ledsController = LedsController(self)
Dec 10 12:38:35 alice python[13668]: File "/home/pi/hermesLedControl/models/LedsController.py", line 51, in __init__
Dec 10 12:38:35 alice python[13668]: if not self.initHardware():
Dec 10 12:38:35 alice python[13668]: File "/home/pi/hermesLedControl/models/LedsController.py", line 145, in initHardware
Dec 10 12:38:35 alice python[13668]: from interfaces.pureGPIO import PureGPIO
Dec 10 12:38:35 alice python[13668]: File "/home/pi/hermesLedControl/interfaces/pureGPIO.py", line 1, in <module>
Dec 10 12:38:35 alice python[13668]: from gpiozero import LED
Dec 10 12:38:35 alice python[13668]: ModuleNotFoundError: No module named 'gpiozero'
Dec 10 12:38:35 alice systemd[1]: hermesledcontrol.service: Main process exited, code=exited, status=1/FAILURE
Dec 10 12:38:35 alice systemd[1]: hermesledcontrol.service: Failed with result 'exit-code'.
Dec 10 12:38:40 alice systemd[1]: hermesledcontrol.service: Service RestartSec=5s expired, scheduling restart.
Dec 10 12:38:40 alice systemd[1]: hermesledcontrol.service: Scheduled restart job, restart counter is at 6509.
Dec 10 12:38:40 alice systemd[1]: Stopped Hermes Led Control.
Dec 10 12:38:40 alice systemd[1]: Started Hermes Led Control.
Die fehlende Abhängigkeit, die zum Neustart führt ist standardmäßig beim Defaultimage von Raspberry Pi OS aber vorinstalliert. Das Minimalimage des Raspberry Pi OS jedoch installiert es nicht mit. Da Hermes LED diese Abhängigkeit nicht selbst nachläd falls sie nicht installiert ist muss dies manuell geschehen, damit Alice wieder starten kann.
Unter Raspberry Pi OS lässt sich GPIO Zero mit der Paketverwaltung des Systems nachinstallieren. Unter anderen Distributionen muss geschaut werden welcher Paketmanager verwendet wird (nicht debian/ubuntu-basierte Images verwenden kein apt) und schauen ob sich das Paket in den Paketquellen befindet und vor allem wie es dort heißt.
sudo apt update
sudo apt install python3-gpiozero
Es kann jedoch sein, dass Hermes LED trotz global installierter Abhängigkeit immer noch nicht funktioniert.
Falls man ein andere Distribution nutzt oder die globale Installation nichts bringt, kann die Abhängigkeit auch direkt in der virtuellen Umgebung von Hermes LED nachinstalliert werden.
~/hermesLedControl/venv/bin/pip3 install gpiozero
Durch Fehlkonfigurationen ist es auch möglich, dass Alice in ein Reboot-Cycle kommt. Ähnlich wie beim Hermes LED Problem kann der Grund oft dafür sein, dass eine benötigte Softwarekomponente nicht startet. Dies muss in jedem Fall individuell in den Log-Files überprüft werden.
Wenn man beispielsweise eine nicht funktionierende ASR auswählt und als Fallback dieselbe ASR verwendet, dann startet Alice nicht mehr bis man dies manuell wieder rückgängig macht. Das Webinterface ist nicht lange genug verfügbar um die Einstellung darüber rückgängig zu machen.
Oft kommt man in ein Reboot-Cycle wenn man Snips als ASR auswählt aber Deutsch als ASR-Sprache gewählt hat oder Google verwendet obwohl man keine Credentials-Datei hinterlegt hat.
Die Konfigurationen befinden sich im JSON-Format in der Datei ~/ProjectAlice/config.json
.
sudo nano ~/ProjectAlice/config.json
In der Datei ~/ProjectAlice/configTemplate.json
findet man die Standardwerte und möglichen Einstellungswerte. Für asr und asrFallback sind das momentan (Version 1.0 Beta 4):