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:/config
Pour les tests et l'expérimentation, vous pouvez exécuter ce projet localement :
git clone [email protected]:dalehumby/openWakeWord-rhasspy.git
python3 -m venv env
source env/bin/activate
pip3 install -r requirements.txt
python3 detect.py
config.yaml
, par exemple nano /path/to/config/config.yaml
config.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 : 12204
Si 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:/config
openWakeWord 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.