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.git
python3 -m venv env
source env/bin/activate
pip3 install -r requirements.txt
python3 detect.py
config.yaml
, например nano /path/to/config/config.yaml
config.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:/config
openWakeWord уведомляет 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.)
Не стесняйтесь открывать проблему, если у вас есть проблема, вам нужна помощь или у вас есть идея. Пиарщики всегда приветствуются.