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.

9 Antworten auf „Snips.ai – Der offline Sprachassistent als Alexa Alternative“

  1. Interessante Artikel. Bin über eine Empfehlung auf Snips gestoßen und jetzt stört dass zwingend ein Account von Nöten ist. Das macht es nicht direkt besser auch wenn dann die Geräte danach zwar offline laufen. Mein Französisch ist zwar merde aber werde mir mal openjarvis ansehen.

  2. Ich habe jetzt einige Zeit mit Snips getestet; als Mikrophone habe ich „ReSpeaker 6-Mic Circular Array“ im Einsatz.
    Im direkten Vergleich mit Alexa muss ich allerdings sagen, da kommt Snips in meinem Umfeld in keiner Weise an Alexa ran.
    In einer ruhigen Umgebung reagiert mein Snips auf das Wakeword zu ca. 95%. Die Erkennung der Befehle liegt dann aber schon nur mehr bei 50%. Bei normaler Umgebung (Personen im Raum, TV an) liegt dann die Erkennung des Wakewords nur mehr bei 50% und der Befehl selbst wird fast nie mehr erkannt.
    Bei Alexa liegt das Wakeword bei fast 100% und die Ausführung eines Befehls immer bei ca. 90-95%
    Ich verwende als Skill den „FHEM“ von Thyraz…
    Wenn da irgendwer gute Tips zum Verbessern hat – bitte gerne!

    1. Nur kurz zum Verständnis, meinst du mit „Alexa“ einen Amazon Echo oder hast du auf dem Raspberry Pi der Alexa Voice Service installiert ist?

      Aber zu deinem Problem: Die beim Snips verwendete Hardware ist nur schwer vergleichbar mir der von den Echo-Geräten. Es gibt Mikrofon-Arrays die dem sehr nahe kommen sollen, wie z.B. MATRIX Voice (selbst nicht getestet). Preislich bekommt man jedoch für eine MATRIX Voice knapp zwei Echo Dot. Was die Befehle angeht ist der Vergleich auch nicht so leicht, da beim Snips die Befehle auf dem Gerät interpretiert werden und bei Alexa in der Cloud.

      Was ich beim Snips empfehlen kann ist, dass man den nicht in der Nähe des Fernsehers oder Lautsprechern platzieren sollte. Die Unterdrückung der Umgebungsgeräusche ist leider noch nicht so ausgereift, wird jedoch ständig besser. Bei der Erkennung der Befehle kommt es häufig auf die Befehle selbst an und die Qualität der Trainingsdaten die eingetragen sind. Die Trainingsdaten kann man ja im Snips-Portal leicht anpassen.

      Aber ich kann dein Problem voll und ganz verstehen und hoffe selbst darauf, dass die Erkennung besser wird. Vorallem denke ich, dass mit dem Mozilla Common Voice Projekt in Zukunft noch einiges passieren wird was offline Sprachassistenten angeht.

      1. Danke für deine Antwort.
        Mit Alexa meinte ich einen Amazon echo. Bei mir steht der direkt neben dem Fernseher bzw. Stereoanlage und trotzdem, dass die Stereoanlage an ist, werden die Befehle wirklich sauber erkannt.
        Mein Snips hängt momentan direkt von der Decke, ziemlich genau da wo ich sitze – die Erkennung ist aber trotzdem deutlich schlechter als mit Alexa. Wenn ich Snips neben der Alexa hinstelle, dann ist die Erkennung ganz schlecht.
        Du schreibst, die Unterdrückung der Umgebungsgeräusche wird ständig besser – wie funktioniert das? Passiert dies durch Update von snips, oder was muss ich da noch machen?
        lg
        raimund

        1. Ja genau. Softwareseitig werden Umgebungsgeräusche weggefiltert. Somit wird die Erkennungsrate von Update zu Update verbessert. Aktuell weiß ich jedoch nicht wie die Zukunft von Snips aussehen wird, da Snips kürzlich von Sonos gekauft wurde. Ich hoffe, dass es weiterhin kostenlos nutzbar sein wird und die Software noch weiter verbessert wird. Könnte aber leider auch anders kommen, so, dass Snips nur noch mit den Sonos Lautsprechern funktionieren wird. Das muss man jetzt abwarten.

          Beste Grüße

Schreibe einen Kommentar

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