openWakeWord 是一个开源库,用于检测常见的唤醒词,例如“alexa”、“hey mycroft”、“hey jarvis”和其他模型。 Rhasspy 是一个开源语音助手。
该项目将 openWakeWord 作为独立服务运行,通过 UDP 接收来自 Rhasspy 的音频,检测何时说出唤醒词,并使用 Hermes MQTT 协议通知 Rhasspy。
我在 Base/Satellite 模式下运行 Rhasspy。目前,每个卫星都会捕获音频,在本地进行唤醒词检测,并将音频流传输到负责执行其他所有操作的基地。 Pi4 卫星运行 Rhasspy Docker 容器,通过 compose 启动。 Base Rhasspy 容器在更强大的 i7 上运行(运行其他家庭自动化软件。)
在 Docker 中运行 openWakeWord 可以简化分发和设置(Python 依赖项),允许 openWakeWord 以与 Rhasspy 不同的速度进行开发(而不是与 Rhasspy 捆绑和发布)。 openWakeWord 的单个实例集中配置,并允许较低功率的卫星(例如 ESP32)更丰富的唤醒词选项。
将来,我计划添加一个用于配置的 Web UI:要检测哪些单词、阈值、自定义验证器模型,也许还有说话人识别。它还可以包括用于测试和诊断的实时可视化。
使用 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 使用 UDP 协议通过网络将音频从其麦克风流式传输到 openWakeWord。在连接了 microhone 的每个 Rhasspy 设备(通常是 Satellite)上,转到 Rhasspy - 设置 - 音频录制,然后在UDP Audio (Output)
中插入运行 openWakeWord 的主机的 IP 地址,然后选择一个端口号,通常从12202
开始。如果您有多个 Rhasspy 设备,那么每个设备都需要自己的端口号, 12202
、 12203
、 12204
等。
在 openWakeWord config.yaml
中, udp_ports
有 kay:value 对。关键是显示在Rhasspy - 设置顶部的siteId
。它可能是: 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 访问。 Rhasspy 的内部 MQTT 代理无法从 Rhasspy 外部访问,因此您需要运行共享代理,例如 Mosquitto。
代理运行后,转到Rhasspy - 设置 - MQTT。选择External
代理,设置运行代理的Host
的 IP 地址、 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 - 设置 - 唤醒词中,设置Hermes MQTT
,例如
openWakeWord 监听唤醒词,如“alexa”、“hey mycroft”、“hey jarvis”等。使用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 一次,并有助于减少错误激活。
在上面的示例中,通过 UDP 接收到的最新 3 个音频样本被平均在一起,如果说出唤醒词的平均置信度高于 0.7 (70%),则会通知 Rhasspy。在平均置信度降至 0.2 (20%) 以下(即唤醒词结束)之前,Rhasspy 不会再次收到通知。
还提供语音活动检测 (VAD) 和噪声抑制的设置。 (请参阅 openWakeWord 的使用建议。)
如果您有问题、需要帮助或有想法,请随时提出问题。 PR 总是受欢迎的。