openWakeWord é uma biblioteca de código aberto para detectar palavras de ativação comuns como "alexa", "hey mycroft", "hey jarvis" e outros modelos. Rhasspy é um assistente de voz de código aberto.
Este projeto executa o openWakeWord como um serviço independente, recebe áudio do Rhasspy via UDP, detecta quando uma palavra de ativação é falada e notifica o Rhasspy usando o protocolo Hermes MQTT.
Eu executo o Rhasspy no modo Base/Satélite. Atualmente cada Satélite captura áudio, faz a detecção de wake word localmente e transmite áudio para a Base que faz todo o resto. Os satélites Pi4 executam o contêiner Rhasspy Docker, lançado com o compose. O contêiner Base Rhasspy é executado em um i7 mais poderoso (executa outro software de automação residencial).
A execução do openWakeWord no Docker facilita a distribuição e configuração (dependências do Python), permite que o openWakeWord se desenvolva em um ritmo separado do Rhasspy (em vez de empacotado e lançado com o Rhasspy). Uma única instância do openWakeWord centraliza a configuração e permite satélites de menor potência (por exemplo, ESP32s) opções mais ricas de wake word.
No futuro, pretendo adicionar uma UI web para configuração: quais palavras detectar, limites, modelos de verificador personalizados e talvez identificação de alto-falante. Também poderia incluir visualização ao vivo para testes e diagnósticos.
Usando Docker CLI
docker run -d --name openwakeword -p 12202:12202/udp -v /path/to/config/:/config dalehumby/openwakeword-rhasspy
Em docker-compose.yml
(ou um arquivo de pilha Docker Swarm)
openwakeword :
image : dalehumby/openwakeword-rhasspy
restart : always
ports :
- " 12202:12202/udp "
volumes :
- /path/to/config:/config
Para testes e experimentação você pode executar este projeto 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 exemplo nano /path/to/config/config.yaml
config.yaml.example
em config.yaml
para começar O Rhasspy transmite áudio de seu microfone para o openWakeWord pela rede usando o protocolo UDP. Em cada dispositivo Rhasspy que possui um microfone conectado (normalmente um satélite), vá para Rhasspy - Configurações - Gravação de áudio e em UDP Audio (Output)
insira o endereço IP do host que está executando o openWakeWord e escolha um número de porta, geralmente começando em 12202
. Se você tiver vários dispositivos Rhasspy, cada dispositivo precisará de seu próprio número de porta, 12202
, 12203
, 12204
, etc.
Em openWakeWord config.yaml
, udp_ports
possui pares kay:value. A chave é o siteId
mostrado na parte superior de Rhasspy - Configurações. Pode ser: base
, satellite
, kitchen
ou bedroom
, etc. O valor é a porta listada em Rhasspy - Configurações - Gravação de áudio.
udp_ports :
base : 12202
kitchen : 12203
bedroom : 12204
Se estiver usando o Docker, você precisará abrir as portas para permitir o tráfego de rede UDP no contêiner.
Usando 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
Ou em 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 Rhasspy que uma palavra de ativação foi falada usando o protocolo Hermes MQTT. O corretor MQTT precisa ser acessível tanto pelo Rhasspy quanto pelo openWakeWord. O corretor MQTT interno do Rhasspy não pode ser acessado de fora do Rhasspy, então você precisará executar um corretor compartilhado, como o Mosquitto.
Assim que o corretor estiver em execução, vá para Rhasspy - Configurações - MQTT. Escolha Agente External
, defina o endereço IP do Host
em que o agente está sendo executado, o número Port
e o Username
/ Password
, se necessário, semelhante a:
openWakeWord config.yaml
teria então:
mqtt :
broker : 10.0.0.10
port : 1883
username : yourusername # Delete row if not required
password : yourpassword # Delete row if not required
Em cada Rhasspy, em Rhasspy - Configurações - Wake Word, defina Hermes MQTT
, como
openWakeWord escuta palavras de ativação como "alexa", "hey mycroft", "hey jarvis" e outras. Use model_names
para especificar quais wake-words ouvir. (Consulte a documentação de modelos pré-treinados e quais model_names
usar.)
Exclua todas as palavras de ativação que você não deseja ativar. Ou remova toda a seção model_names
para usar todos os modelos pré-treinados.
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
As outras configurações oww
garantem que o Rhasspy seja ativado apenas uma vez por palavra de ativação e ajudam a reduzir ativações falsas.
No exemplo acima, a média das três últimas amostras de áudio recebidas por UDP é calculada em conjunto e, se a confiança média de que uma palavra de ativação foi falada estiver acima de 0,7 (70%), o Rhasspy será notificado. O Rhasspy não será notificado novamente até que a confiança média caia abaixo de 0,2 (20%), ou seja, a palavra de alerta tenha terminado.
Configurações para detecção de atividade de voz (VAD) e supressão de ruído também são fornecidas. (Veja as recomendações de uso do openWakeWord.)
Sinta-se à vontade para abrir um Issue se tiver um problema, precisar de ajuda ou tiver uma ideia. PRs são sempre bem-vindos.