openWakeWord は、「alexa」、「hey mycroft」、「hey jarvis」などの一般的なウェイクワードを検出するためのオープンソース ライブラリです。 Rhasspy はオープンソースの音声アシスタントです。
このプロジェクトは、openWakeWord をスタンドアロン サービスとして実行し、UDP 経由で Rhasspy から音声を受信し、ウェイクワードが話されたことを検出し、Hermes MQTT プロトコルを使用して Rhasspy に通知します。
RhasspyをBase/Satelliteモードで実行しています。現在、各サテライトは音声をキャプチャし、ウェイクワード検出をローカルで実行し、他のすべてを行う基地に音声をストリーミングします。 Pi4 サテライトは、Compose で起動される Rhasspy Docker コンテナを実行します。 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.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 は、UDP プロトコルを使用して、ネットワーク経由でマイクからの音声を OpenWakeWord にストリーミングします。マイクロホーンが接続されている各 Rhasspy デバイス (通常はサテライト) で、[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 : 12204Docker を使用している場合は、コンテナへの 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 は、Hermes MQTT プロトコルを使用してウェイクワードが発話されたことを Rhasspy に通知します。 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 がウェイクワードごとに 1 回だけアクティブ化されることを保証し、誤ったアクティブ化を減らすのに役立ちます。
上の例では、UDP 経由で受信した最新の 3 つのオーディオ サンプルが平均され、ウェイクワードが発話されたという平均信頼度が 0.7 (70%) を超える場合、Rhasspy に通知されます。平均信頼度が 0.2 (20%) を下回るまで、つまりウェイクワードが終了するまで、Rhasspy には再度通知されません。
音声アクティビティ検出 (VAD) とノイズ抑制の設定も提供されます。 (openWakeWord の使用に関する推奨事項を参照してください。)
問題がある場合、サポートが必要な場合、またはアイデアがある場合は、お気軽に Issue を開いてください。 PR はいつでも歓迎します。