openWakeWord — это библиотека с открытым исходным кодом для обнаружения распространенных слов-пробуждений, таких как «Алекса», «Эй, Майкрофт», «Эй, Джарвис» и других моделей. Rhasspy — голосовой помощник с открытым исходным кодом.
Этот проект запускает openWakeWord как автономный сервис, получает звук от Rhasspy через UDP, определяет, когда произносится слово пробуждения, и уведомляет Rhasspy с помощью протокола Hermes MQTT.
Я запускаю Rhasspy в режиме «База/Спутник». В настоящее время каждый спутник записывает звук, локально определяет слова пробуждения и передает звук на базу, которая делает все остальное. На спутниках Pi4 работает контейнер Rhasspy Docker, запущенный с помощью Compose. Контейнер Base Rhasspy работает на более мощном процессоре i7 (на котором работает другое программное обеспечение для домашней автоматизации).
Запуск openWakeWord в Docker упрощает распространение и настройку (зависимости Python), позволяет openWakeWord развиваться в отдельном от Rhasspy темпе (вместо того, чтобы поставляться в комплекте и выпускаться вместе с Rhasspy). Один экземпляр openWakeWord централизует конфигурацию и позволяет использовать сателлиты с меньшим энергопотреблением (например, ESP32). более богатые варианты слов для пробуждения.
В будущем я планирую добавить веб-интерфейс для настройки: какие слова обнаруживать, пороговые значения, пользовательские модели верификаторов и, возможно, идентификацию говорящего. Оно также может включать живую визуализацию для тестирования и диагностики.
Использование Docker CLI
docker run -d --name openwakeword -p 12202:12202/udp -v /path/to/config/:/config dalehumby/openwakeword-rhasspy В docker-compose.yml (или файле стека Docker Swarm)
openwakeword :
image : dalehumby/openwakeword-rhasspy
restart : always
ports :
- " 12202:12202/udp "
volumes :
- /path/to/config:/configДля тестирования и экспериментов вы можете запустить этот проект локально:
git clone [email protected]:dalehumby/openWakeWord-rhasspy.gitpython3 -m venv envsource env/bin/activatepip3 install -r requirements.txtpython3 detect.py config.yaml , например nano /path/to/config/config.yamlconfig.yaml.example в config.yaml чтобы начать работу. Rhasspy передает звук со своего микрофона в openWakeWord по сети, используя протокол UDP. На каждом устройстве Rhasspy, к которому подключен микрофон (обычно спутник), перейдите в Rhasspy — Настройки — Аудиозапись и в UDP Audio (Output) вставьте IP-адрес хоста, на котором работает openWakeWord, и выберите номер порта, обычно начиная с 12202 . Если у вас несколько устройств Rhasspy, каждому устройству нужен свой номер порта: 12202 , 12203 , 12204 и т. д.

В openWakeWord config.yaml udp_ports имеет пары kay:value. Ключом является siteId показанный в верхней части Rhasspy — Настройки. Это может быть: base , satellite , kitchen , bedroom и т. д. Значением является порт, указанный в Rhasspy — Настройки — Аудиозапись.
udp_ports :
base : 12202
kitchen : 12203
bedroom : 12204Если вы используете Docker, вам необходимо открыть порты, чтобы разрешить сетевой трафик UDP в контейнер.
Использование 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 Или в 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 уведомляет Rhasspy о том, что слово пробуждения было произнесено с использованием протокола Hermes MQTT. Брокер MQTT должен быть доступен как для Rhasspy, так и для openWakeWord. Внутренний MQTT-брокер Rhasspy недоступен снаружи Rhasspy, поэтому вам потребуется запустить общий брокер, например Mosquitto.
После запуска брокера перейдите в Rhasspy — Настройки — MQTT. Выберите « External брокер», установите IP-адрес Host , на котором работает брокер, номер Port и Username / Password , если необходимо, аналогично:

openWakeWord config.yaml будет иметь:
mqtt :
broker : 10.0.0.10
port : 1883
username : yourusername # Delete row if not required
password : yourpassword # Delete row if not required
На каждом Rhasspy в Rhasspy — Настройки — Wake Word установите Hermes MQTT , например

openWakeWord прослушивает слова пробуждения, такие как «Алекса», «Эй, Майкрофт», «Эй, Джарвис» и другие. Используйте model_names , чтобы указать, какие слова пробуждения следует прослушивать. (См. документацию по предварительно обученным моделям и сведения о том, какие model_names использовать.)
Удалите все слова-пробуждения, которые вы не хотите активировать. Или удалите весь раздел model_names чтобы использовать все предварительно обученные модели.
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 Другие настройки oww гарантируют, что Rhasspy активируется только один раз для каждого слова пробуждения, и помогают уменьшить количество ложных активаций.
В приведенном выше примере последние 3 аудиосэмпла, полученные по UDP, усредняются, и если средняя уверенность в том, что слово-пробуждение было произнесено, превышает 0,7 (70%), то Rhasspy уведомляется. Rhasspy не будет уведомлен снова до тех пор, пока средний уровень достоверности не упадет ниже 0,2 (20%), т. е. слово пробуждения не закончится.
Также предусмотрены настройки обнаружения голосовой активности (VAD) и подавления шума. (См. Рекомендации по использованию openWakeWord.)
Не стесняйтесь открывать проблему, если у вас есть проблема, вам нужна помощь или у вас есть идея. Пиарщики всегда приветствуются.