Snips.ai – Der offline Sprachassistent als Alexa Alternative

In diesem Beitrag gibt es einen kleinen Überblick über Snips, eine offline Alternative zu Alexa, Google Assistant und co.

Vor einiger Zeit hatte ich bereits einen Beitrag über Mycroft geschrieben – einen Open-Source Sprachassistenen. Jetzt möchte ich auf eine Alternative eingehen, die sogar multiroomfähig ist. Es handelt sich um Snips.

Snips ist zwar nicht (bzw. nur zu Teilen) Open-Source, jedoch kann es vollkommen offline und ohne Cloud betrieben werden. Das ist deswegen möglich, weil die Sprachbefehle online trainiert werden und anschließend als ZIP-Datei auf den Raspberry geladen werden, auf dem die Snips Software läuft. Anschließend ist keine Internetverbindung mehr nötig um Snips zu nutzen, da die Sprachbefehle direkt auf dem Raspberry verarbeitet werden.

Ein großer Vorteil von Snips ist die Möglichkeit Satelliten zu nutzen. Nicht die Satelliten im All, sondern in der eigenen Wohnung oder dem eigenen Haus. Das Prinzip funktioniert wie folgt: Es gibt eine Basisstation auf der Snips installiert ist. Dafür wird z.B. ein Raspberry Pi 3 verwendet. Anschließend kann man in jedem Raum auf Basis eines Raspberry Pi Zero W einen Satelliten erstellen. Der Satellit dient nur dazu das Wakeword und die Sprachbefehle anzunehmen und an die Basisstation weiterzuleiten. Die ganze Logik findet jedoch nur auf der Basisstation statt.

Die Spracheingabe sowohl auf der Basis als auch den Satelliten wird in den meisten Fällen mit dem ReSpeaker 2-mic Pi HAT realisiert. Natürlich kann man jedes beliebige Mikrofon verwenden, jedoch ist die Konfiguration dadurch etwas ansträngender, da der Konfigurations-Assistent für den ReSpeaker bereits eine vorgefertigte Routine implementiert hat.

Um den Assistenten zu trainieren ist eine Registrierung auf der Plattform www.snips.ai erforderlich.

Wie ist Snips aufgebaut?

Als erstes hat man auf der Plattform die Möglichkeit einen (oder mehrere) Assistenten anzulegen. In dem jeweiligen Assistenten kann man entweder eigene Apps erstellen oder bereits fertige Apps, die von anderen Usern erstellt und freigegeben wurden installieren. Beispiele für Apps wären Lichtsteuerung, Wecker oder Einkaufsliste. Jede App beinhaltet sog. Intents, die nach Belieben angelegt werden können. Intents beschreiben Absichten, die erzielt werden sollten, z.B. LichtAn oder LichtAus. Hat man einen Intent angelegt, kann man ihn mit Test-Sätzen füttern. Test-Sätze für den Intent LichtAn wären beispielhaft:

  • Schalte das Licht im Wohnzimmer an
  • Schalte das Licht auf dem Balkon an
  • Schalte das Licht in der Küche an
  • Mache das Licht in der Küche an
  • Mache das Licht auf dem Balkon an
  • Mache das Licht im Schlafzimmer an
  • Das Licht im Badezimmer anmachen
  • Das Licht in der Küche anmachen

Je mehr Test-Sätze man anlegt umso besser kann der Assistent am Ende den Befehl erkennen. Um die Intents dynamischer gestalten zu können kann werden Slots verwendet. Slots stellen Platzhalter dar, für die eine Liste an Wörtern und Aliasen angelegt werden kann. Für das obere Beispiel würde man einen Slot mit dem Namen Raum erstellen, der die Wörter Wohnzimmer, Küche, Badezimmer, Keller, Schlafzimmer und Balkon enthält. Für Badezimmer könnte man dann noch den Alias Bad hinterlegen.

Im Prinzip war es das auch schon. Der Assistent wird automatisch nach jedem Speichern trainiert und kann anschließend auf der Snips-Instanz der Basisstation installiert werden. Sollten einige Befehle nicht erkannt werden, kann man die Intents mit weiteren Sätzen füttern und den Assistenten auf der Basisstation aktualisieren.

Wie sieht mit dem Wakeword aus?

Standardmäßig wird das Wakeword „Hey Snips“ verwendet um den Assistenten zu starten. Das muss aber nicht sein, da es die Möglichkeit gibt ein beliebiges, eigenes Wakeword zu erstellen. Dazu bietet Snips ein Tool um das eigene Wakeword anzutrainieren. Ich muss jedoch sagen, dass es bei mir bislang noch nicht so ganz geklappt hat ein eigenes Wakeword zu nutzen, da es schlichtweg nicht erkannt wurde.

Wie gut funktioniert Snips?

Ich muss sagen, dass die Erkennung der Sätze erschreckend gut funktioniert, vor allem wenn man bedenkt, dass die Erkennung auf dem Raspberry läuft und nicht auf einem leistungsfähigen Server. In meiner Installation dauert die Erkennung der Sätze unter einer Sekunde. Auf den Satelliten kann es ein klein wenig länger dauern, da die Aufnahme zur Verarbeitung an die Basisstation geschickt wird.

Bei der Sprachausgabe muss man jedoch Abstriche machen, wenn man Snips offline betreiben möchte. Die Sprachausgabe klingt sehr unnatürlich und maschinell. Snips bietet jedoch die Möglichkeit Online-Dienste einzubinden, die die Sprachausgabe übernehmen. Neben Google TTS ist unter anderem auch Amazon Polly möglich.

Ich möchte hier jedoch noch nicht zu sehr auf die Einrichtung von Snips eingehen, sondern eher nur einen kleinen Überblick schaffen. Demnächst werde ich aber eine ganze Reihe zu dem Thema starten (sollte da ein Interesse bestehen J), sei es als Blogbeitrag oder Video oder sogar beides. Dabei wird es um die Konfiguration des Assistenten auf www.snips.ai gehen, um die Installation der Basisstation, um die Installation der Satelliten uvm. gehen. Also bleibt gespannt 🙂

 

Schreibt ruhig in die Kommentare ob ihr bereits Erfahrung mit Snips gemacht habt und welche das waren. Ihr dürft gerne auch Vorschläge machen auf welche Themen ich bzgl. Snips eingehen soll.

Schreibe einen Kommentar

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