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 捆綁和發布)。 (例如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
等。
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 總是受歡迎的。