SEPIA-Framework / sepia-docs

Documentation and Wiki for SEPIA. Please post your questions and bug-reports here in the issues section! Thank you :-)
https://sepia-framework.github.io/
238 stars 16 forks source link

Wakeword Fehler: Failed to create module #220

Closed gu3nter closed 1 year ago

gu3nter commented 1 year ago

Hallo zusammen,

wollte schon vor einiger Zeit die neuen Wakewords (eigenes Wakeword) testen, jedoch habe ich es noch nicht geschafft, das ordentlich zum laufen zu bringen.

Meine doings: Anweisungen von hier und hier befolgt: https://github.com/SEPIA-Framework/sepia-html-client-app/blob/master/www/xtensions/picovoice/README.md https://github.com/SEPIA-Framework/sepia-html-client-app/blob/master/Settings.md

Wakeword für clexi händisch in ./clexi/www/sepia/audio-modules/picovoice/porcupine-keywords kopiert und in ./SEPIA/sepia-assist-server/Xtensions/WebContent/files/wake-words/porcupine/2.1_de/keywords

clexi Settings folgendermaßen ergänzt: "wakeWordNames": "Server: Jarvis", "wakeWordVersion": "2.1_de", "wakeWordRemoteUrl": "/files/wake-words/porcupine/", "wakeWordAccessKeyPorcupine": "MeinACCKey", "wakeWordSensitivity": ["0.7"],

Die erste Wakeword Erkennung funktioniert, danach kommt folgender Fehler: Output: SEPIA Client connections: Broadcaster event: {"broadcast":{"client":"o1_chrome_app_v0.25.0","deviceId":"o1","sepia-wake-word":{"state":"error","msg":"Failed to create module. - Name: Error - Message: 'pv_porcupine_init' failed with status INVALID_ARGUMENT"}}}

könnt ihr mir bitte helfen? Was habe ich noch vergessen?

PS: Das Jarvis Wakeword wurde schon im Nov erstellt nur um das ganze zu testen. Damals gab es in der Zip noch die ..._b64.txt datei, die gibt es jetzt nichtmehr! Wie müsste man jetzt ein eigenes Wakeword converten?

Danke und Gruß

René

fquirin commented 1 year ago

Hi René,

Die erste Wakeword Erkennung funktioniert, danach kommt folgender Fehler

Das suggeriert eigentlich, dass du alles richtig gemacht hast. Springt der bei der ersten Erkennung korrekt in den nächsten Modus (Spracherkennung) und bricht danach dann ab? Ist das reproduzierbar für jeden Neustart des Clients?

Welcher Client ist das, sprich welche Hardware? (z.B. Raspberry Pi 3/4? 2GB/4GB?)

pv_porcupine_init' failed with status INVALID_ARGUMENT

Dieser Fehler trat zuletzt auch ein mal auf, weil beim Eintragen des wakeWordAccessKeyPorcupine in die settings Datei irgendwas komisches passiert ist, so dass der String nicht verarbeitet werden konnte. Meine einzige Vermutung war damals, dass es beim Copy & Paste Vorgang irgendein Text-Format/Kodierungsproblem gab (sehr kuriose Sache). Hast du den Key über ein Linux Terminal kopiert? Oder direkt in die Datei geschrieben per Text Editor?

gu3nter commented 1 year ago

Hi,

danke für die Antwort.

Springt der bei der ersten Erkennung korrekt in den nächsten Modus (Spracherkennung) und bricht danach dann ab?

ja mir wird zugehört, "richtig geantwortet" und dann kommt der Fehler.

Ist das reproduzierbar für jeden Neustart des Clients?

Ja ist immer so.

Welcher Client ist das, sprich welche Hardware?

Raspberry Pi4 B 4GB 64 bit version usb mic array

Dieser Fehler trat zuletzt auch ein mal auf, weil beim Eintragen des wakeWordAccessKeyPorcupine in die settings Datei irgendwas komisches passiert ist, so dass der String nicht verarbeitet werden konnte.

