openWakeWord ist eine Open-Source-Bibliothek zum Erkennen gängiger Weckwörter wie „alexa“, „hey mycroft“, „hey jarvis“ und anderer Modelle. Rhasspy ist ein Open-Source-Sprachassistent.
Dieses Projekt führt openWakeWord als eigenständigen Dienst aus, empfängt Audio von Rhasspy über UDP, erkennt, wenn ein Wake-Word gesprochen wird, und benachrichtigt Rhasspy mithilfe des Hermes MQTT-Protokolls.
Ich verwende Rhasspy im Basis-/Satellitenmodus. Derzeit erfasst jeder Satellit Audio, führt die Wake-Word-Erkennung lokal durch und streamt Audio an die Basis, die alles andere erledigt. Auf den Pi4-Satelliten wird der Rhasspy-Docker-Container ausgeführt, der mit Compose gestartet wird. Der Base Rhasspy-Container läuft auf einem leistungsstärkeren i7 (führt andere Hausautomationssoftware aus).
Das Ausführen von openWakeWord in Docker vereinfacht die Verteilung und Einrichtung (Python-Abhängigkeiten) und ermöglicht die Entwicklung von openWakeWord in einem anderen Tempo als Rhasspy (anstatt mit Rhasspy gebündelt und veröffentlicht zu werden). Eine einzige Instanz von openWakeWord zentralisiert die Konfiguration und ermöglicht Satelliten mit geringerer Leistung (z. B. ESP32s). Umfangreichere Wake-Word-Optionen.
In Zukunft plane ich, eine Web-Benutzeroberfläche für die Konfiguration hinzuzufügen: welche Wörter erkannt werden sollen, Schwellenwerte, benutzerdefinierte Verifizierermodelle und vielleicht die Sprecheridentifikation. Es könnte auch eine Live-Visualisierung für Tests und Diagnosen umfassen.
Verwenden der Docker-CLI
docker run -d --name openwakeword -p 12202:12202/udp -v /path/to/config/:/config dalehumby/openwakeword-rhasspy In docker-compose.yml (oder einer Docker Swarm-Stack-Datei)
openwakeword :
image : dalehumby/openwakeword-rhasspy
restart : always
ports :
- " 12202:12202/udp "
volumes :
- /path/to/config:/configZum Testen und Experimentieren können Sie dieses Projekt lokal ausführen:
git clone [email protected]:dalehumby/openWakeWord-rhasspy.gitpython3 -m venv envsource env/bin/activatepip3 install -r requirements.txtpython3 detect.py aus config.yaml , zum Beispiel nano /path/to/config/config.yamlconfig.yaml.example in config.yaml ein, um zu beginnen Rhasspy streamt Audio von seinem Mikrofon über das Netzwerk mithilfe des UDP-Protokolls an openWakeWord. Gehen Sie auf jedem Rhasspy-Gerät, an das ein Mikrofon angeschlossen ist (normalerweise ein Satellit), zu Rhasspy – Einstellungen – Audioaufzeichnung und geben Sie unter UDP Audio (Output) die IP-Adresse des Hosts ein, auf dem openWakeWord ausgeführt wird, und wählen Sie eine Portnummer, normalerweise beginnend bei 12202 . Wenn Sie mehrere Rhasspy-Geräte haben, benötigt jedes Gerät seine eigene Portnummer, 12202 , 12203 , 12204 usw.

In openWakeWord config.yaml hat udp_ports kay:value-Paare. Der Schlüssel ist die siteId , die oben in Rhasspy – Einstellungen angezeigt wird. Es kann sein: base , satellite , kitchen oder bedroom usw. Der Wert ist der unter Rhasspy – Einstellungen – Audioaufnahme aufgeführte Port.
udp_ports :
base : 12202
kitchen : 12203
bedroom : 12204Wenn Sie Docker verwenden, müssen Sie die Ports öffnen, um UDP-Netzwerkverkehr in den Container zu ermöglichen.
Verwenden der Docker-CLI
docker run -d --name openwakeword -p 12202:12202/udp -p 12203:12203/udp -p 12204:12204/udp -v /path/to/config/:/config dalehumby/openwakeword-rhasspy Oder in docker-compose.yml
openwakeword :
image : dalehumby/openwakeword-rhasspy
restart : always
ports :
- " 12202:12202/udp " # base
- " 12203:12203/udp " # kitchen
- " 12204:12204/udp " # bedroom
# ... etc
volumes :
- /path/to/config:/configopenWakeWord benachrichtigt Rhasspy über das Hermes MQTT-Protokoll, dass ein Wake-Word gesprochen wurde. Der MQTT-Broker muss sowohl für Rhasspy als auch für openWakeWord zugänglich sein. Der interne MQTT-Broker von Rhasspy ist von außerhalb von Rhasspy nicht erreichbar, daher müssen Sie einen gemeinsamen Broker wie Mosquitto betreiben.
Sobald der Broker läuft, gehen Sie zu Rhasspy – Einstellungen – MQTT. Wählen Sie „ External Broker“, legen Sie die IP-Adresse des Host fest, auf dem der Broker ausgeführt wird, die Port und bei Bedarf den Username / Password , ähnlich wie:

openWakeWord config.yaml hätte dann:
mqtt :
broker : 10.0.0.10
port : 1883
username : yourusername # Delete row if not required
password : yourpassword # Delete row if not required
Stellen Sie auf jedem Rhasspy in Rhasspy – Einstellungen – Wake Word Hermes MQTT ein, z

openWakeWord wartet auf Weckwörter wie „alexa“, „hey mycroft“, „hey jarvis“ und andere. Verwenden Sie model_names , um anzugeben, auf welche Aktivierungswörter geachtet werden soll. (Siehe Dokumentation zu vorab trainierten Modellen und welche model_names verwendet werden sollen.)
Löschen Sie alle Aktivierungswörter, die Sie nicht aktivieren möchten. Oder entfernen Sie den gesamten Abschnitt model_names um alle vorab trainierten Modelle zu verwenden.
oww :
model_names : # From https://github.com/dscripka/openWakeWord/blob/main/openwakeword/__init__.py
- alexa # Delete to ignore this wake-word
- hey_mycroft
- hey_jarvis
- timer
- weather
activation_samples : 3 # Number of samples in moving average
activation_threshold : 0.7 # Trigger wakeword when average above this threshold
deactivation_threshold : 0.2 # Do not trigger again until average falls below this threshold
# OWW config, see https://github.com/dscripka/openWakeWord#recommendations-for-usage
vad_threshold : 0.5
enable_speex_noise_suppression : false Die anderen oww -Einstellungen stellen sicher, dass Rhasspy nur einmal pro Aktivierungswort aktiviert wird, und tragen dazu bei, Fehlaktivierungen zu reduzieren.
Im obigen Beispiel werden die letzten drei über UDP empfangenen Audio-Samples gemittelt, und wenn die durchschnittliche Konfidenz, dass ein Weckwort gesprochen wurde, über 0,7 (70 %) liegt, wird Rhasspy benachrichtigt. Rhasspy wird nicht erneut benachrichtigt, bis die durchschnittliche Konfidenz unter 0,2 (20 %) fällt, dh das Wake-Word beendet ist.
Einstellungen zur Sprachaktivitätserkennung (VAD) und Geräuschunterdrückung sind ebenfalls vorhanden. (Siehe die Nutzungsempfehlungen von openWakeWord.)
Wenn Sie ein Problem haben, Hilfe benötigen oder eine Idee haben, können Sie gerne ein Problem eröffnen. PRs sind immer willkommen.