2016/9/14現在の情報です
Google Cloud Speech APIでマイク入力からのストリーミング音声認識を試す.
以前REST API版で録音済ファイルの認識を試したので、今回はgRPC版でストリーミング認識させてみる.
手順
[Google公式のサンプル] (https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/speech/grpc)
のREADMEの手順に従う.
今回試すのはストリーミング認識のtranscribe_streaming.py .
Service Accountのjsonを得るところまではREST版と同じ手順.
- Google Cloud platformにサインアップ
- Developer consoleでプロジェクト作ってSpeech APIを有効化し、認証用のService Account jsonファイルを取得
- ダウンロードしたjsonファイルを環境変数
GOOGLE_APPLICATION_CREDENTIALS
に設定 - サンプルスクリプト実行
- portaudioを使えるようにする
- 必要なpipモジュールのインストール (virtualenv推奨)
- transcribe_streaming.pyを日本語認識できるよう設定
- recognition_configのlanguage_codeをen-USからja-JPに変更
- サンプリングレート等を自分の環境に合うように調整
- デバイス周りの設定は
record_audio
で、pyaudioのお作法で
-
$ python transcribe_streaming.py
でサンプルを実行し、マイクに向かって話しかける
起動するとlisten_print_loopの中でservice.StreamingRecognizeが値を返す限り認識が続く.(DEADLINE_SECSの秒数が経過するとタイムアウトで終了する)
このサンプルは発言にexit
またはquit
の単語が含まれていると処理を終えるようになっている (listen_print_loopの後半) ので、これらの単語を止まれ
とか 終了
とかに変えておくと日本語でも同じことができるだろう.
認識の挙動
- 一定期間の沈黙があるまで、多少の間があってもひとつながりの発話として認識される.
- 認識が済むと結果のテキストとともに
is_final=True
とconfidence
が返される -
streaming_configに
interim_results=True
を指定すると発話途中の認識結果も取れる.
発話途中の認識は単語レベルで行われているようで、ネットッワークを介してると思えない速さでびっくりする. ただし途中の認識結果は間違っていることもあるので、急がないなら全部終わるのを待った方が確実だろう.
その他のオプションはgRPC APIのマニュアル 参照
Githubのコードはかなり頻繁に更新されているので、日々チェックした方が良い.
不具合
MACとLinuxでそれぞれラップトップのビルトインマイク/USBの外付けマイクで試したが、いずれも3-10発話または15-30秒ぐらい経つと特にエラーもないまま認識しなくなる.
要調査.
雑感
v1beta1とあって、まだまだテスト段階なのかなと思われる.
gRPC (とpytonからの扱い方) に慣れないと正しく使うのが難しそう.