Habe mir einen zweiten account bei porcupine erstellt und den neuen Key in der settings.js eigetragen, danach wurde mir im browser https://console.picovoice.ai/ unter monthly user 1/3 angezeigt, somit scheint der porcupine login zu gehen. Davor stand da 0/3

fquirin commented 1 year ago

Hmm, das ist wieder so ein verflixter Fehler, der erstmal keinen Sinn ergibt 🙈 .

Funktionieren die anderen Wake-Words normal, z.B. das 1.4er "Hey SEPIA" und das 1.9er "Computer"? Laufen noch irgendwelche anderen Programme auf dem Raspberry Pi, abgesehen vom DIY Client? Welches System läuft auf dem Pi? Raspberry Pi OS Buster? Bullseye?

gu3nter commented 1 year ago

Funktionieren die anderen Wake-Words normal, z.B. das 1.4er "Hey SEPIA" und das 1.9er "Computer"?

Jarvis in Version 1.9 geht auf jeden Fall das benutze ich seit langem ohne Probleme. Hey Sepia und Computer werde ich morgen testen, heute schaffe ich es leider nicht mehr.

Laufen noch irgendwelche anderen Programme auf dem Raspberry Pi, abgesehen vom DIY Client?

Es lauft der DIY Client und Sepia Server V2.7.0 selbst auf dem gleichen gerät

Welches System läuft auf dem Pi? Raspberry Pi OS Buster? Bullseye?

Raspberry Pi OS Bullseye PRETTY_NAME="Debian GNU/Linux 11 (bullseye)" NAME="Debian GNU/Linux" VERSION_ID="11" VERSION="11 (bullseye)" VERSION_CODENAME=bullseye ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"

Kann man irgendwo logs aktivieren, um mehr details zu bekommen?

fquirin commented 1 year ago

Jarvis in Version 1.9 geht auf jeden Fall das benutze ich seit langem ohne Probleme

Dann gibt es auf jeden Fall kein Hardware Problem, denn die 1.9er verbrauchen am meisten RAM.

Kann man irgendwo logs aktivieren, um mehr details zu bekommen?

Es gibt eine Sache, die man probieren könnte. Man kann über Chrome auf dem Desktop PC remote zugreifen auf den DIY Client und dann in der Dev Konsole nach Problemen suchen. Dazu muss man im Setup vom DIY Client einmal den Punkt 14 auswählen: ENABLE remote debugging mode und dann muss man mit einem anderen Chrome Browser über die URL chrome://inspect/#devices auf den Client zugreifen. Wenn man den Punkt im Setup auswählt, kommt eine kleine Anleitung. Die Schritte sind etwas tricky, denn das remote Gerät taucht nicht immer sofort in der Liste am Desktop Browser auf, aber nach ein paar Versuchen sollte es klappen. Wenn die Verbindung dann steht, kann man über F12 die Dev Konsole öffnen und sieht alle Log Einträge im Browser. Dort müsste auch INVALID ARGUMENT auftauchen und ggf. noch etwas mehr. Man kann dann auch noch mal versuchen das WW manuell neu zu starten über die Settings UI ("Hey SEPIA" Eintrag im Menü).

gu3nter commented 1 year ago

OK super die Prozedure kenne ich schon. Teste das dann morgen und melde mich falls ich was herausfinde. Danke für den Hinweis

gu3nter commented 1 year ago

das kommt in der DEV Console:

