Sprachsteuerung auf dem Raspberry Pi mit Jarvis – Teil 3 offline Spracherkennung

 

Das Problem an den Spracherkennungen wie Alexa von Amazon, Ok Google von Google, Siri von Apple, Cortana von Microsoft ist, dass die Systeme permanent mithören und alle Gespräche analysieren. Das müssen die Spracherkennungen auch, um die Schlüsselwörter zu identifizieren. Wird ein Schlüsselwort identifiziert, wird das folgende Gespräch an die jeweiligen Server geschickt, gespeichert, verarbeitet und eine Antwort generiert. Es kann sogar vorkommen, dass die Gespräche bei starken Abwandlungen der Schlüsselwörter abgehört werden, wie zum Beispiel bei Google. Wenn zum Beispiel „okay, gut“ gesagt wird, springt die Google Spracherkennung an, obwohl dieses Schlüsselwort nicht gewollt ist / eingetragen wurde. (Quelle: https://www.focus.de/digital/computer/technik-sprachassistenten-springen-auch-ungewollt-an_id_8604878.html).

Auch ist nicht klar was die Firmen wirklich mit den gespeicherten Gesprächen anfangen und ob sie die Daten evtl. für Werbezwecke verwenden oder an Dritte weitergeben.

Schön wäre eine offline Spracherkennung. Für Jarvis ist dies möglich. Hier folgt eine Anleitung wie ein bestehendes oder ein neu installiertes Jarvis dafür konfiguriert werden muss.

Bei Neuinstallationen von Jarvis können die ersten 3 Bilder übersprungen werden.

Jarvis starten:

cd jarvis

jarvis

 

Hier geht es auch bei Neuinstallationen weiter:

 

Die offline Spracherkennung ist nun eingerichtet. Die Kommandos müssen aber wie folgt trainiert werden:

Um Wörter zu trainieren oder das Schlüsselwort zu ändern, benötigt man einen Account auf Snowboy. Hier kann ein Account erstellt werden, vorhandene öffentliche Schlüsselwörter gesucht werden, eigene Schlüsselwörter erstellt werden und unter „Account settings“ der benötigte API-Key kopiert werden: https://snowboy.kitt.ai. Dieser API-Key kann hier eingegeben werden:

Die Schlüsselwörter oder Kommandos können hier trainiert werden:

Unter „Show trained hotwords/commands“ stehen alle trainierten Wörter.

Wichtig:

Es müssen alle verwendeten Schlüsselwörter und Kommandos einzeln trainiert werden. Das dauert am Anfang etwas Zeit, dafür hat man dann aber eine offline Spracherkennung.

Weitere Beiträge zu dem Projekt Sprachsteuerung mit Jarvis:
Teil 1 – Installation
Teil 2 – Start und Konfiguration
Teil 3 – offline Spracherkennung
Erweiterungen:
Raspberry Pi – Shell Script zum steuern der GPIOs
Jarvis automatisch starten

 


14 Kommentare

Manfred K. · 11. Oktober 2018 um 16:16

Hallo,
danke für das tolle Tutorial – wirklich alles super erklärt.
Mein Jarvis habe ich installiert aber es läuft nur teilweise,
das Hotword wird erkannt (mit Schwierigkeiten) und er erwartet dann auch ein Kommando .
Diese Kommandos werden aber nicht erkannt obwohl diese im Terminal angezeigt werden.
Es erscheint nach einiger Zeit die Meldung timeout.

Woran kann das liegen ?

    Manfred K. · 11. Oktober 2018 um 18:03

    Nachtrag zu meinem vorstehend geschilderten Problem.
    Ich habe nur die Offline-Version von Jarvis (snowboy) geladen.

    Nach Durchführung der 3 Trainingstests bekomme ich folgende Meldung und Fehlermeldung:
    Meldung {„detail“: „Authentication credentials were not provided“}

    Fehlermeldung ERROR:Missing/Invalid Snowboy token
    Help: Your token: 277………….45367
    Help:Set it in menue Settings / Voice Reco / Snowboy Settings / Token

    Also den Key kopiere ich korrekt unter Snowboy Settings / Token(), denn er wird ja dort angezeigt.
    Wie kann man das Problem lösen ?

CS · 12. Oktober 2018 um 7:58

Hallo Manfred,

das Problem konnte ich leider nicht reproduzieren, von dem her kann ich nur Vermutungen aufstellen.

Ich bin so vorgegangen (aus dem Gedächtnis):
1. Einloggen auf https://snowboy.kitt.ai/
2. Neues Hotword erstellen
3. Hotword eingeben und 3x trainieren
4. Datei herunterladen und in das Verzeichnis stt_engines/snowboy/resources/ kopieren (bei dem Schritt bin ich mir nicht mehr sicher, ich müsste es erst selber noch einmal probieren)
5. Key merken / im Jarvis eingeben

Kommt die Meldung immer noch?

Wenn Du Dich auf https://snowboy.kitt.ai/ einloggst, kannst Du rechts oben auf „Profil settings“ klicken. Dort wird Dir dann der aktuelle API-Key angezeigt. Kopiere den nochmal frisch. Wenn das auch nicht geht, dann drücke dort rechts neben den Key auf aktualisieren des Keys.
Kommt die Meldung immer noch?

Gruß Christian

Manfred K. · 15. Oktober 2018 um 18:12

Hallo Christian,
Danke für deine schnelle Antwort.
Leider konnte ich mich erst heute wieder mit dieser Sache beschäftigen.
Vorweg: Javis läuft jetzt einwandfrei im offline -Modus.

Ich habe Javis nochmal neu installiert und dabei andere Audioeinstellungen vorgenommen.
Mit dem Erfolg das dass Hotword „snowboy“ jetzt schneller und zuverlässiger erkannt wird.
Wichtig ist meiner Meinung auch das die Kommandos überall klein geschrieben werden, denn das System speichert unter – jarvis/stt_engines/snowboy/resources – die Kommandowörter in kleinen Buchstaben ab.

CS · 16. Oktober 2018 um 6:57

Hallo Manfred,

danke für die Rückmeldung. Super das es jetzt klappt.

Gruß Christian

MvR · 12. November 2018 um 15:20

Hallo Christian,
es funktioniert mit deinen perfekten Anleitungen alles bestens.
Ich möchte jetzt noch einen Schritt weiter kommen und mit einem Sprachkommando keine Audio-Ausgabe initiieren sondern das Shell-Skript /home/pi/gpio.sh aufrufen, um z.B. einen Ausgang zu schalten.
Meine Frage: wo hinterlege ich diesen Aufruf?

Gruß Manfred

    MvR · 12. November 2018 um 18:24

    …hat sich erledigt, hab’s im Internet gelernt.
    Man gibt den vollen Pfad in den Jarvis-Kommandos ein z.B.: *licht an*== /home/pi/lampe_ein.sh
    Gewusst wie ;>)

    Gruß Manfred

