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.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 にストリーミングします。マイクロホーンが接続されている各 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 : 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 は、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 はいつでも歓迎します。