Google Cloud Speech APIでストリーミング音声認識


2016/9/14現在の情報です

Google Cloud Speech APIでマイク入力からのストリーミング音声認識を試す.

以前REST API版で録音済ファイルの認識を試したので、今回はgRPC版でストリーミング認識させてみる.

手順

Google公式のサンプル
のREADMEの手順に従う.

今回試すのはストリーミング認識のtranscribe_streaming.py .

Service Accountのjsonを得るところまではREST版と同じ手順.

  1. Google Cloud platformにサインアップ
  2. Developer consoleでプロジェクト作ってSpeech APIを有効化し、認証用のService Account jsonファイルを取得
  3. ダウンロードしたjsonファイルを環境変数GOOGLE_APPLICATION_CREDENTIALS に設定
  4. サンプルスクリプト実行
    1. portaudioを使えるようにする
    2. 必要なpipモジュールのインストール (virtualenv推奨)
    3. transcribe_streaming.pyを日本語認識できるよう設定
      1. recognition_configのlanguage_codeをen-USからja-JPに変更
      2. サンプリングレート等を自分の環境に合うように調整
      3. デバイス周りの設定はrecord_audio で、pyaudioのお作法で
    4. $ python transcribe_streaming.py でサンプルを実行し、マイクに向かって話しかける

起動するとlisten_print_loopの中でservice.StreamingRecognizeが値を返す限り認識が続く.(DEADLINE_SECSの秒数が経過するとタイムアウトで終了する)

このサンプルは発言にexitまたはquitの単語が含まれていると処理を終えるようになっている (listen_print_loopの後半) ので、これらの単語を止まれ とか 終了 とかに変えておくと日本語でも同じことができるだろう.

認識の挙動

  • 一定期間の沈黙があるまで、多少の間があってもひとつながりの発話として認識される.
  • 認識が済むと結果のテキストとともにis_final=Trueconfidenceが返される
  • streaming_configinterim_results=Trueを指定すると発話途中の認識結果も取れる.

発話途中の認識は単語レベルで行われているようで、ネットッワークを介してると思えない速さでびっくりする. ただし途中の認識結果は間違っていることもあるので、急がないなら全部終わるのを待った方が確実だろう.

その他のオプションはgRPC APIのマニュアル 参照

Githubのコードはかなり頻繁に更新されているので、日々チェックした方が良い.

不具合

MACとLinuxでそれぞれラップトップのビルトインマイク/USBの外付けマイクで試したが、いずれも3-10発話または15-30秒ぐらい経つと特にエラーもないまま認識しなくなる.
要調査.

雑感

v1beta1とあって、まだまだテスト段階なのかなと思われる.
gRPC (とpytonからの扱い方) に慣れないと正しく使うのが難しそう.