SepiaFW - LOG - WakeTriggers - Set wake words: ["Server: Jarvis"] sepiaFW.wakeTriggers.js:269 SepiaFW - LOG - WakeTriggers - Wake word sensitivities: [0.699999988079071] clexi-0.9.1.js:104 SepiaFW - LOG - CLEXI connecting ... clexi-0.9.1.js:113 SepiaFW - LOG - CLEXI connected clexi-0.9.1.js:140 SepiaFW - LOG - CLEXI server says welcome. Info: {"version":"CLEXI Node.js server v0.9.2","xtensions":{"clexi-broadcaster":{"active":true},"clexi-http-events":{"active":true},"runtime-commands":{"active":true},"gpio-interface":{"active":true}}} sepiaFW.inputControls.js:265 SepiaFW - LOG - Imported hotkeys and button settings from client storage. DevTools failed to load source map: Could not load content for http://localhost:8080/sepia/scripts/hammer.min.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE DevTools failed to load source map: Could not load content for http://localhost:8080/sepia/scripts/purify.min.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE sepiaFW.clexi.js:268 SepiaFW - LOG - CLEXI starting BLE Beacon scanner sepiaFW.wakeTriggers.js:275 SepiaFW - LOG - WakeTriggers - Starting wake-word listener. porcupine-wasm-interface-v2.js:92 [ERROR] Keyword files (.PPN) and model file (.PV) should belong to the same language. Keyword files belongs to 'en' while model file belongs to 'de'.

