NEWS
Rhasspy Offline Sprachsteuerung
-
@tobetobe
Hallo Thomas,
schon gesehen ?: MATRIX Labs has created two Rhasspy tutorials for beginners using a MATRIX microphoneGruß
Jörg -
@joergeli
Hallo Jörg,
Nein noch nicht. Vielen Dank für den Tipp. Das muss ich mir unbedingt bei Gelegenheit mal anschauen.Gruß Thomas
-
@joergeli
Hallo Jörg,ich habe mir deine Frage zur Uhrzeit nochmals angeschaut und mir folgenden Sentence gebaut:
[GetTime] time_state = (spät | uhr | zeit | uhrzeit) {state} (wie | wieviel | was | sag mir) [(ist die)] <time_state> [(ist es | haben wir)]
Ich habe alle möglichen Fragen durchprobiert, angefangen bei wie ist die zeit über wie spät ist es, wieviel uhr ist es bis hin zu sag mir die zeit, sag mir wieviel uhr es ist usw. Das klappt bei mir alles und der State wird als spät, uhr, uhrzeit, zeit an mqtt ausgegeben, wo die Abfrage dann entsprechend weiter verarbeitet werden kann.
Vielleicht kannst du damit ja noch etwas anfangen.
Noch etwas anderes: die beiden Artikel zu Matrix kannte ich doch schon. Ich dachte, es wäre etwas neues...
Und bei der Intent Erkennung arbeite ich jetzt mit Kaldi. Hier (wie auch zuvor bei Pocketsphinx) habe ich den Open transcription mode NICHT eingeschaltet. Ich hatte gelesen, dass dies zu erheblich längeren Antwortzeiten führt.
-
@joergeli said in Rhasspy Offline Sprachsteuerung:
mal was anderes: Was hast Du in Rhasspy unter Intent Recognition aktiviert?
Ich bin von "Do intent recognition with fuzzywuzzy on this device" auf
"Do intent recognition with OpenFST on this device" , bzw. "fsticuffs" gewechselt und habe
zusätzlich das "Fuzzy text matching" ausgeschaltet.Also, ich bin nun deiner Frage nochmals genauer nachgegangen. Ich verwende ebenfalls OpenFST allerdings mit der Option Fuzzy Text Matching. Die Erkennung funktioniert bei mir damit soweit ganz gut. Alle Probleme, die bei mir mit der Intent Erkennung auftraten, hatten eher mit einem unsauberen Aufbau der Slots und Sentences zu tun. Da ich beides nun relativ sauber strukturiert habe, treten auch kaum noch Fehler auf, selbst bei Hintergrundgeräuschen.
In wie weit, mein Umstieg auf Kaldi hierbei einen positiven Beitrag geleistet hat, kann ich noch nicht abschließend beurteilen.
-
@tobetobe
Hallo Thomas,
ich habe Deinen sentence 1:1 übernommen und jetzt funktioniert die Uhrzeit-Abfrage auch bei mir.
Keine Ahnung, warum da vorher der Wurm drin war. Danke!Intent Recognition mache ich mit OpenFST (wobei "Fuzzy text matching" ausgeschaltet ist).
Speech Recognition mache ich nach wie vor mit "pocketsphinx", "Open transcription mode " ist bei mir ebenfalls ausgeschaltet.Ich habe noch mal mit den webrtcvad-Einstellungen gespielt, um die Erkennung bei Umgebungsgeräuschen (TV/Radio) zu verbessern.
Dazu habe ich folgende Einstellungen für webrtcvad im profile.json ergänzt:{ "command": { "webrtcvad": { "silence_sec": 1.5, "timeout_sec": 4, "vad_mode": 3 } }, "handle": { "command": { "program": "$RHASSPY_BASE_DIR/bin/mock-commands/handle.sh" } }, "intent": { .........
Meine Überlegungen dabei:
silence_sec:
Die Zeitspanne zwischen WakeWord-Erkennung und Sprechen des Befehls war mir mit 0,5s zu kurz.
Deshalb habe ich sie auf 1,5s geändert, damit ich nach der WakeWord-Erkennung etwas länger Zeit habe, um meinen Sprachbefehl abzusetzen.timeout_sec:
Habe ich von 30s auf 4s verkürzt, damit wird erzwungen, daß auch bei Umgebungsgeräuschen Rhasspy nach 4 Sekunden gezwungen wird, mit der Spracherkennung zu beginnen.
Bei den defaultmäßigen 30s hat Rhasspy (bei Umgebungsgeräuschen) diese 30s abgewartet, bevor er mit der Sprachanalyse begonnen hat.vad_mode:
Lt. Beschreibung: "how aggressive the voice activity filter vad_mode is: this is an integer between 0 and 3. 0 is the least aggressive about filtering out non-speech, 3 is the most aggressive."
Ich bin mir nicht sicher, ob meine Umstellung von 0 auf 3 signifikante Änderungen bewirkt.Gefühlt habe ich jetzt auch bei Umgebungsgeräuschen eine bessere Chance, daß Rhasspy meine Befehle erkennt.
Sehr schlecht ist es aber nach wie vor, wenn im TV, oder Radio gesprochen wird.
Bei musikalischem Hintergrund klappt es so aber ganz gut.Gruß
Jörg -
@tobetobe
Hallo Thomas,
ich habe gerade hier gelesen, daß "Sikk" einfach seinen Fernseher automatisch stumm schaltet (mute), wenn das WakeWord erkannt wurde.
Nachdem das Intent erkannt wurde, deaktiviert er wohl die Stummschaltung wieder.
Das ist m.E. ein guter Workaround, um das leidige Erkennen bei TV-Geräuschen zu umgehen.
Muß ich bei mir mal testen. -
@joergeli
Hallo Jörg,
deine Einstellungen zu webrtcvad hören sich ganz vernünftig an; ich habe sie so übernommen. Nun muss ich testen...Nicht übernommen habe ich den Eintrag zu "handle". Wozu gehört der, bzw wozu wird der benötigt?
Die Idee, Musik und TV einfach stumm zu schalten, hatte ich auch schon. Die Umsetzung scheiterte bei mir lediglich daran, dass es mir noch nicht gelungen ist, meinen Harmony Hub per Sofware zu steuern.
@joergeli
@Tictactoo
übrigens ist es mir soeben gelungen, Dimmer- und Rollladen-Werte im Bereich 1 bis 100 an die Devices schicken zu können. Ich musste nur eine geringfügige Änderung an den Sentences vornehmen. Falls euch so etwas auch interessiert, müsst ihr zur korrekten Übergabe der Werte an zB MQTT folgendes beachten:[ChangeDimmerLevel] dimmer_level = (1..100) {value} ($device_change_command_synonyms) [(die | das | den)] ($device_dimmer_name){device} [auf] <dimmer_level> (:) {state:.LEVEL} [Prozent]
Ein externer Bezug auf einen Slot-Eintrag muss erstens in Klammern stehen und zweitens anschließend mit seiner {Kennung} versehen werden, also zB ($device_dimmer_name){device}.
Ein lokaler Bezug hingegen wird wie in Zeile 2 dargestellt, mit seinen Werten und seiner Kennung definiert und im Sentence ohne nachstehende Kennung verwendet, also zB nur <dimmer_level> (ohne {value})
Dann funktioniert auch dein Steuerungsskript sowohl für schaltbare, wie auch für dimmbare Lampen fehlerlos, Tictactoo
-
@tobetobe
Hallo Thomas,
Zitat:
"Nicht übernommen habe ich den Eintrag zu "handle". Wozu gehört der, bzw wozu wird der benötigt?"
... das war sowieso schon in meinem Profil drin.
Hatte ich nur im Code stehen lassen, damit man sehen kann, an welcher Stelle die webcrd-Einträge eingefügt wurden. -
@joergeli said in Rhasspy Offline Sprachsteuerung:
Ich musste das Script aber etwas anpassen, um es zum Laufen zu bringen.
Zusätzlich musste ich die pixel-ring-Library mit pip install pixel_ring installieren.Hallo Jörg,
ich bin gerade dabei zu testen, scheitere aber am Skript. Ich bekomme diese Fehlermeldung nach Aufruf des Skripts mit python2 (python3 ging garnicht):
pi@rhasspy-1:~/.local/lib/python2.7/site-packages/pixel_ring $ sudo python2 pixelring.py Traceback (most recent call last): File "pixelring.py", line 12, in <module> from pixel_ring import pixel_ring ImportError: cannot import name pixel_ring
Daher einige Fragen:
- Hast du pixel_ring mit oder ohne sudo installiert?
- In welchem Verzeichnis? Oder egal?
- In welchem Verzeichnis liegt dein Skript?
- Was musstest du sonst noch anpassen (mqtt-IP und Port sind klar...)?
Wäre klasse, wenn du mir hier mit einem Tipp weiterhelfen könntest.
Dann nochmals zurück zur Intent Recognition: Ich habe deine Werte für webrtcvad übernommen, allerdings mit Timeout 3 Sekunden und, wie geschildert, mit Kaldi und eingeschalteter Option Fuzzy text matching. Damit habe ich verschiedenste Befehle über eine Distanz von 6 Metern zum MatrixVoice getestet. Und zwar zunächst ohne Hintergrundgeräusche: Alles OK. Danach habe ich das Radio eingeschaltet. An der Stelle, wo ich stand, hatte ich einen Schallpegel von ca. 35 - 40 dBA im Durchschnitt, bis 60 dBA im Peak. Am Ort des Mikrofons gemessen betrug der Schallpegel ca. 30 - 35 dBA im Durchschnitt und ca. 50 im Peak. Dennoch gingen alle Kommandos fehlerfrei durch. Das ist absolut erfreulich.
Allerdings habe ich dafür auch einen Preis zu zahlen, nämlich dass die Erkennung deutlich mehrere Sekunden dauert, abhängig von der Komplexität des Kommandos.
Als nächstes werde ich jetzt meinen Pi3 mit dem MatrixVoice zu einem reinen Rhasspy-Satelliten umkonfigurieren und die komplexeren Funktionalitäten auf einen Rhasspy-Host verlagern (der dann zukünftig auch mehrere Satelliten bedienen kann).
Anmerken möchte ich noch, dass ich allerdings schon eine verlängerte Reaktionszeit festgestellt hatte, nachdem ich beim Rhasspy vom LAN auf WLAN gewechselt habe. Nachvollziehbar, dass komplexere Anwendungen wie Kaldi über die im Vergleich zum LAN langsamere WLAN Verbindung noch mehr ausgebremst werden.
-
@tobetobe
Hallo Thomas,
ich habe pixel_ring bei mir im Verzeichnis /home/pi/4mics_hat/pixel_ring installiert.
Das ist das Verzeichnis, wo meine ReSpeaker-Dateien liegen, ist aber (wahrscheinlich) egal, wo es installiert wird.
Ob mit oder ohne sudo weiß ich nicht mehr, allerdings gehören nach Installation der Ordner pixel_ring und die darunter liegenden Dateien/Ordner den User "pi".Mein python-script liegt im Ordner /home/pi/4mics_hat.
Achtung: das Script läuft nur, wenn ich vorher die virtuelle Umgebung für Python starte.
source /home/pi/env/bin/activate
Diese virtuelle Umgebung wurde bei mir mit der Installation meines ReSpeaker Mic-Arrays angelegt.
Die Eingabezeile im Terminal sieht dann so aus, wenn die virtuelle Umgebung aktiv ist:
(env) pi@Rhasspy:~/4mics_hat $Anschließend kann ich das Script mit
(env) pi@Rhasspy:~/4mics_hat $ python rhasspy_led_ring.py
startenHinweis: Das Script, bzw. die virtuelle Umgebung kann man nur mit
Ctrl + c und anschl.
(env) pi@Rhasspy:~/4mics_hat $ deactivate
beenden.Damit das Script, bzw. der Pixel-Ring automatisch beim Boot gestartet wird, habe ich mit sudo nano .profile
folgende Zeile in die Datei .profile eingefügt:
(cd /home/pi/4mics_hat; echo "4Mic:Hat"; source /home/pi/env/bin/activate; echo "Virtuelle Umgebung gestartet"; python rhasspy_led_ring.py)&
(Wichtig ist das & am Ende)
Zuerst wird in das Verzeichnis /home/pi/4mics_hat gewechselt.
Dann wird die virtuelle Umgebung gestasrtet: source /home/pi/env/bin/activate
Das echo xxxxxxxx gibt nur einen Hinweistext aus.
Anschließend wird der Pixel-Ring gestartet: python rhasspy_led_ring,pyMan kann das Ganze wohl auch als Service implementieren, das habe ich aber nicht hinbekommen.
Wie schon erwähnt, weiß ich nicht, ob das Script auch mit Deinem Matrix-Voice funktioniert
Ich weiß z.B. nicht, ob die Befehle:power = LED(5) power.on()
speziell für das ReSpeaker Mic-Array gelten.
(Damit wird GPIO5 auf HIGH gesetzt.)Ich werde aber trotzdem abwarten, bis in einer künftigen Rhasspy-Version alle Hermes MQTT-Topics unterstützt werden,
denn dann soll ja angeblich auch HERMES-LED funktionieren.Intent Recognition:
Das Wakeword wird bei mir meist auch bei laufendem TV erkannt, nur mit der anschl. Intent-Erkennung hat es dann gehapert.
Ich habe heute den Workaround implementiert, daß ich den Fernseher nach WakeWord-Erkennung stumm (mute) schalte und ein paar Sekunden nach Abschluß der Intent-Erkennung die Stummschaltung wieder aufhebe.
Die Stummschaltung läuft bei mir über JavaScript -> Broadlink RM 3+ --> Umwandlung und Senden via Infrarot.
Das funktioniert soweit ganz gut.Die Problematik hängt aber m.E. nicht nur mit dem Schallpegel zusammen, sondern ob im TV/Radio gerade gesprochen, oder Musik gespielt wird.
Musik ist m.E. unproblematischer, wenn aber gesprochen wird, weiß Rhasspy nicht , "auf wen" er hören soll, auf den TV/Radio, oder meine Stimme - was dann i.d.R. mit einem "nicht erkannt" quittiert wird.
Ich hatte mal bei einem Nachbarn, der Alexa hat, nachgefragt, wie das bei ihm funktioniert.
Angeblich soll es keine Probleme geben, auch wenn die Box ziemlich nah beim Fernseher steht.
Was bei mir natürlich die Frage aufkommen läßt " .... wie machen die das?"
Reine Software-Lösung, und/oder spezielle Hardware?Reaktionszeit
Ist bei mir so ca. 2-3 Sekunden.LAN/WLAN
Ist das wirklich so relevant?
Ich denke, daß Rhasspy ja erst mal die ganze Erkennungsprozedur abarbeitet und dann "nur" das Intent zu iobroker via MQTT übertragt. Die paar Byte sollten m.E. den Kohl nicht fett machen.
Ich kann mich natürlich auch irren.Rhasspy-Satellit/Host
Was für Hardware willst Du für den Host verwenden? Auch einen Raspi, oder was leistungsfähigeres?
Halt mich mit Deinen Erfahrungen diesbzgl. mal auf dem Laufenden.Gruß
Jörg -
@tobetobe
... und noch eine Baustelle?:
Wir hatten gestern abend Besuch und haben in der Eßecke gesessen.
Rhasspy hat im Wohnzimmer vor sich hingedöst.
Eßecke/Wohnzimmer sind offen, d.h. es ist ein rel. breiter Durchgang zwischen beiden.
Rhasspy ist in einer Ecke des Wohnzimmers platziert, d.h. es existiert keine direkte "Schallverbindung" zwischen Eßecke und Rhasspy.
Bei angeregter Unterhaltung ist Rhasspy trotzdem mehrfach aufgewacht, obwohl das WakeWord nicht gesagt wurde.
Hat natürlich Gelächter bei den Bekannten und Frust bei mir ausgelöstGruß
Jörg -
Hallo Jörg,
vielen Dank für die schnelle Antwort.Zu Pixelring: Das sieht natürlich bei mir komplett anders aus und hört sich daher nach zeitaufwändigem Suchen und Testen an. Dazu fehlt mir momentan die Motivation. Dennoch vielen Dank für die wertvollen Hinweise, die möglicherweise zum Ziel führen.
Intent Recognition: Ich gebe dir Recht. Mit Musik geht alles leichter - bzw mit Sprache aus dem Radio oder Fernsehen wird es schwieriger.
@joergeli said in Rhasspy Offline Sprachsteuerung:
... und noch eine Baustelle?
Auch ich hatte den Effekt, dass bei einem Telefonat mit meiner Frau (dabei kein TV/Radio im Hintergrund) mit einem Male verschiedene Lampen eingeschaltet wurden.. Allerdings habe ich dieses Verhalten bislang nur festgestellt, wenn ich eins von meinen "Self made Wake Words" verwendet habe (Hallo Butler oder Hey Oskar). Mit Snowboy ist dies (für mich erkennbar) noch nicht aufgetreten.
Das Ganze ist ja letztlich ein mathematisches Problem: Wie hoch ist die Wahrscheinlichkeit, dass in einem akustischen Wirrwar Teile der Frequenzen und Amplituden auftreten, wie sie zu einem gewissen Prozentsatz in dem echten Wake Word enthalten sind. Je mehrsilbig das Wake Word ist, um so geringer sollte mMn die Wahrscheinlichkeit eines Mismatches sein. Wenn dann das Wake Word nicht nur mehrsilbig ist, sondern auch noch einen relativ markanten Verlauf hat, kann eigentlich kaum etwas passieren - wie zB bei "Alexa". Dein Hiwi scheint mir aus dieser Überlegung heraus auch nicht prägnant genug zu sein.Ich hirne auch schon, wie ein gutes Wake Word aussehen könnte, was sich auch noch gut aussprechen lässt und gleichzeitig nicht albern klingt...
Hier folgten soeben 10 Minuten Schreibpause. Denn: Ich musste doch schnell mal prüfen, ob das, was ich da schreibe eigentlich richtig sein kann.
Dazu habe ich schnell mal eben eines meiner eigenen Wake Words eingestellt. Es lautet "Hallo Butler", was ich nicht für so schlecht hielt, mit dem ich aber beim Telefonieren schlechte Erfahrung gemacht habe. Das pmdl-File, welches ich mir auf der Snowboy-Plattform generiert und heruntergeladen habe, ist so miserabel, dass Rhasspy auch auf "Hallo Xerxes", "Snowboy" und sogar "Mathilde" reagiert. Eigentlich scheint es egal zu sein, was man da eingibt. Mit dem original snowboy.umdl passiert das definitiv nicht. Wenngleich mir dieses Wort weder gefällt, noch besonders gut über die Lippen geht, bleibe ich jetzt also erst einmal dabei und verfolge lieber die Gesamtfunktionalität weiter. Die gefällt mir nämlich bisher ganz gut. Der Rest wird sich schon sukzessive entwickeln.
@joergeli said in Rhasspy Offline Sprachsteuerung:
Rhasspy-Satellit/Host
Ich habe hier noch einen Banana Pi3 mit 2GB RAM herumliegen, bei dem allerdings der Kernel nicht mehr weiter gepflegt wird. Mein letztes Betriebssystem war Ubuntu 17.04. Danach ging kein Update/Upgrade mehr. Zum prinzipiellen Testen wäre die Kiste gerade noch geeignet. Oder alternativ dazu eine Virtuelle Linux Maschine auf meinem PC.Liebäugeln würde ich mit einem Ondroid H2, weil ich dann gleich meinen ganzen ioBroker optimieren könnte. Bei diesem gerät stören mich weniger die Kosten von ca. 300 - 350 € (mit a bissle mehr RAM...) als die Spannungsversorgung von 15 VDC, die mir nicht ins Konzept passen. Bei mir läuft alles mit 5 und 12 V. Also werde ich weiterschauen, was es noch so gibt...
Viele Grüße
Thomas -
@joergeli said in Rhasspy Offline Sprachsteuerung:
Rhasspy-Satellit/Host
Das hier könnte eine Möglichkeit für den Host sein:
-
Hallo, nun melde ich mich wieder zum Thema Rhasspy Satellit/Host. Nach gescheiterter Wiederbelebung meines Banana Pi M3 (Docker wurde vom zuletzt verfügbaren Kernel nicht unterstützt), habe ich einen alten PC wiederbelebt und dort zu Testzwecken Rhasspy auf Basis Linux installiert. Zur Migration der Konfigurationsdaten meines bisher für Rhasspy verwendeten Raspberry Pi3 habe ich den kompletten Profilordner vom Pi3 auf den PC kopiert. Wichtig: Um schnell zur alten Konfiguration zurückkehren zu können, habe ich mir zuvor von den Originaldaten auf beiden Rechnern eine Kopie gezogen und im neuen Verzeichnis .../profiles/backup/ gesichert.Es waren dann anschließend über "Settings" nur noch geringfügige Anpassungen auf beiden Seiten vorzunehmen. Prinzipiell beschrieben findet man dies hier:
https://community.home-assistant.io/t/rhasspy-offline-voice-control-step-by-step-server-client-docker/154015
Ich weiche davon zum Teil ab, da ich ja zB Kaldi verwende und FST mit Fuzzy...
Es funktioniert trotzdem.Zum Ergebnis: Ich bin begeistert!!! Während es mit dem Raspi immer mehrere Sekunden dauerte, bis der Schaltbefehl umgesetzt wurde, ist dies nun in der neuen Konfiguration innerhalb von weniger als einer Sekunde erledigt.
Unklar war mir, wo nun MQTT aktiviert sein muss. Ich dachte zunächst, dass dies auf der Host-Seite der Fall sein müsste. Es kamen jedoch keine Kommandos an. Erst als ich MQTT auch wieder beim Satelliten aktivierte, wurde wie gewünscht geschaltet. Hier tappe ich ehrlich gesagt noch ein wenig im Dunkeln.
Die Ausgabe eines Kommandos im "log" und in "Speech" ist übrigens auf beiden Systemen (weitestgehend) identisch. Da ich momentan nur über erste Eindrücke verfüge, möchte ich mich mit einer verbindlichen Aussage hierzu noch ein wenig zurückhalten.
Da die Verwendung meines alten PC auf Dauer keien Lösung ist, habe ich mir heute einen Ondroid H2 mit 16GB RAM und nVME SSD bestellt. Dass 15V nicht unbedingt mein Favorit sind, nehme ich in Kauf.
Wenn ihr euch auch für diesen Ansatz interessiert, möchte ich euch hiermit Mut machen, es auch einfach mal zu versuchen. Der Aufwand hält sich wirklich in Grenzen.
Bin gespannt, was ihr sagt.
Viele Grüße
Thomas -
@tobetobe
Hallo Thomas,
ehrlich gesagt, möchte ich nicht noch weitere "potente" Hardware einsetzen, nur um Rhasspy, welches für mich letztendlich nur ein Gimmick ist, halbwegs vernünftig zum Laufen zu bekommen. 1 Rhasspy reicht mir da vollkommen aus.Ich habe heute ein wenig experimentiert:
Rhasspy-SD-Kartenimage von meinem Raspi 3 gezogen und auf eine andere SD-Karte überspielt.
Diese neue SD-Karte dann in einen Raspi 4 (mit 4 GByte) gesteckt.
Rhasspy speech-recognition mit pocketsphinx ist erheblich schneller, als auf dem Raspi3, es efolgt praktisch sofort eine Antwort.Dann habe ich es "irgendwie" doch geschafft, Kaldi in das de-Profil zu installieren.
Danach die SD-Karte zurück in den Raspi3 gesteckt.
Dort ist jetzt also speech-recognition mit kaldi aktiviert.
Aaaber: Speech-Recognition, bzw. Intent-Erkennung dauert jetzt ca. 10 Sekunden !Ergo: Ich habe speech-recognition wieder auf pocketsphinx zurückgestellt, damit dauert die Erkennung nur ca. 2-3 Sekunden auf dem Raspi 3.
Mein persönliches Fazit: Kaldi mag zwar in der Spracherkennung besser sein, aber es braucht dafür "sehr lange"..
Mag sein, daß es mit entspr. Hardwareaufwand schneller geht.Nebenbei:
Du hattest mal geschrieben daß die persönlichen WakeWords von Snowboy schlechte Qualität haben und deshalb wohl rel. viele Fehlerkennungen möglich sind.
Ich habe es mal mit dem defaultmäßigen snowboy.umdl, also dem Universal-Modell, versucht.
Das "mag" Rhasspy bei mir aber überhaupt nicht.
Egal, ob ich snowboy.umdl via WEB-Gui, oder auch direkt im profile.json eintrage, bringt es das ganze Profil durcheinander. Da wird dann plötzlich auf englisches Profil umgestellt, oder es taucht gar keine Länder-Angabe mehr in der GUI auf. Außerdem werden willkürlich Settings verändert, Custom-Words nicht mehr gelistet, o.ä.
Also auch da wieder zurück auf mein persönliches Hiwi.pmdlSumma sumarum:
Rhasspy "works as designed", aber mit Problemen bei Hintergrund-Geräuschen (TV/Radio oder Unterhaltung mit mehreren Personen).
Für mich im Bastelzimmer durchaus brauchbar, aber im Wohnzimmer, oder am Frühstückstisch geht der WAF in den Keller, da häufiges "Fehl-Aufwachen".Ich habe auch keine Ideen mehr, wie ich dieses Verhalten in den Griff bekommen könnte.
Gruß
Jörg -
@joergeli
Hallo Jörg,
@joergeli said in Rhasspy Offline Sprachsteuerung:möchte ich nicht noch weitere "potente" Hardware einsetzen
Das verstehe ich natürlich. Hier muss jeder seinen eigenen Weg gehen. Und da will ich auch nicht hinein reden. Da du aber schon einen Pi3 und einenPi4 bereits besitzt, würde ich dir empfehlen zu schauen, ob eine Konstellation Host = Pi4 und Satellite = Pi3 nicht doch eine deutliche Verbesserung (auch mit Kaldi) bringen könnte. Ich glaube, die wesentliche Verbesserung liegt in der prinzipiellen Trennung von Funktionen, nicht in der leistungsfähigeren Hardware.
@joergeli said in Rhasspy Offline Sprachsteuerung:
Aaaber: Speech-Recognition, bzw. Intent-Erkennung dauert jetzt ca. 10 Sekunden !
Wo? auf dem Pi3 oder auf dem Pi4? Wie gesagt: Bei mir war das exakt genau so, und nach der Trennung Host/Satellite war dasProblem weg.
@joergeli said in Rhasspy Offline Sprachsteuerung:
Mein persönliches Fazit: Kaldi mag zwar in der Spracherkennung besser sein, aber es braucht dafür "sehr lange"..
Mag sein, daß es mit entspr. Hardwareaufwand schneller geht.Wie gesagt: Kaldi gehört auf den Host. Nach Trennung ist meine Erfahrung nunmal, dass Kaldi wirklich sehr gut reagiert und die Perfomance in einer Host/Satellite-Konfiguration wirklich sehr gut ist.
Anmerken möchte ich, dass ich mittlerweile festgestellt habe, dass sichdie Reaktionszeit bei schlechtem Signal/Noise-Verhältnis )(also bei Hintergrundgeräuschen) verlängert. Kaldi erkennt trotzdem richtig!
@joergeli said in Rhasspy Offline Sprachsteuerung:
Nebenbei:
Du hattest mal geschrieben daß die persönlichen WakeWords von Snowboy schlechte Qualität haben und deshalb wohl rel. viele Fehlerkennungen möglich sind.Da habe ich mich wohl nicht korrekt ausgedrückt. Zunächst habe ich gesagt, dass MEINE persönlichen Wake Wordes schlechte Qualität haben, weil ich zB über das Browser-Mikro und nicht über das Rhasspy-Mikro (also MatrixVoice in meinem Fall) aufgenommen habe. Letzteres wird aber empfohlen, dh, man muss die entsprechenden wav-Files bei Snowboy hochladen, was ich so nicht getan habe. Somit erste Fehlerquelle
Zweite Fehlerquelle: Meine Wake Words (wie auch dein HiWi) sind phonetischen Folgen, wie sie in einer Diskussion vorkommen, zu ähnlich. Hiwi mit nur zwei Silben ist den allgemeinen Empfahlungen nach auch eindeutig zu kurz.
Verschiedene Quellen habe sich dazu ganz gut ausgelassen:
https://picovoice.ai/blog/tips-for-choosing-a-wake-word/ https://medium.com/@rowantrollope/7-things-you-didnt-know-about-wake-words-d4e9e041d11d u.viele mehr
Im Prinzip hatte ich das mit eigenen Worten bereits versucht auszudrücken.
@joergeli said in Rhasspy Offline Sprachsteuerung:
Egal, ob ich snowboy.umdl via WEB-Gui, oder auch direkt im profile.json eintrage, bringt es das ganze Profil durcheinander.
Solche Effekte stelle ich auch immer wieder fest. Sie haben mich bei meiner Umstellung zu Host/Satellite fast in den Wahnsinn getrieben. Hier scheint Rhasspy durchaus noch eine Schwäche zu haben, die sich allerdings umgehen lässt.
Lösung: Umkonfigurieren und speichern OHNE zu trainieren. Danach das Profile ausmisten: Die Slots und Sentences, sowie das profile.json prüfen. Wenn alles korrekt ist: Neustarten ohne zu trainieren. DANACH trainieren.
Und was die wake words betrifft: Mir ist bei der Konfig über die Web GUI der Fehler unterlaufen, dass ich nicht auf die Endung geachtet habe: umdl und pmdl!!! Das hat bei mir auch zu Fehlern geführt.
@joergeli said in Rhasspy Offline Sprachsteuerung:
Summa sumarum:
Rhasspy läuft bei mir jetzt wirlklich sehr gut. Die auftretenden Probleme bei der Konfiguration (zB auf einmal englisches Profil) konnten mit meinen Hiweisen umgangen werden. Und finally: Host/Satellite ist wirklich sehr performant, bestimmt auch in einer Konstallation Host = Pi4 und Satellite = Pi3. Es muss ja kein Ondroid H2 sein... (mit dem ich ja außerhalb von Rhaspy auch noch ganz andere Ziele verfolge)@joergeli said in Rhasspy Offline Sprachsteuerung:
Ich habe auch keine Ideen mehr, wie ich dieses Verhalten in den Griff bekommen könnte.
Davon bin ich aufgrund eigener Erfahrung wirklich überzeugt, sonst würde ich es nicht sagen: Folge meinen Empfehlungen und du wirst zufrieden sein. Ich hatte heute zur Biathlon den Fernseher im Wohnzimmer laufen - zwei Reporter haben gequatscht. Rhasspy ist im Büro hinter einer beidseits offenen Trennwand, Distanz ca. 6 Meter. Nun gut. ich musste etwas lauter sprechen, um verstanden zu werden. Fehlversuche (false positives), die irgend etwas anderes geschaltet haben, gab es jedenfalls keine. Für mich ist das so vollkommen in Ordnung.
Viele Grüße
Thomas -
@tobetobe
Hallo Thomas,Speech Recognition:
Kaldi Raspi P4: ca. 4-5 Sekunden
Kaldi Raspi P3: ca. 10 SekundenPocketsphinx Raspi P4: quasi sofort
Pocketsphinx Raspi P3: ca. 2-3 SekundenWakeWord:
Ich hatte während der abendlichen Unterhaltung im Bekanntenkreis ein WakeWord "r2d2" (erzwodezwo = 4 Silben) aktiv, trotzdem ist es zu "Fehlaufwachern" gekommen.
Ich werde jetzt noch mal ein Wakeword namens "Lieselotte" erstellen und damit testen.Heute habe ich noch einen Test mit Raspi P4 / Kaldi bei laufendem TV durchgeführt:
Dazu habe ich den Raspi in einen Karton gepackt und diesen innen ringsum mit Schaumstoff ausgekleidet,
dabei nur eine Seite offen gelassen. Also quasi so was wie ein Richtmikrofon gebastelt.
Den Karton nebst Raspi habe ich dann ca. 2 Meter parallel neben dem TV platziert, die Kartonöffnung in meine Richtung.
Überlegung dabei: TV-Sprache wird stärker gedämpft, als meine Sprachbefehle.
Ergebnis: Die Erkennungsrate ist mit Kaldi einigemassen OK. Mit Pocketsphinx so gut wie unbrauchbar.Weiteres Vorgehen:
1.) Ich werde mit meinem 3D-Drucker ein Gehäuse (mit einer offenen Seite) für den Raspi 4 drucken, dieses innen mit Schaumstoff auskleiden und den Raspi darin "versenken".
2.) Zusätzlich werde ich den TV automatisch auf "Mute" schalten, wenn das WakeWord erkannt wurde.Das wird einige Zeit in Anspruch nehmen und ich bin gespannt auf das Ergebnis.
Gruß
Jörg -
@joergeli
Hallo Jörg,
die Werte mit deinem Pi4 sehen ja mit Pocketsphinx gar nicht so schlecht aus. Interessant finde ich auch deinen Ansatz mit der Gehäusekonstruktion. Deine Überlegungen, das Signal/Noise-Verhältnis durch die Gehäusekonstruktion und durch Abschalten des TV-Tons zu verbessern, könnten vielversprechend sein. Da bin ich auch auf deine Ergebnisse gespannt.Wobei, eigentlich sollen die Mikrofon Arrays ja rundum empfangen. So wie ich das von dir verwendete Respeaker Array verstanden habe, unterstützt es die Funktionen DOA (Direction of A.), also Erkennung der Richtung aus der das Wake Word kommt, und dann anschließend Beamforming, dh das Mikrofon Array wird per Software so "ausgerichtet", dass sich die verschiedenen Eingangssignale an den Einzelmikrofonen optimal ergänzen. was dazu allerdings noch zu machen ist, damit diese Funktionen auch wirklich genutzt werden können, weiß ich natürlich nicht.
Das muss man bei einem Gehäuse evtl jedoch berücksichtigen. Ich selbst habe in deine Richtung auch schon Überlegungen angestellt und werde mir daher ein Flachbandkabel für den GPIO-Anschluss am Raspberry besorgen. Das hätte für mich den Vorteil, dass Array und Pi nicht so starr miteinander verbunden sind und man höhere Freiheitsgrade bei der Gestaltung des Gehäuses hat.
Das bringt mich zu der Frage, welchen 3D-Drucker du besitzt. Und ob du mit ihm zufrieden bist, vor allem mit der Software, die du zum Design der Druckobjekte verwendest.
Zu deinen Wake Words möcht ich noch etwas anmerken: Nach allem, was ich dazu gelesen habe, sind gute Wake Words so aufgebaut, dass sie einerseits markante Konsonanten aufweisen (also x, tz,) und andererseits abwechselnde Vokale mit starker Betonung auf jedem Vokal. Vielleicht wäre Tsunami hierfür ein gutes Beispiel, oder noch besser Munatsi, weil das ts in der Mitte die Vokale schärfer trennt. R2D2 passt nicht in diese Überlegungen, schon allein, weil sich der Vokal wiederholt. Lieselotte (Liezelotta???) könnte so gesehen evtl ganz gut sein. Bin gespannt...
Jedenfalls wünsche ich dir weiterhin gutes Gelingen, denn das schöne an diesem Projekt ist doch, dass man sich weder mit der Hardware, noch mit der Rhasspy-Software irgend etwas verbaut.
Ich stecke momentan noch mitten im Umzug: Odroid H2 ist aufgesetzt, mein ioBroker Host ist auf ihn migriert und der Rhasspy Host auch schon dorthin umgezogen. Nun folgen noch zwei weitere ioBroker-Installationen und ich werde statt vier zu pflegenden Linux-Rechnern nur noch einen haben. Die frei werdenden Pis will ich für weitere Rhasspy-Satelliten verwenden.
Viele Grüße
Thomas -
Hallo Thomas,
@tobetobe sagte in Rhasspy Offline Sprachsteuerung:
die Werte mit deinem Pi4 sehen ja mit Pocketsphinx gar nicht so schlecht aus
Ja, allerdings ist damit die Erkennungsgenauigkeit (bei Umgebungsgeräuschen!) nicht so gut wie mit Kaldi.
@tobetobe sagte in Rhasspy Offline Sprachsteuerung:
Wobei, eigentlich sollen die Mikrofon Arrays ja rundum empfangen. So wie ich das von dir verwendete Respeaker Array verstanden habe, unterstützt es die Funktionen DOA (Direction of A.), also Erkennung der Richtung aus der das Wake Word kommt, und dann anschließend Beamforming, dh das Mikrofon Array wird per Software so "ausgerichtet", dass sich die verschiedenen Eingangssignale an den Einzelmikrofonen optimal ergänzen. was dazu allerdings noch zu machen ist, damit diese Funktionen auch wirklich genutzt werden können, weiß ich natürlich nicht.
Ja, bloß ich möchte keinen Rundumempfang, sondern lieber Empfang aus einer bevorzugten Richtung, wegen den TV/Radio-Problemen.
Bei meinen Spielereien mit dem LED-Ring gab es auch ein Python-Script von ReSpeaker, welches DOA "sichtbar" machte, d.h. am LED-Ring leuchteten alle LEDs grün, bis auf eine, welche blau leuchtete.
Hat man gesprochen, ist die blaue LED im Ring in Richtung der Sprache "gewandert".
Der Raspi, bzw. das Mic-Array lag dabei waagerecht auf dem Basteltisch.
Ich glaube aber nicht, daß diese DOA-Funktion automatisch von Rhasspy genutzt wird.Aber wie gesagt, ich will ja möglichst nur Empfang aus meiner Richtung, deshalb betreibe ich das Mic-Array senkrecht, d.h. alle 4 Mikrofone zeigen in meine Richtung, s. Foto:
@tobetobe sagte in Rhasspy Offline Sprachsteuerung:
Das bringt mich zu der Frage, welchen 3D-Drucker du besitzt. Und ob du mit ihm zufrieden bist, vor allem mit der Software, die du zum Design der Druckobjekte verwendest.
Mein 3D-Drucker: guckst Du hier
Den Anycubic-Drucker habe ich mit einem Raspi 3, auf dem Octoprint läuft "gepimpt".
Damit kann ich ihn auch aus ioBroker heraus beobachten.
Für meine Zwecke ist der Anycubic ( 300,- €-Klasse) vollkommen ausreichend.
Als Software nutze ich das kostenlose FreeCAD
Es erfordert zwar Einarbeitungszeit, das ist aber wohl auch bei den kommerziellen Produkten so.@tobetobe sagte in Rhasspy Offline Sprachsteuerung:
Ich stecke momentan noch mitten im Umzug: Odroid H2 ist aufgesetzt, mein ioBroker Host ist auf ihn migriert und der Rhasspy Host auch schon dorthin umgezogen. Nun folgen noch zwei weitere ioBroker-Installationen und ich werde statt vier zu pflegenden Linux-Rechnern nur noch einen haben. Die frei werdenden Pis will ich für weitere Rhasspy-Satelliten verwenden.
Ich bin mit ioBroker von einem Raspi 3B auf einen Raspi 4B (4GByte RAM) umgezogen.
Es laufen ca. 20 ioBroker-Instanzen und div. JavaScripte darauf.
Auf dem Raspi 3 wurde das RAM (1 GByte) ab ca. 15 Instanzen knapp, deshalb der Umzug.
Auf dem Raspi 4 sind jetzt immer noch ca. 77% RAM frei, läuft problemlos und flott 24/7.Rhasspy lasse ich lieber auf einem eigenem Raspi laufen, ich will die ioBroker-Installation nicht "gefährden".
Ich werde weiter berichten, wenn ich mein "Schallschutzgehäuse" fertig habe.
Gruß
Jörg -
@tobetobe
Hallo Thomas,Schallschutzgehäuse:
Hat nicht viel gebracht; Fremdgeräusche werden auch aus anderen Richtungen, als aus der "Sprechrichtung" empfangen.
Ich habe das zusätzliche Gehäuse wieder entfernt.WakeWord:
Du hattest ja mal erwähnt, daß man das WakeWord am Besten mit dem später auch verwendeten Mikrofon (bei mir ReSpeaker 4 Mic-Array) trainieren sollte.
Bei mir gab es aber das Problem, daß ich für Rhasspy Raspbian Buster light, also Headless verwende, ergo auch kein Browser (Chromium) verfügbar ist, mit dem das WakeWord auf https://snowboy.kitt.ai/ trainiert werden konnte.Ich habe hier: Snowboy-CustomMaker zwei Python-Scripte gefunden, mit denen man das auch ohne Browser trainieren kann.
Es gab aber leider auch damit Probleme:
Das erste Python-Script snowboyRecord ist bei mir auf Fehler gelaufen, somit konnte ich keine wav-Dateien aufnehmen.
Ich habe die 3 wav-Dateien (0.wav, 1.wav, 2.wav) dann auf dem Raspi manuell mit arecord aufgenommen. Als WakeWord habe ich "Lieselotte" verwendet.
Anschließend habe ich die 3 wav-Dateien auf einem Windows-PC mit Audacity bereinigt, d.h. Pausen am Anfang und Ende des Wakewortes entfernt.
Anschließend die nun bereinigten wav-Dateien zurück auf den Raspi kopiert.Das zweite Script snowboyTrain hat funktionirt und ich konnte erfolgreich mit den 3 wav-Dateien die Datei "Lieselotte.pmdl" erstellen.
Mit "Lieselotte" funktioniert die WakeWord-Erkennung jetzt recht gut.MemoryLeak:
Ich habe mehrfach gelesen, daß evtl. ein MemoryLeak bei Rhasspy auftreten kann.
Deshalb habe ich zur Sicherheit mit sudo crontab -e einen Cronjob angelegt (0 5 * * * sudo reboot), der den Raspi jeden morgen um 05:00 Uhr rebootet.
__Status Quo:
Rhasspy (auf Raspi P4) ist jetzt in die Essecke umgezogen, wo nur ab und zu das Radio läuft.
WakeWord- und Sprach-Erkennung mit Kaldi funktionieren dort ganz gut (ohne Fehlauslösungen).
Das lasse ich jetzt so laufen, bis Rhasspy V 2.5 verfügbar ist, wo dann ja wohl das kpl. Hermes-Protokoll via MQTT unterstützt werden soll.
Schaun mer mal ...Frage:
Hast Du Dich schon mit der Sprachrückführung, d.h. akustische Rückmeldung (z.B. "Es ist jetzt 12:25 Uhr") auf dem Raspi beschäftigt?
Bei mit kommen Rückmeldungen z. Zt. mittels ioBroker-PAW-Adapter auf mein Android-Tablet, was für mich im Prinzip ausreichend ist.Gruß
Jörg