Objetivo: Ter uma wake word funcional no QuasarBox e, opcionalmente, treinar uma wake word custom "Ei Quasar".
Duração estimada: Fase 1: já pronto (built-in). Fase 2: 3-5 dias (treinamento custom).
O componente micro_wake_word do ESPHome já inclui modelos pré-treinados que rodam diretamente no ESP32-S3 sem precisar de nada no servidor. Use uma dessas pra começar:
| Wake Word | Modelo | Qualidade | Nota |
|---|---|---|---|
| "Hey Jarvis" | hey_jarvis |
✅ Boa | Recomendada pra começar |
| "OK Nabu" | ok_nabu |
✅ Boa | Wake word oficial do HA |
| "Alexa" | alexa |
✅ Boa | Familiar |
| "Hey Mycroft" | hey_mycroft |
Razoável |
micro_wake_word:
models:
- model: hey_jarvis # ou ok_nabu, alexa
on_wake_word_detected:
- voice_assistant.start:Pronto. Sem treinamento, sem coleta de amostras, sem servidor. O modelo roda no ESP32-S3 usando ~1-2MB de PSRAM.
- Settings → Voice Assistants → Quasar
- Wake Word: pode deixar "None" (pois a detecção é no ESP32, não no servidor)
- Ou configurar openWakeWord no servidor como backup/confirmação (dupla detecção)
Combinar as duas camadas:
- micro_wake_word no ESP32 com "Hey Jarvis" = gatilho rápido (local, ~100ms)
- openWakeWord no servidor como confirmação = reduz falsos positivos
O ESPHome suporta isso nativamente: o ESP32 detecta a wake word e inicia o stream; o servidor pode confirmar antes de processar o STT.
Use a wake word provisória até que tudo mais esteja funcionando (Sprints 0-3, 5-6). Só depois invista tempo no treinamento custom.
Quando o pipeline inteiro estiver estável, treinar uma wake word personalizada.
O openWakeWord permite treinar wake words customizadas com relativamente poucas amostras (~50-200 gravações).
Gravar "Ei Quasar" várias vezes, por diferentes pessoas da família:
# Criar diretório de amostras
mkdir -p /home/felipe/work/quasar-speaker/wake-word/positive
mkdir -p /home/felipe/work/quasar-speaker/wake-word/negative
# Gravar amostras (16kHz, 16-bit, mono, ~2 segundos)
for i in $(seq 1 50); do
echo "Diga 'Ei Quasar' (amostra $i/50)..."
arecord -f S16_LE -r 16000 -c 1 -d 2 \
wake-word/positive/felipe_$i.wav
sleep 1
doneMeta de amostras:
- Felipe: 50 gravações
- Tailine: 30 gravações
- Miguel: 20 gravações (se aplicável)
- Variações: tom normal, sussurro, alto, longe, perto
Gravar áudio ambiente e frases que NÃO são a wake word:
# Áudio ambiente (TV, música, conversa)
arecord -f S16_LE -r 16000 -c 1 -d 60 wake-word/negative/ambient_1.wav
# Frases similares que NÃO devem ativar:
# "E quase", "ei pessoal", "a casa", etc.# Usar o training toolkit do openWakeWord
# https://github.com/dscripka/openWakeWord#training-new-models
python -m openwakeword.train \
--positive_dir wake-word/positive/ \
--negative_dir wake-word/negative/ \
--output_dir wake-word/models/ \
--model_name ei_quasarpython -m openwakeword.test \
--model wake-word/models/ei_quasar.tflite \
--audio_dir wake-word/test/- Copiar modelo pra volume Docker do openWakeWord (ou montar diretório):
# Adicionar ao docker-compose.yml
wyoming-openwakeword:
volumes:
- ./wake-word/models:/custom-models
command: >
--uri tcp://0.0.0.0:10400
--custom-model-dir /custom-models
--preload-model ei_quasar- Reiniciar:
docker compose restart wyoming-openwakeword - Atualizar Voice Pipeline no HA: Wake Word → ei_quasar
A Espressif permite treinar modelos custom pra rodar diretamente no ESP32-S3 via ESP-SR. Vantagem: latência zero (tudo local). Desvantagem: processo de treinamento mais complexo. Considerar apenas se a detecção via servidor introduzir latência perceptível.
- Variedade: Gravar em diferentes cômodos (acústica diferente)
- Distância: Gravar de 0.5m, 1m, 2m, 3m
- Ruído: Gravar com TV ligada, conversa ao fundo
- Velocidade: Normal, rápido, lento
- Mínimo: 50 amostras positivas pra resultado razoável, 200+ pra bom
- micro_wake_word funcionando no ESP32 com "Hey Jarvis"
- Pipeline inicia corretamente após detecção
- False positives aceitáveis (< 3/hora com TV ligada)
- ≥100 amostras positivas coletadas (multi-speaker)
- Amostras negativas coletadas
- Modelo treinado com accuracy ≥ 95%
- False positive rate < 1%
- Funciona a 2m de distância
- Funciona com TV ligada ao fundo
- Deploy no Wyoming openWakeWord (Docker)
- Pipeline HA atualizado pra "ei_quasar"
- Teste com todos os membros da família