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:/config
Zum Testen und Experimentieren können Sie dieses Projekt lokal ausführen:
git clone [email protected]:dalehumby/openWakeWord-rhasspy.git
python3 -m venv env
source env/bin/activate
pip3 install -r requirements.txt
python3 detect.py
aus config.yaml
, zum Beispiel nano /path/to/config/config.yaml
config.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 : 12204
Wenn 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:/config
openWakeWord 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.