sepiaFW.wakeWordSettings.js:111 INIT-ERROR: Error during setup of module: porcupine-wake-word-worker sepiaFW.wakeTriggers.js:337 SepiaFW - ERROR - WakeTriggers - onProcessorInitError {message: 'Error during setup of module: porcupine-wake-word-worker', name: 'ProcessorInitError', info: {…}}info: {name: 'PorcupineModuleException', message: "Failed to create module. - Name: Error - Message: …rcupine_init' failed with status INVALID_ARGUMENT", info: Error: 'pv_porcupine_init' failed with status INVALID_ARGUMENT at http://localhost:8080/sepia/a…, target: Worker}message: "Error during setup of module: porcupine-wake-word-worker"name: "ProcessorInitError"[[Prototype]]: Object (anonymous) @ sepiaFW.wakeTriggers.js:337 (anonymous) @ sepiaFW.audioRecorder.js:432 initializerError @ sepiaFW.webAudio.js?v=0.9.11:171 onError @ sepiaFW.webAudio.js?v=0.9.11:415 onMessage @ sepiaFW.webAudio.js?v=0.9.11:374 sepiaFW.wakeTriggers.js:162 SepiaFW - ERROR - Porcupine: Failed to create module. - Name: Error - Message: 'pv_porcupine_init' failed with status INVALID_ARGUMENT onerror @ sepiaFW.wakeTriggers.js:162 onError @ sepiaFW.webAudio.js?v=0.9.11:418 onMessage @ sepiaFW.webAudio.js?v=0.9.11:374 sepiaFW.wakeWordSettings.js:111 ERROR: Failed to create module. - Name: Error - Message: 'pv_porcupine_init' failed with status INVALID_ARGUMENT

Es scheint ein Problem mit de und en Version zu geben

fquirin commented 1 year ago

Ja, diese Zeile ist wahrscheinlich der Schlüssel: porcupine-wasm-interface-v2.js:92 [ERROR] Keyword files (.PPN) and model file (.PV) should belong to the same language. Die Frage bleibt, warum es dann überhaupt einmal funktioniert 😅 .

Kannst du auf der Settings Seite 3 einmal den "Exportieren" Button bei "Device & App Settings" drücken und den Inhalt posten (Porcupine Key am Besten bearbeiten vorher ^^)? Dazu noch den Namen + absoluten Pfad deines neuen Wake-Words bitte.

gu3nter commented 1 year ago

Hier der Export, hoffentlich kannst du damit was anfangen.

{
    "headless": {
        "device": {
            ...,
            "wakeWordNames": "Server: Jarvis",
            "wakeWordVersion": "2.1_de",
            "wakeWordSensitivity": [
                "0.7"
            ],
            "wakeWordAccessKeyPorcupine": "XAZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ",
            "wakeWordRemoteUrl": "<assist_server>/files/wake-words/porcupine/"
        },
        "user": {
            ...
            "useWakeWord": true,
            "autoloadWakeWord": true,
            "allowWakeWordDuringStream": true
        },
        ...,
        "broadcast": {
            "state": true,
            "login": true,
            "clientError": true,
            "accountError": true,
            "speech": true,
            "wakeWord": true,
            "audioPlayer": true,
            "alarm": true,
            "info": false
        }
    }
}
fquirin commented 1 year ago

Dazu noch den Namen + absoluten Pfad deines neuen Wake-Words

👍 und das bitte noch, also wo du dein custom Pp wake-word hin kopiert hast.

Mir fällt gerade auch noch ein, hast du beim Erstellen des WW in der Picovoice Konsole eigentlich "Deutsch" ausgewählt als Sprache? Wenn nicht versuch doch mal alles mit "en" (WW verschieben, dann Settings anpassen) oder erstelle noch mal ein Neues für "de".

gu3nter commented 1 year ago

sorry voll verplant jarvis_wasm_21_de.js

habe die Datei hier überall abgelegt: /home/pi/clexi/www/sepia/audio-modules/picovoice/porcupine-keywords /home/pi/SEPIA/sepia-assist-server/Xtensions/WebContent/files/wake-words/porcupine/2.1_de/keywords

Mir fällt gerade auch noch ein, hast du beim Erstellen des WW in der Picovoice Konsole eigentlich "Deutsch" ausgewählt als Sprache? Wenn nicht versuch doch mal alles mit "en" (WW verschieben, dann Settings anpassen) oder erstelle noch mal ein Neues für "de".

bin mir relativ sicher damals de eigestellt zu haben, kann leider kein neues mehr machen, siehe erster Post: PS: Das Jarvis Wakeword wurde schon im Nov erstellt nur um das ganze zu testen. Damals gab es in der Zip noch die ..._b64.txt datei, die gibt es jetzt nichtmehr! Wie müsste man jetzt ein eigenes Wakeword converten?

hätte probiert ein neues anzulegen, leider bekomme ich in der zip keine b64.txt mehr als download

fquirin commented 1 year ago

Ich checke das Morgen noch mal mit der b64.txt. Es gibt ein Skript in /home/pi/SEPIA/sepia-assist-server/Xtensions/WebContent/app/xtensions/picovoice/convert_binary_to_array.sh mit dem man auch die ppl Datei umwandeln kann. Danach müsste man den Inhalt unten auf der convert Seite in Result kopieren. Aber vielleicht kriege ich das auch irgendwie komplett in Javascript umgesetzt.

In der Zwischenzeit könntest du mal versuchen die Datei in /home/pi/SEPIA/sepia-assist-server/Xtensions/WebContent/files/wake-words/porcupine/2.1_en/keywords abzulegen statt "de" und in den settings dann "wakeWordVersion": "2.1_en" eintragen. [EDIT] Ach ich glaube in der Datei selbst müsste man auch noch die Sprache ändern.

gu3nter commented 1 year ago

OK super teste ich dann heute Abend

fquirin commented 1 year ago

Habe gerade den online Konverter aktualisiert 🙂 , der sollte jetzt auch die .ppn Dateien korrekt verarbeiten: https://sepia-framework.github.io/files/porcupine/convert.html (aufpassen, dass die alte Version nicht aus dem Browsercache geladen wird ^^)

gu3nter commented 1 year ago

Mega, danke Dir. Schaue dann heute Abend, ob ich es zum laufen bekomme

gu3nter commented 1 year ago

So konnte es nun testen, jedoch leider ohne Erfolg.

habe dein neues Script (https://sepia-framework.github.io/files/porcupine/convert.html) verwendet --> das erzeugte jarvis_wasm_21_de.js schein fehlerhaft zu sein (Dev console liefert den Fehler [ERROR] keyword file has incorrect format or belongs to a different platform

porcupine-wasm-interface-v2.js:92 [ERROR] loading keyword file #0 failed with 'INVALID_ARGUMENT'

sepiaFW.wakeWordSettings.js:111 INIT-ERROR: Error during setup of module: porcupine-wake-word-worker)

das erzeugte file file scheint korrupt zu sein.

PS: das von dir erstellte 2.1_en jarvis scheint problemlos zu funktionieren

fquirin commented 1 year ago

Hmm, komisch. Ich hatte nur getestet ob beim alten 'b64.txt' und beim 'ppn' das gleiche Ergebnis rauskommt, was soweit geklappt hatte. Ich muss dann beide noch mal im Client aktivieren und gucken ob ich den selben Fehler bekomme.

fquirin commented 1 year ago

Ok, tatsächlich war die Datei nicht 100% identisch, 10 bytes waren unterschiedlich 🤦‍♂️. Keine Ahnung, was da mit der Encodierung und der Konvertierungsfunktion nicht stimmte, aber ich habe eine neue Methode ausprobiert und diesmal scheint es zu klappen. Zumindest kann ich das Ergebnis jetzt bei mir im Client laden ^^.

Versuch es bitte noch mal mit der neuen Version (nicht vergessen den Browser Cache zu löschen). Wenn du statt wilden Symbolen nach dem Laden der Datei direkt schon Zahlen siehst, ist die neue Methode aktiv ;-).

