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/
236 stars 16 forks source link

LED Ansteuerung des respeaker 4-mic array #115

Open cratoo opened 3 years ago

cratoo commented 3 years ago

Ich hatte zuvor das Project Alice probiert und da kommt out-of-the-box die Ansteuerung der LED mit. Der Rest des Projektes funktioniert für mich auf deutsch nicht so wie ich mir das vorstellen würde. Meine ersten Schritte mit SEPIA waren jetzt zwar holprig, aber ich habe SEPIA Home jetzt als docker container auf unserem Haus-Server laufen und ein RP4 funktioniert mit dem 4-Mic Array. Irgendwo hatte ich gelesen, dass es Zustände gäbe (Idle/warten, Listening, Processing), die man auf den LED-Ring legen könnte und ich habe auch gelesen, dass das auch in der pipeline wäre. Kann man das also entweder selbst bauen oder vorab testen? Project Alice nutzt eine Hermes LED Control, was sich an einen MQTT Broker hängt um über die Veränderung der Topics die LED entsprechend anzusteuern. Wenn man also irgendwie an den Zustand von SEPIA kommen könnte, wäre die Ansteuerung fast schon gegeben, also aus der Selbst-Bau-Sicht :)

Und noch eine Nebenfrage zum porcupine: ich habe gesehen, dass es für Version 1.9 noch andere Wake-Words gibt. Kann man die 1.9 irgendwie auf den Client bringen?

Ansonsten top Projekt, v.a. dass ich damit schon überall im Haus, kontext-abhängig Dinge steuern kann ist großartig. Was mir dazu noch einfällt: wie wird sich SEPIA verhalten, wenn zwei Clients gleichzeitig das Wake-Word hören?

fquirin commented 3 years ago

Hi @cratoo

Wenn man also irgendwie an den Zustand von SEPIA kommen könnte, wäre die Ansteuerung fast schon gegeben, also aus der Selbst-Bau-Sicht :)

Der CLEXI Server, der auf dem SEPIA Client läuft kann die Events der Zustände auslesen und theoretisch auch an jeden verbundenen Client weitergeben über eine WebSocket Verbindung. Für Javascript gibt es dazu eine Library die auch im SEPIA Control-HUB integriert ist. Was gemacht werden müsste ist entweder ein kleines Tool zu schreiben was sich mit CLEXI verbindet und die Events in MQTT Events umwandelt oder eventuell eine Extension für CLEXI, die das direkt intern macht. Ich würde gerne helfen dabei, stecke aber gerade noch mitten im Umbau des STT Servers.

Und noch eine Nebenfrage zum porcupine: ich habe gesehen, dass es für Version 1.9 noch andere Wake-Words gibt. Kann man die 1.9 irgendwie auf den Client bringen?

Die neue Version 0.24.0 des SEPIA Client (dev branch) hat ein massiv verbessertes Audio handling und auch Support für Porcupine 1.9 :slightly_smiling_face:. Ich hoffe dass ich den Release zeitnah hinbekomme :grin:

Ansonsten top Projekt, v.a. dass ich damit schon überall im Haus, kontext-abhängig Dinge steuern kann ist großartig.

Freut mich :-)

Was mir dazu noch einfällt: wie wird sich SEPIA verhalten, wenn zwei Clients gleichzeitig das Wake-Word hören?

Ja, das ist leider noch nicht optimiert. Aktuell triggern einfach beide :see_no_evil: . Es gibt verschiedene Ansatzpunkte, um das zu verbessern. Der Oben genannte CLEXI Server könnte zum Beispiel auf beide Wake-Word Events hören und versuchen einen der beiden Clients "abzuwürgen". Oder der Chat Server könnte den Input des zweiten Clients ignorieren wenn beide fast gleichzeitig kommen.

cratoo commented 3 years ago

Der CLEXI Server, der auf dem SEPIA Client läuft kann die Events der Zustände auslesen und theoretisch auch an jeden verbundenen Client weitergeben über eine WebSocket Verbindung. Für Javascript gibt es dazu eine Library die auch im SEPIA Control-HUB integriert ist. Was gemacht werden müsste ist entweder ein kleines Tool zu schreiben was sich mit CLEXI verbindet und die Events in MQTT Events umwandelt oder eventuell eine Extension für CLEXI, die das direkt intern macht. Ich würde gerne helfen dabei, stecke aber gerade noch mitten im Umbau des STT Servers.

Dann schau ich mir mal an, ob ich ein kleines Tool hinbekomme oder aber mich an eine Extension wage.

Die neue Version 0.24.0 des SEPIA Client (dev branch) hat ein massiv verbessertes Audio handling und auch Support für Porcupine 1.9 🙂. Ich hoffe dass ich den Release zeitnah hinbekomme 😁

