Pythonで音声認識する方法の自分用まとめ

スポンサーリンク

音声認識で何か作ってみたいなーと思いつつ、調べて動かすだけでも疲れたので、ひとまず整理。 音声対話で使いたいので、認識精度が良いAPIやレスポンスの早いストリーミング方式を中心に記載。

動作確認環境

Windows 11 バージョン22H2 (OSビルド 22621.1105)
WSL2のUbuntu 20.04インストール済み

バッチ方式

SpeechRecognitionライブラリ

複数の音声認識をラッピングしてくれて、発話した音声だけを区切ってくれる偉大なライブラリ。

面倒なことは全部ライブラリがやってくれるので、実装が楽。ひとまず音声認識したかったら、もうこれでいいかもと思いはじめている。 対話で使うには終話判定が遅く、そのあとに音声認識するので遅い。

GitHub
公式サンプル
pyaudioを使ったサンプル。動作確認には別途Googleの認証設定が必要。

ストリーミング方式 (単発)

Google Cloud Speech-to-Text API

音声認識APIの代表格。

ストリーミング音声認識のサンプル
pyaudioを使ったサンプル。"en-US" の部分を"ja-JP"に変えれば日本語の認識ができる。動作確認には別途Googleの認証設定が必要。

メモ
  • APIにはSpeech-to-Text V1とSpeech-to-Text V2がある。ドキュメントの場合、左上で切り替える必要がある。
  • single_utteranceを設定すると音声認識は1回になるが、発話終了の検出も早くなる(ような気がする)
  • phrasesで音声認識のヒントは渡せるが、読み仮名を伝える手段がない。。。
リンク

公式ページ
Speech-to-Text リクエストの構成
クラスライブラリのドキュメント
料金
料金は2022年の11月から1秒単位の切り上げに!
制限事項
(開発言語に依存しない)ベストプラクティス
トラブルシューティングとサポート
リリースノート
対応音声フォーマット

ストリーミング方式 (連続音声認識)

単発との違いは、音声認識中に別の発話があっても漏れなく音声認識できること。
GCPのサイトでは、エンドレス ストリーミングって表現してた。

Google Cloud Speech-to-Text API

公式サンプル
pyaudioを使ったサンプル。"en-US" の部分を"ja-JP"に変えれば日本語の認識ができる。動作確認には別途Googleの認証設定が必要。

AmiVoice API

単語登録できて、しゃべった時間だけ課金なのも嬉しい。
ネットでの情報が少ない。
アカウント作成時に用意されるAPPKEYでも認証できるが、用途によってはキーの流出が怖い。 ワンタイムAppKeyを発行できるが、発行したあとに無効化する方法がよくわからなかった。。。

公式サンプル
Wrpがストリーミング方式のサンプル。別途、音声データを渡してあげる必要がある。

マイクを使った公式サンプル
ストリーミング方式。PulseAudioを使ったサンプル。上記の動作確認環境だと直接動かないため、WSL2上で確認。

リンク

料金
制限事項
対応音声フォーマット
マイページ
お試しページ

その他メモ

Googlle Speech-to-Text On-Prem
ローカルで動かせるのかと期待したけど違った。任意のGKEクラスタにコンテナとしてデプロイできるらしい。

pythonでの様々な実装がまとまったページ

AmiVoice作成の他社とのAPI比較資料
2022年時点のわかりやすい音声認識API比較