ウェイクワードは「アレクサ」や「OK Google」みたいな音声認識を開始するための言葉。
そのウェイクワード検出がしたくなったので、前々から気になっていたpicovoice社のPorcupine(ポーキュパイン)を使ってみました。
Porcupineは日本語に翻訳すると「やまあらし」。
様々なプラットフォームやコンピューター言語をサポートしているのが特徴。
ウェイクワード検出(wake word detection)は、ホットワード検出(hot word detection)、キーワード認識(keyword recognition)、 キーワード スポッティング(keyword spotting)とも呼ばれる。
- 動作確認環境
- プリセットのウェイクワードを試す
- オリジナルのウェイクワードを試す
- Pythonプログラム
- Pythonライブラリ
- 料金
- 精度
- 認証方法
- ライセンス
- リンク
- 他社のウェイクワード検出関連リンク
動作確認環境
Windows 11 バージョン22H2 (OSビルド 22621.1105)
python 3.10
プリセットのウェイクワードを試す
まず最初にpicovoiceのサイトで会員登録をして、アクセスキーの取得が必要。
あとは、porcupineのGihHubに書かれているとおりに実行。
pvporcupinedemoというデモコマンドを使う。デモコマンドの詳細はこちら
セットアップ
pip install pvporcupinedemo
プリセットのウェイクワード「picovoice」でウェイクワード検出してみる。
porcupine_demo_mic --access_key アクセスキー --keywords picovoice
他にも次のような色々なプリセットウェイクワードがある。
alexa, americano, blueberry, bumblebee, computer, grapefruit, grasshopper, hey barista, hey google, hey siri, jarvis, ok google, pico clock, picovoice, porcupine, terminator
詳細はヘルプ(porcupine_demo_mic --help)で表示できる。複数のプリセットを同時に検出することもできる。
「--sensitivities」オプションで感度も変えれる
porcupine_demo_mic --access_key アクセスキー --keywords picovoice --sensitivities 0.8
オリジナルのウェイクワードを試す
porcupineでは、オリジナルのウェイクワードが簡単に作れる。手順はpicovoice consoleで、言語、ウェイクワード文字列、プラットフォームを選択するだけ。 ウェイクワードを作成すると、そのウェイクワードやプラットフォームに対応したキーワードファイルがダウンロードできる。
オリジナルウェイクワードをデモコマンドで試す場合の例:
porcupine_demo_mic --access_key アクセスキー --model_path porcupine_params_ja.pv --keyword_paths yamaarashi_ja_windows_v2_1_0.ppn
porcupine_params_ja.pvは日本語用モデルファイル。こちらから入手できる。
yamaarashi_ja_windows_v2_1_0.ppnはキーワードファイルの例。
Pythonプログラム
必要に応じてパッケージをインストール
pip install pvporcupine pyaudio
import struct from datetime import datetime import pvporcupine import pyaudio porcupine = None pa = None audio_stream = None # keywords = ["picovoice", "blueberry"] keywords = ["やまあらし"] ACCESS_KEY = アクセスキー KEYWORD_FILE_PATH = "yamaarashi_ja_windows_v2_1_0.ppn" MODEL_PATH = "porcupine_params_ja.pv" try: # porcupine = pvporcupine.create(keywords=keywords, access_key=access_key) porcupine = pvporcupine.create(access_key=ACCESS_KEY, keyword_paths=[KEYWORD_FILE_PATH], model_path=MODEL_PATH, ) pa = pyaudio.PyAudio() audio_stream = pa.open( rate=porcupine.sample_rate, channels=1, format=pyaudio.paInt16, input=True, frames_per_buffer=porcupine.frame_length) print("start") while True: pcm = audio_stream.read(porcupine.frame_length) pcm = struct.unpack_from("h" * porcupine.frame_length, pcm) result = porcupine.process(pcm) if result >= 0: print('[%s] Detected %s' % (str(datetime.now()), keywords[result])) finally: if porcupine: porcupine.delete() if audio_stream: audio_stream.close() if pa: pa.terminate()
Pythonライブラリ
料金
Freeプランのウェイクワード検出に関連する制限:
・月あたり3アクティブユーザーまで。アクティブユーザー数の考え方はFAQ参照
・カスタムウェイク ワード作成は月3つまで。
精度
picovoice社が公開しているベンチマークによると、PocketSphinxやSnowboyよりも精度がいいらしい。
音声認識と一緒で、マイクで収録した音が駄目だと当然ウェイクワード検出も駄目だった。
認証方法
アクセスキー方式。ユーザーによる発行や削除はできないので、流出には注意が必要。。。
ライセンス
ライセンス
無料枠で商用利用可であることは公式ブログや料金ページに記載あり。
リンク
他社のウェイクワード検出関連リンク
ウェイクワード検出の各サービスについてまとまった記事
Azure キーワード認識
ウェイクワード検出は最初エッジで行い、クラウドで検証。
(Alexaの)音声リクエストがたどる道筋
アレクサも最初エッジで行い、クラウドで検証。
GitHub Topicsのwake-word-detection
LINE Clovaはウェイクワード終わりの1.5秒前から音声取得、Amazon EchoやGoogle Homeはどうなってる?