gu3nter commented 1 year ago

Danke deine neue Implementierung, diese scheint zu gehen. Jedoch habe ich nun wieder den Fehler wie ganz am Anfang.

[ERROR] Keyword files (.PPN) and model file (.PV) should belong to the same language. Keyword files belongs to 'en' while model file belongs to 'de'.

sepiaFW.wakeWordSettings.js:111 INIT-ERROR: Error during setup of module: porcupine-wake-word-worker sepiaFW.wakeTriggers.js:337 SepiaFW - ERROR - WakeTriggers - onProcessorInitError Object (anonymous) @ sepiaFW.wakeTriggers.js:337 sepiaFW.wakeTriggers.js:162 SepiaFW - ERROR - Porcupine: Failed to create module. - Name: Error - Message: 'pv_porcupine_init' failed with status INVALID_ARGUMENT onerror @ sepiaFW.wakeTriggers.js:162 sepiaFW.wakeWordSettings.js:111 ERROR: Failed to create module. - Name: Error - Message: 'pv_porcupine_init' failed with status INVALID_ARGUMENT

Irgendwas muss ich doch vergessen haben, aber was? Die En Version, die mit Sepia geliefert wurde geht, evtl. hat das de irgend ein Problem

gu3nter commented 1 year ago

habe es nun geschafft indem ich die Zeile 162 in der "porcupine-wake-word-worker.js" Datei folgendermaßen geändert habe.

von: porcupineLanguage = (options.setup.language || options.setup.porcupineLanguage || "en").toLowerCase().trim();

zu: porcupineLanguage = (options.setup.language || options.setup.porcupineLanguage || "de").toLowerCase().trim();

danach hat alles funktioniert

fquirin commented 1 year ago

Seltsam 🤔, das bedeutet ja, dass die WW Sprache aus irgendeinem Grund nicht geladen wird, obwohl sie in den Settings oben richtig aussieht. Ich frage mich, ob das irgendwie mit dem Fehler zusammenhängt, bei dem das erste mal Laden klappt und das zweite mal nicht. Als wenn die Settings beim öffnen anders sind als beim "normalen" Betrieb. Ich wüsste allerdings nicht, wie das sein kann, denn die settings.js wird geladen bevor alles andere passiert.

Kannst du noch mal prüfen bitte, was in deiner settings.js Datei bei "wakeWordVersion" steht? Welchen Modus vom DIY Client nutzt du eigentlich? "Headless", "Pseudo-Headless" oder "Display" (steht im setup Menü).