Das wäre natürlich top und würde hier den WAF immenz erhöhen. Hier freut sich jemand auf "Jarvis mach das Licht aus" ;) Gilt die Verbesserung auch für einen fließenderen Übergang zwischen Wake-Word und "Listening"?

Ja, das ist leider noch nicht optimiert. Aktuell triggern einfach beide 🙈 . Es gibt verschiedene Ansatzpunkte, um das zu verbessern. Der Oben genannte CLEXI Server könnte zum Beispiel auf beide Wake-Word Events hören und versuchen einen der beiden Clients "abzuwürgen". Oder der Chat Server könnte den Input des zweiten Clients ignorieren wenn beide fast gleichzeitig kommen. Schlussendlich wird da nur das Testen bleiben, um zu schauen, wie sensibel die Mikros überhaupt sind.

fquirin commented 3 years ago

Gilt die Verbesserung auch für einen fließenderen Übergang zwischen Wake-Word und "Listening"?

Theoretisch ja, zumindest wenn die Kombination mit dem eigenen SEPIA STT Server genutzt wird. Das neue Audio Interface ist so gebaut, dass der Übergang von Wake-Word zum STT nahtlos passieren kann :slightly_smiling_face: . Vermutlich werde ich das aber noch nicht fertig haben für das nächste Update, denn es müssen dazu intern ein paar Events im Client angepasst werden und das wird vermutlich eine längere Testphase erfordern :sweat_smile: .

Smarthome-Creator commented 3 years ago

@cratoo, könntest du das Tool, falls du es hinbekommst irgendwie bereitstellen? Ich nutze S.E.P.I.A auf einem Respeaker Core V2 ziemlich erfolgreich und würde gerne ebenso wie du auch gerne den Status am Pixelring sehen. Hauptsächlich aus dem Grund das ich nicht immer ewiglange Antworten hören möchte sondern die Audioausgabe bei belieben stumm schalten möchte. Quasi Stand By gelb, Wake Word erkannt blau, zuhören grün und ausführen quais rot oder sowas halt. Im Idealfall wird nicht der ganze Ring beleuchtet sondern nur die LED's aus dessen Richtung das Mic getriggert wird. So ähnlich wie bei einem Amazon Dot.

Gruß

cratoo commented 3 years ago

Leider bin ich bisher nicht weit gekommen. Ich wollte mich per websocket an den clexi Server hängen, aber bisher klappt nicht mal die websocket Verbindung erfolgreich, geschweige denn, dass ich einen sinnvoll Status bekäme... Ich war zudem auch nicht besonders motiviert weiterzumachen, da mich die Wake-Word Sensitivität meines 4-Mic Array ziemlich enttäuscht. Hast du Einstellungen geändert (Wakeword?, Mic Lautstärke im alsamixer, wake word sensitivity oder anderes?) Bis zu welcher Entfernung geht es reproduzierbar gut?

Smarthome-Creator commented 3 years ago

Tatsächlich habe ich gar nicht viel an den Einstellungen verändert. Die wake word sensitivity habe ich auf 0.9 gestellt. Wake word ist nach wie vor Hey Sepia, da ich auf den nächsten Release warte um dann Computer als wake word nutzen zu können. Eine Sache habe ich tatsächlich festgestellt. Man muss die Betonung sehr auf "Pi-A" legen damit das Mic wie gewünscht triggert. Das ist aber auch in der App so. Ich bin schon stark am überlegen einen Bluetooth Speaker zu testen dessen Mic genutzt werden kann. Generell muss ich aber sagen das spätestens nach dem dritte "Hey Sepia" das Mic zuverlässig triggert, allerdings kommt manchmal erst ein oder zwei Minuten später eine Antwort da ich halt nicht sehe ob sie mich verstanden hat und ich dann schon wieder 3x "Hey Sepia" gesagt habe. :D Man darf halt immer nie vergessen das Florian das Ding hier alleine in seiner Freizeit zusammenbaut und dafür läuft es schon verdammt gut. Ich kenne keinen anderen "Sprachassi" der so gut skalierbar ist wie Sepia.

Warten wir mal den nächsten Release ab und schauen mal wie dann die Audioeigenschaften verbessert wurden. Den Status über die LED's zu visualiesieren wäre halt noch das Sahnehäubchen.

fquirin commented 3 years ago

Der aktuelle Release ist wirklich eine harte Nuss, sorry dass es so lange dauert, aber er wird das Fundament legen für zukünftige Entwicklungen im Bereich Wake-Word und Spracherkennung, deswegen will ich sicher sein, dass alles ordentlich implementiert ist und zuverlässig funktioniert. Bei all den Experimenten der letzten Wochen/Monate (o_O) habe ich festgestellt, dass eines der Hauptprobleme beim Wake-Word oft eine zu niedrige Lautstärke ist. In der neuen Version kann man deshalb diverse Tests machen und den Gain Faktor selber einstellen. Im Optimalfall sollte das die Erkennungsrate sofort verbessern, im schlechtesten Fall zeigt es hoffentlich wenigstens das Problem auf :sweat_smile: .

