openWakeWord est une bibliothèque open source permettant de détecter les mots d'activation courants tels que « alexa », « hey mycroft », « hey jarvis » et d'autres modèles. Rhasspy est un assistant vocal open source.
Ce projet exécute openWakeWord en tant que service autonome, reçoit l'audio de Rhasspy via UDP, détecte lorsqu'un mot d'éveil est prononcé et informe Rhasspy à l'aide du protocole Hermes MQTT.
J'exécute Rhasspy en mode Base/Satellite. Actuellement, chaque satellite capture l'audio, effectue la détection du mot d'activation localement et diffuse l'audio vers la base qui fait tout le reste. Les satellites Pi4 exécutent le conteneur Rhasspy Docker, lancé avec compose. Le conteneur Base Rhasspy fonctionne sur un i7 plus puissant (exécute d'autres logiciels de domotique.)
L'exécution d'openWakeWord dans Docker facilite la distribution et la configuration (dépendances Python), permet à openWakeWord de se développer à un rythme différent de celui de Rhasspy (au lieu d'être fourni et publié avec Rhasspy.) Une seule instance d'openWakeWord centralise la configuration et autorise des satellites de moindre puissance (par exemple les ESP32) options de mots de réveil plus riches.
À l'avenir, je prévois d'ajouter une interface utilisateur Web pour la configuration : quels mots détecter, seuils, modèles de vérificateur personnalisés et peut-être identification du locuteur. Il pourrait également inclure une visualisation en direct pour les tests et les diagnostics.
Utilisation de la CLI Docker
docker run -d --name openwakeword -p 12202:12202/udp -v /path/to/config/:/config dalehumby/openwakeword-rhasspy Dans docker-compose.yml (ou un fichier de pile Docker Swarm)
openwakeword :
image : dalehumby/openwakeword-rhasspy
restart : always
ports :
- " 12202:12202/udp "
volumes :
- /path/to/config:/configPour les tests et l'expérimentation, vous pouvez exécuter ce projet localement :
git clone [email protected]:dalehumby/openWakeWord-rhasspy.gitpython3 -m venv envsource env/bin/activatepip3 install -r requirements.txtpython3 detect.py config.yaml , par exemple nano /path/to/config/config.yamlconfig.yaml.example dans config.yaml pour commencer Rhasspy diffuse l'audio de son microphone vers openWakeWord sur le réseau en utilisant le protocole UDP. Sur chaque appareil Rhasspy auquel est connecté un micro (généralement un satellite), allez dans Rhasspy - Paramètres - Enregistrement audio et dans UDP Audio (Output) insérez l'adresse IP de l'hôte qui exécute openWakeWord et choisissez un numéro de port, commençant généralement à 12202 . Si vous possédez plusieurs appareils Rhasspy, chaque appareil a besoin de son propre numéro de port, 12202 , 12203 , 12204 , etc.

Dans openWakeWord config.yaml , udp_ports a des paires kay:value. La clé est le siteId affiché en haut de Rhasspy - Paramètres. Il peut s'agir de : base , satellite , kitchen ou bedroom , etc. La valeur est le port répertorié sous Rhasspy - Paramètres - Enregistrement audio.
udp_ports :
base : 12202
kitchen : 12203
bedroom : 12204Si vous utilisez Docker, vous devez ouvrir les ports pour autoriser le trafic réseau UDP dans le conteneur.
Utilisation de la CLI Docker
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 Ou dans 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 informe Rhasspy qu'un mot d'activation a été prononcé à l'aide du protocole Hermes MQTT. Le courtier MQTT doit être accessible à la fois par Rhasspy et openWakeWord. Le courtier MQTT interne de Rhasspy n'est pas accessible depuis l'extérieur de Rhasspy, vous devrez donc exécuter un courtier partagé, comme Mosquitto.
Une fois le courtier exécuté, accédez à Rhasspy - Paramètres - MQTT. Choisissez Courtier External , définissez l'adresse IP de l' Host sur lequel le courtier s'exécute, le numéro Port et le Username / Password si nécessaire, semblable à :

openWakeWord config.yaml aurait alors :
mqtt :
broker : 10.0.0.10
port : 1883
username : yourusername # Delete row if not required
password : yourpassword # Delete row if not required
Sur chaque Rhasspy, dans Rhasspy - Paramètres - Wake Word, définissez Hermes MQTT , comme

openWakeWord écoute les mots d'activation comme "alexa", "hey mycroft", "hey jarvis" et d'autres. Utilisez model_names pour spécifier les mots d'activation à écouter. (Voir la documentation sur les modèles pré-entraînés et les model_names à utiliser.)
Supprimez tous les mots d'activation que vous ne souhaitez pas activer. Ou supprimez toute la section model_names pour utiliser tous les modèles pré-entraînés.
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 Les autres paramètres oww garantissent que Rhasspy n'est activé qu'une seule fois par mot d'activation et aident à réduire les fausses activations.
Dans l'exemple ci-dessus, les 3 derniers échantillons audio reçus via UDP sont moyennés ensemble, et si la confiance moyenne qu'un mot d'éveil a été prononcé est supérieure à 0,7 (70 %), alors Rhasspy en est informé. Rhasspy ne sera plus notifié tant que la confiance moyenne ne sera pas descendue en dessous de 0,2 (20 %), c'est-à-dire que le mot d'activation sera terminé.
Des paramètres de détection d'activité vocale (VAD) et de suppression du bruit sont également fournis. (Voir les recommandations d'utilisation d'openWakeWord.)
N'hésitez pas à ouvrir un problème si vous rencontrez un problème, avez besoin d'aide ou avez une idée. Les PR sont toujours les bienvenus.