gu3nter commented 1 year ago

settings.js: Da steht 2.1_de

Naja jetzt geht's ja, danke für deine Unterstützung.

Eine Frage hätte ich noch. Wenn ich ein wakeword bei porcupine erstelle, bringt das "train" etwas damit das Wort besser erkannt wird, oder reicht es wenn man es nur schreibt und dann auf erzeugen klickt?

fquirin commented 1 year ago

Naja jetzt geht's ja, danke für deine Unterstützung.

Das frustrierende ist, dass wir nicht verstehen, warum es vorher nicht ging, ich es nicht reproduzieren kann und wir somit nicht wissen unter welchen Bedingungen es wieder auftreten könnte :-/

Welchen Modus vom DIY Client nutzt du eigentlich? "Headless", "Pseudo-Headless" oder "Display" (steht im setup Menü).

Kannst du das noch kurz beantworten bitte 🙂

Wenn ich ein wakeword bei porcupine erstelle, bringt das "train" etwas damit das Wort besser erkannt wird, oder reicht es wenn man es nur schreibt und dann auf erzeugen klickt?

"Train" ist glaube ich in der Konsole lediglich ein UI Gimmick für den User und das Synonym für "Download" ^^. Porcupine is grundsätzlich eine Blackbox, aber was man glaube ich mit relativer Sicherheit sagen kann ist, dass das Wake-Word direkt aus dem Text und deren statischem Modell generiert wird. Man kann also nicht wie bei anderen Systemen Features der eigenen Stimme einbauen. Falls du Probleme hast mit der Genauigkeit des eigenen WW, lohnt es sich 2 Regeln zu befolgen:

gu3nter commented 1 year ago

Oh man sorry, na klar.

Welchen Modus vom DIY Client nutzt du eigentlich? "Headless", "Pseudo-Headless" oder "Display" (steht im setup Menü).

Ich benutze "Headless"

habe aber schon festgestellt, wenn DIY Client und Sepia auf dem gleichen Gerät ist, dass der DIY Client verspätet starten muss, sonst geht es nicht. Habe hierfür in der run.sh ein sleep 180 nach "chromium_remote_debug=0" eingebaut, da sonst z.B die weibliche Stimme nicht funktioniert hatte

Evtl ist hier der Wurm drinnen.

Weniger als 3 Silben ist zu kurz. Jar-vis ist deshalb meist schlechter als Com-pu-ter

Top danke für den Hinweis, das werde ich testen

fquirin commented 1 year ago

Ich benutze "Headless"

Ok danke. Ich lasse das jetzt erstmal so stehen und warte, ob sich der Fehler bei anderen Usern wiederholt.

habe aber schon festgestellt, wenn DIY Client und Sepia auf dem gleichen Gerät ist, dass der DIY Client verspätet starten muss, sonst geht es nicht.

Ja, das ist tatsächlich ein Problem. Wenn der Server nicht rechtzeitig online ist, springt der Client wahrscheinlich irgendwann in den Setup Modus. Da muss ich mir mal was einfallen lassen.

Habe hierfür in der run.sh ein sleep 180 nach "chromium_remote_debug=0" eingebaut, da sonst z.B die weibliche Stimme nicht funktioniert hatte Evtl ist hier der Wurm drinnen.

Das sollte eigentlich keine Einwirkung haben, denn alle Wake-Word Settings werden erst nach dem tatsächlichen Login im Client geladen.

Top danke für den Hinweis, das werde ich testen

Das ist übrigens auch der Grund, warum es "Hey Siri" heißt und nicht nur "Siri" ^^

gu3nter commented 1 year ago

Mega Hinweis mit den drei Silben, vielen Dank. Habe mir jetzt auf Englisch "Hey Jarvis" erzeugt, funktioniert bestens.

fquirin commented 1 year ago

Super, freut mich 😎