GoogleCloudPlatform
音声認識
GoogleCloudSpeechAPI

Google Cloud Speech APIを使ってみた!


はじめに

少し前にGoogle Cloud Speech APIを使って色々ハマったので内容をまとめておきます。

ホントはもっと色々やってから書こうと思ったのですが、違う技術に目移りしてしまって…

HelloWorldぐらいのレベル感なので、半日もあれば「音声ファイルをテキスト変換できる」ようになるかと思います。

※GCPのアカウントは持っている前提です。


① Storageを作成する

ここはあまり悩まないはず。

Storageから「バケットの作成」で以下設定にする


  1. 名前はなんでも良いです(あとあと${bucket}に当て込んでください)

  2. ストレージクラスはRegionalを利用

  3. リージョンは、us-west1(米国)を利用

  4. 鍵はgoogle管理

※※ちなみにCloud Storageの料金を見るとタダで使うにはこの2点を守ればよさそう。

試してはいないのであっているかはわかりません。

・ Regional Storage 5GBまで無料

・ リージョンはus-west1us-central1us-east1のみ


② Cloud Speech API を設定

以下設定を行う。


  1. Cloud Speech APIの有効化:ナビゲーション メニュー>APIとサービス>ライブラリ


    1. Cloud Speech API を検索

    2. 「有効にする」を選択(「無効化する」となっていれば放置していい)



  2. API キーの作成:ナビゲーション メニュー>APIとサービス>認証情報>認証情報を作成(APIキー)


    1. 名前は適当

    2. アプリケーション制限


      1. なし



    3. API制限


      1. 「Cloud Speech API」のみ





  3. できたAPIキーをメモしておく(あとあと${api_key}に当て込んでください)

※※ちなみに、ここのやり方を「サービスアカウントキーを作成」としても大丈夫です。最後のリクエスト情報とAPIの叩き方が変わるのみです。


③ 音声ファイルをアップロード

★★ハマりポイント:音声ファイルの形式が違うと「空ファイル」になるので注意

僕はMacを利用していて「ffmpeg」というツールを利用して音声変換を実施。

Quick Time Player で「新規オーディオを作成」で作成した音声を以下コマンドで変換。

## ffmpegインストール

brew install ffmpeg
## 変換
ffmpeg -i "input-audio.m4a" -vn -ar 16000 -ac 1 -acodec flac -f flac "output-audio.flac" `

よくわかっていないですが、後で出てくる設定ファイルに合わせて色々変換をかける感じ。

サンプルレートヘルツ?を16000へ、エンコード?をflacへ変換する。

変換した音声ファイルを、Storageへアップロードする。

ブラウザからアップロード(${bucket}/audio/へアップしました)


④音声ファイルを読み取り可能にする

★★ハマりポイント:デフォルトで読み取り不可になっていて以下エラーが出続けるので注意

{

"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}

Google Cloud Shellを利用して、読み取り権限をつける


  1. Google Cloud Shell の実行


    1. Homeの右上に起動ボタンがあるので押下(「Cloud Shellをアクティブにする」と出るやつ)



  2. 以下コマンドを実行(${bucket}はよしなに変えてください)


    1. gsutil acl ch -u AllUsers:R gs://${bucket}/audio/output-audio.flac




⑤ Speech APIを実行

Macのターミナルから実行可能。

request 情報をjsonで用意して、API(curlコマンド)を叩く

$ cat request.json

{
"config": {
"encoding": "FLAC",
"sampleRateHertz": 16000,
"languageCode": "ja-JP",
"enableWordTimeOffsets": false
},
"audio": {
"uri":"gs://${bucket}/audio/output-audio.aifc"
}
}
$ curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json "https://speech.googleapis.com/v1/speech:recognize?key=${api_key}"

※※ちなみに、「無料は月1時間」となっているらしいので使いすぎには注意


おわりに

ひたすらに③、④でハマりました。