Hm. Sowas in der Art hab ich meinem Symcon schon beigebracht.
Setzt aber einen Server mit einer passenden Grafikkarte voraus - hab mir dafür eine günstige Nvidia Tesla in der Bucht geholt. Stromverbrauch: ca. +25 Watt.
Aber von vorn. Ich nutze „Willow“ und „Whisper“ (googelt nach „ESP willow“ - sollte der erste Treffer sein).
Willow ist als Docker-Container verfügbar und ist am Ende ein Sprach-zu-Text und auch ein Text-zu-Sprache-System. Arbeitet mit einer einfachen http API, man postet ein (aufgenommenes) Audiofile und bekommt den erkannten Text zurück. Deutsch und englisch kein Problem - geht nicht gut, geht erschreckend gut!
Umgekehrt geht’s genauso: man postet Text an die API und bekommt ein Audiofile mit der Sprachausgabe zurück. Allerdings bekomme ich nur englische Sprachausgabe hin - das ist etwas tricky, der halbwegs verständliche deutsche Sätze zu entlocken. Für die Recherche, wie man die Sprachausgabe deutsch hinbekommt, fehlte mir bisher leider die Zeit.
Als Clients habe ich mir ein paar ESP32 Box S3 geholt, das sind so Mini-Touchscreens mit Lautsprecher, zwei Mikros und noch ein paar mehr Funktionen, die ich aber hier gar nicht brauche.
Darin ist ein potenter ESP32 eingebaut, der auch die WLAN-Verbindung herstellt.
Auf den Teilen läuft „Willow“, das ist eine Firmware speziell für den ESP32 Box und Whisper als Backend. Kommt ebenfalls erst einmal als Docker-Container, bietet eine Web-Admin-Oberfläche, über die auch die ESPs mit der Firmware geflasht werden können - bsw. einfach per USB oder - sobald Willow einmal drauf ist - auch per WLAN direkt aus der Weboberfläche heraus.
In der Oberfläche kann man dann auch noch ein paar Parameter einstellen wie Mikrofonempfindlichkeit und sowas.
Das Ansprechen der Whisper-API übernimmt Willow, man muss nur die Adresse der API konfigurieren.
Hab das jetzt schon knapp zwei Jahre laufen, alle Details hab ich leider nicht mehr im Kopf.
Irgendwo hab ich aber noch einen Webserver dazwischen gebraucht, der hat am Ende nur den Zweck, mir den Namen bzw. die IP des Willow-Clients aufzulösen, auf welchem ein Sprachbefehl entgegen genommen wurde. Willow selbst liefert nur den erkannten Text zurück.
Naja, erkannter Text und Client landen dann im Symcon als Variable (per Webhook oder API), worauf ich dann wieder mit Symcon Ereignissen reagieren kann.
Am Ende hängen dann zwei Skripte dahinter, eines beinhaltet lediglich die Definitionen der Sprachbefehle, Schlüsselwörter, Räume, auszulösende Aktionen in Form von Symcon-Skript-Ids sowie mögliche Antworten. Das zweite Skript beinhaltet dann nur noch die Logik.
Am Ende arbeite ich da mit Schlüsselwörtern, wobei durch die mitgelieferte Client-Info eine „Übersetzung“ in den Raum erfolgt, in welchem der Client steht. Um bsw. Licht einzuschalten, müssen die Schlüsselwörter „Licht“, „an“ oder „ein“ sowie eine Rauminfo erkannt werden. „Wohnzimmer“ würde als Sprachbehel erkannt und auch zur Zuordnung „Wohnzimmer“ führen, so kann ich bsw. auch im Schlafzimmer den Sprachbefehle „Wohnzimmer Licht an“ absetzen. Setze ich im Schlafzimmer nur „Licht an“ ab, also ohne dass ich eine Rauminfo als Sprachbefehl mitgebe, erfolgt die Raumzuordnung anhand des Clients - der ja im Schlafzimmer stehen muss - so dass damit auch das Licht im Schlafzimmer geschaltet wird.
Durch die Schlüsselwörter kann ich auch sagen: „Alexa, etz schalt halt endlich mal das licht an!“ und das funzt dann auch. Oder „Alexa, bitte mach mir das licht an!“ (‚Alexa‘ ist neben ‚Hi ESP‘ das einzig brauchbare Wakeword in Willow).
Natürlich sind dann auch Spielerein möglich wie „Alexa, mach mal die Garage zu!“ und, weil die Garage bereits zu ist, antwortet Willow dann halt „Garage ist doch schon zu, Du Vollpfosten!“.
Btw: Garagen oder Türen oder sonstige sicherheitsrelevante Elemente sollte man grundsätzlich nicht per Sprache bedienen - ein Einbrecher braucht ja bsw. sonst nur durchs Fenster den Sprachbefehl „Haustür auf!“ absetzen und schon ist er drin. Mit einem Knochenschalllautsprecher geht das auch durchs geschlossene Fenster, wenn man den Lausprecher an die Fensterscheibe hält.
Die möglichen Antworten sind ebenfalls im Konfigskript gespeichert. Die Sprachantwort am jeweiligen Willow-Endgerät triggert Symcon über einen http-Aufruf - auch dafür benötige ich natürlich die Info, welches Willow-Gerät denn überhaupt den Sprachbefehl aufgenommen hat.
Bei mir sind die Antworten immer gleich - lässt sich natürlich beliebig ausbauen. Man könnte bsw. freundliche Antworten geben lassen, wenn das Schlüsselwort „bitte“ mit erkannt wurde und pampige bei Wörtern wie „endlich“ oder „wird’s bald“ etc. im erkannten Sprachbefehl.
Manchmal labert die bei mir auch ohne abgesetzten Befehl los - aber schon gewollt! Bsw. lasse ich Symcon anhand Werten aus Smartmetern erkennen, wann bei uns im Haus Kaffee gekocht wird (bestimmter Stromverbrauch auf einer bestimmten Phase über einen bestimmten Zeitraum) und dann labern bestimmte Willows: „Kaffee wird gekocht! Lecker!“
Whisper und WIllow sind kostenlos - zumindest für den Privatgebrauch. Habe mich nicht wirklich mit den Lizenzbedingungen auseinandergesetzt.
So eine ESP32 Box hab ich für rund 50 Euro bekommen, Stromverbrauch hält sich auch in Grenzen (habe 4-5 Watt in Erinnerung). Das Ganze läuft halt komplett lokal ohne Cloud und soweit ich mich erinnere, gibt es auch Bots als Container, also so Sprachbots zum Unterhalten.
Die Keyword-Erkennung erfolgt im ESP32 lokal, erst dann nimmt er auf und streamt es zu Whisper. Die Spracherkennungs-KI läuft also wirklich nur, wenn sie gebraucht wird. Text-to-Speech-Audiodateien werden sogar gecached - wirklich erstellt werden die nur beim ersten Aufruf.
Ich hab mir das Ganze eigenlich nur mal anschauen wollen, bin kein wirklicher Fan von „KI überall“ und Spracherkennung. Aber es funktioniert tatsächlich erschreckend gut!
Die Mikros der ESP32-Boxen sind erstaunlich gut, funktioniert aus mehreren Metern Entfernung in normaler Unterhaltungslautstärke. Leider wird zwar ab und an auch das Keyword erkannt, wenn TV-Sendungen oder Filme laufen und ein Willow-Gerät direkt neben dem Fernseher steht, da muss man halt ein bischen spielen mit der Mikro-Empfindlichkeit oder auch einfach dem Aufstellort. Wirklich oft kommt das auch nicht vor. Mit entsprechender Geduld bei der Einrichtung (die ich nicht wirklich habe), dürften falsche Wakeworderkennungen meines Erachtens auch komplett wegzubekommen sein.
Die Sprach-zu-Text-Umwandlung mit Whisper geht rasend schnell, solange man eine passende GPU (Grafikkarte) hat. Ohne GPU hat die Erkennung dann doch 7-8 Sekunden gedauert, mit der GPU jetzt weit unter einer Sekunde - gefühlt ist da gar kein Delay.