Alexandra · 30. Januar 2019 um 10:12

Wie kann ich mit Jarvis meinen Pi steuern? Das er zum Beispiel ein Programm öffnet? Offline, natürlich. Muss man dafür ein Script schreiben? Und wenn ja, wie genau?

Gruß Alexandra

    CS · 1. Februar 2019 um 7:35

    Hallo Alexandra,

    dafür brauchst Du ein Skript. Dieser Eintrag bei den Kommandos startet zum Beispiel ein Skript:
    *Starte Skript*== /home/pi/meinscript.sh

    Inhalt des Skripts könnte zum Beispiel so aussehen:
    #!/bin/sh
    echo „Starte Anwendung“
    /home/pi/meineAnwendung

    Wegen Inhalt/Aufbau und Rechte des Skripts, schau Dir bitte kurz diesen Beitrag an:
    https://schmidt-feldberg.de/raspberry-pi-jarvis-automatisch-starten/

    Viele Grüße
    Christian

      Alexandra · 5. Februar 2019 um 11:03

      Funktioniert mittlerweile alles einwandfrei, danke.

      Kann man Jarvis aus mehr dynamisch verwalten, weil durch die Skripte ist ja doch alles sehr statisch. Gibt es da eine Mögklichkeit?(Hab bis jetzt mal noch keine gefunden, bin aber für Ideen offen)

      Jarvis ist mein Abschlussprojekt in der Schule 🙂

        CS · 6. Februar 2019 um 6:06

        Hallo Alexandra,

        Du könntest Dir evtl. ein Skript schreiben, welches mit Parametern arbeitet. D.h. Du übergibst den Sprachbefehl in das Skript und wertest das gesprochene im Skript aus. Dann könntest Du alle Anwendungen per Sprache mit nur einem Skript starten. Das ist jetzt aber nur eine Idee. Probiere es mal aus. Über eine Rückmeldung würde ich mich natürlich freuen.

        Viele Grüße
        Christian

René · 8. Februar 2019 um 9:26

Hallo Christian,

vielen Dank für die super Artikel zu Jarvis. Ich konnte das System sehr gut mit deinen Anleitungen einrichten. Bei der Verwendung von Snowboy stehe ich aber noch vor ein paar dicken Fragezeichen. Was genau muss ich da trainieren: einzelne Wörter oder ganze Formulierungen? Ich habe mir bspw. das Plugin für die deutsche Wikipedia installiert. Eines der möglichen Kommandos ist da „*was ist ein (*)*“. Wie muss ich nun Snowboy trainieren, daß dieses Kommando aufgerufen wird? Erschwerend kommt da ja auch noch die Wildcard für den gesuchten Begriff dazu. Ist das mit Snowboy überhaupt möglich?

Viele Grüße,
René

    CS · 8. Februar 2019 um 12:43

    Hallo René,

    mit dem Anlernen musst Du etwas experimentieren. Auf jeden Fall musst Du die ganze Kommandostruktur anlernen. Evtl. probierst Du auch alle Wörter zusammenzuschreiben, bei einer Rückmeldung von einem anderen Kommentator hat auch die Groß- und Kleinschreibung eine Rolle gespielt. Versuche es einfach ein bisschen. Eigentlich klappt das ganz gut.

    Viele Grüße
    Christian

      René · 8. Februar 2019 um 22:15

      Also ich hab mir das jetzt mal im Code angesehen. Mit Snowboy sollte man nicht einzelne Wörter anlernen, sondern genau die Kommandos, die man geben möchte. Platzhalter sind mit Snowball nicht möglich. Irgendeinen Begriff aus der Wikipedia abzurufen, geht also nicht.
      Daher hab ich nun doch einen externen Dienst eingebunden. Da es bei Bing einen kostenlosen Key wohl inzwischen nur noch zeitlich begrenzt gibt, habe ich mich für Wit entschieden. Das funktioniert sehr gut. Aufpassen muss man bei Umlauten und Sonderzeichen in den Kommandos. Diese werden von Jarvis in ASCII umgewandelt. Aus ä wird ae, auf ß wird ss. Die Frage nach der Uhrzeit muss dann bspw. so aussehen:

      *wie spaet ist es*|uhrzeit==say „es is $(date +%H) uhr $(date +%M)“

      Die Groß- oder Kleinschreibung ist dagegen vollkommen egal. Vielleicht hilft das ja noch jemanden.

      Viele Grüße,
      René

Schreibe einen Kommentar

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

Translate »