Leider bin ich bisher nicht weit gekommen. Ich wollte mich per websocket an den clexi Server hängen, aber bisher klappt nicht mal die websocket Verbindung erfolgreich, geschweige denn, dass ich einen sinnvoll Status bekäme...

Wenn du ein Grundgerüst hast, dass die LEDs steuert könnte ich vielleicht bei der Verbindung zu CLEXI helfen :-)

cratoo commented 3 years ago

Man darf halt immer nie vergessen das Florian das Ding hier alleine in seiner Freizeit zusammenbaut und dafür läuft es schon verdammt gut. Ich kenne keinen anderen "Sprachassi" der so gut skalierbar ist wie Sepia.

Um es ganz klar zu sagen: Ich ziehe meinen Hut vor der bisherigen Arbeit von Florian. Und wie angedeutet, sehe ich das Problem eher an der Hardware/Einstellungs-Kombi. Bei meinen Tests mit Project Alice mit derselben Hardware, war die Wake-Word Erkennung auch nicht wirklich besser. Gleichzeitig bietet mir SEPIA viel direkteren Zugang zu den Dingen, die mir schon lange im Kopf rumschweben. Insofern 1a Arbeit, was SEPIA bisher schon kann.

Bei all den Experimenten der letzten Wochen/Monate (o_O) habe ich festgestellt, dass eines der Hauptprobleme beim Wake-Word oft eine zu niedrige Lautstärke ist.

Da bin ich sehr gespannt :)

Wenn du ein Grundgerüst hast, dass die LEDs steuert könnte ich vielleicht bei der Verbindung zu CLEXI helfen :-)

In meiner naiven Vorstellung ist das Ansteuern der LEDs nur ein Ändern des entsprechenden MQTT topics, auf das Hermes lauscht. Daher hatte ich mich da noch nicht rangemacht. Den MQTT und Hermes Aufbau hab ich mir zudem bei einem Test zerstört, da mir der entsprechende Raspi vom Schrank auf den SD-Karten Slot fiel und sowohl der Pi als auch die SD-Karte hinüber sind. Hat aber auch was Gutes. Ich muss entsprechend Hermes und MQTT from scratch selbst aufsetzen ;)

Smarthome-Creator commented 3 years ago

@fquirin, ich bin schon sehr auf die neue Version gespannt.

cratoo commented 3 years ago

@fquirin habe jetzt doch mal mehr damit rumgespielt und mir scheint es so, dass ich als client nicht authentifiziert bin. Mein python script kann sich per websocket verbinden, aber sobald ich z.B. im HUB manuell trigger, dass SEPIA "listening" wird die Verbindung meines Clients seitens Clexi geschlossen. Ich tippe drauf, dass das daran liegt, dass ich mich mit der "clexi-123" "anmelden" müsste. Im Source habe ich das send("welcome", gefunden und habe versucht das manuell zu schicken, Clexi antwortet mir auch {"type":"welcome","code":200,"info":{"version":"CLEXI Node.js server v0.8.2","xtensions":{"clexi-broadcaster":{"active":true},"clexi-http-events":{"active":true},"runtime-commands":{"active":true}}}}

Danach wird die Verbindung aber offenbar seitens Clexi geschlossen? Hab ich denn die Anmeldung offensichtlich (wenn man sich die Antwort ansieht) richtig gemacht?

cratoo commented 3 years ago

Ok vergiss meinen letzten Kommentar. Ich hatte die Python Websockets API falsch verstanden. Wenn ich in einer Schleife auf Events warte bekomme ich die json Events, die ich auch auf der Client Connection Site sehe. Die Clexi Anbindung steht also. Dann mal an den "vermeintlich" leichten Part bzgl MQTT und Hermes ;)

Smarthome-Creator commented 3 years ago

@cratoo , coole Sache, ich bin gespannt ob's klappt.

royrogermcfreely commented 2 years ago

hey cratoo,

hattest du erfolg bzgl. der hermesled anbindung?

/roy

fquirin commented 2 years ago

Kurze Info: Der nächste release wird LED arrays und GPIO Ansteuerung unterstützen via CLEXI 0.9.0 :-)

fquirin commented 2 years ago

LED Steuerung (SPI und USB) und Hardware Button Support (GPIO Pins) ist jetzt verfügbar via SEPIA-Home v2.6.1 und CLEXI v0.9.0 :slightly_smiling_face: