openWakeWord es una biblioteca de código abierto para detectar palabras de activación comunes como "alexa", "hey mycroft", "hey jarvis" y otros modelos. Rhasspy es un asistente de voz de código abierto.
Este proyecto ejecuta openWakeWord como un servicio independiente, recibe audio de Rhasspy a través de UDP, detecta cuando se pronuncia una palabra de activación y notifica a Rhasspy utilizando el protocolo Hermes MQTT.
Ejecuto Rhasspy en modo Base/Satélite. Actualmente, cada satélite captura audio, detecta la palabra de activación localmente y transmite audio a la Base, que hace todo lo demás. Los satélites Pi4 ejecutan el contenedor Rhasspy Docker, lanzado con compose. El contenedor Base Rhasspy se ejecuta en un i7 más potente (ejecuta otro software de automatización del hogar).
La ejecución de openWakeWord en Docker facilita la distribución y la configuración (dependencias de Python), permite que openWakeWord se desarrolle a un ritmo separado de Rhasspy (en lugar de incluirlo y publicarlo con Rhasspy). Una única instancia de openWakeWord centraliza la configuración y permite satélites de menor potencia (por ejemplo, ESP32). opciones de palabras de activación más ricas.
En el futuro planeo agregar una interfaz de usuario web para la configuración: qué palabras detectar, umbrales, modelos de verificación personalizados y tal vez identificación del hablante. También podría incluir visualización en vivo para pruebas y diagnósticos.
Usando la CLI de Docker
docker run -d --name openwakeword -p 12202:12202/udp -v /path/to/config/:/config dalehumby/openwakeword-rhasspy
En docker-compose.yml
(o un archivo de pila Docker Swarm)
openwakeword :
image : dalehumby/openwakeword-rhasspy
restart : always
ports :
- " 12202:12202/udp "
volumes :
- /path/to/config:/config
Para realizar pruebas y experimentar, puede ejecutar este proyecto localmente:
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
, por ejemplo nano /path/to/config/config.yaml
config.yaml.example
en config.yaml
para comenzar Rhasspy transmite audio desde su micrófono a openWakeWord a través de la red utilizando el protocolo UDP. En cada dispositivo Rhasspy que tenga un micrófono conectado (normalmente un satélite), vaya a Rhasspy - Configuración - Grabación de audio y en UDP Audio (Output)
inserte la dirección IP del host que ejecuta openWakeWord y elija un número de puerto, que normalmente comienza en 12202
. Si tiene varios dispositivos Rhasspy, cada dispositivo necesita su propio número de puerto, 12202
, 12203
, 12204
, etc.
En openWakeWord config.yaml
, udp_ports
tiene pares kay:value. La clave es el siteId
que se muestra en la parte superior de Rhasspy - Configuración. Puede ser: base
, satellite
, kitchen
o bedroom
, etc. El valor es el puerto que aparece en Rhasspy - Configuración - Grabación de audio.
udp_ports :
base : 12202
kitchen : 12203
bedroom : 12204
Si está utilizando Docker, debe abrir los puertos para permitir el tráfico de red UDP en el contenedor.
Usando la CLI de 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
O en 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 notifica a Rhasspy que se ha pronunciado una palabra de activación utilizando el protocolo Hermes MQTT. El corredor MQTT debe ser accesible tanto para Rhasspy como para openWakeWord. No se puede acceder al corredor MQTT interno de Rhasspy desde fuera de Rhasspy, por lo que necesitará ejecutar un corredor compartido, como Mosquitto.
Una vez que el corredor se esté ejecutando, vaya a Rhasspy - Configuración - MQTT. Elija Broker External
, establezca la dirección IP del Host
en el que se ejecuta el broker, el número Port
y el Username
/ Password
si es necesario, similar a:
openWakeWord config.yaml
tendría entonces:
mqtt :
broker : 10.0.0.10
port : 1883
username : yourusername # Delete row if not required
password : yourpassword # Delete row if not required
En cada Rhasspy, en Rhasspy - Configuración - Wake Word, configure Hermes MQTT
, como
openWakeWord escucha palabras de activación como "alexa", "hey mycroft", "hey jarvis" y otras. Utilice model_names
para especificar qué palabras de activación escuchar. (Consulte la documentación de Modelos previamente entrenados y qué model_names
usar).
Elimina cualquier palabra de activación que no quieras activar. O elimine toda la sección model_names
para usar todos los modelos previamente entrenados.
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
Las otras configuraciones oww
garantizan que Rhasspy solo se active una vez por palabra de activación y ayudan a reducir las activaciones falsas.
En el ejemplo anterior, las últimas 3 muestras de audio recibidas a través de UDP se promedian juntas, y si la confianza promedio de que se ha pronunciado una palabra de activación es superior a 0,7 (70%), se notifica a Rhasspy. Rhasspy no será notificado nuevamente hasta que la confianza promedio caiga por debajo de 0,2 (20%), es decir, que la palabra de activación haya finalizado.
También se proporcionan configuraciones para detección de actividad de voz (VAD) y supresión de ruido. (Consulte las recomendaciones de uso de openWakeWord).
No dudes en abrir un problema si tienes un problema, necesitas ayuda o tienes una idea. Las relaciones públicas siempre son bienvenidas.