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時間」となっているらしいので使いすぎには注意

おわりに

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