Hello Wor.log

IT系大学生4人による備忘録のようなもの

Google Cloud Platformの登録からCloud Speech APIを使用するまで

こんにちは、P1です。
今日は、Google Cloud Platform(GCP)に登録して、Cloud Speech APIを使用して、音声の文字起こしをしてみる備忘録です。
GCP、無料でも色々使えるみたいで、有効活用していきたいですよね。

GCPの無料トライアルに登録

とりあえず無料トライアルに登録してみます。$300分くらい枠も貰えるみたいなので、嬉しいですね。
まずは、https://cloud.google.com/free/にアクセスして、 f:id:cppx:20171112114453p:plain 上の画面から、無料トライアルに登録していきましょう。クレジットカードの登録が必要です。残念ながら必須で、Herokuのようにプリペイド的なカードではダメみたいです。まあ仕方がないといえば仕方がないですね・・・。

プロジェクトを作成

登録ができたら、https://console.cloud.google.com/home/dashboardから、マイページに行けると思います。
そうしたら、下の画像のように画面左上の「プロジェクトを選択」から、新しいプロジェクトを作成していきましょう。 f:id:cppx:20171112114740p:plain
プロジェクトの名前はまあ適当で問題ないかと。

Cloud Speech APIを有効にする

とりあえずプロジェクトを作成すれば、後は何でも出来る感じですね。
今回はCloud Speech APIを使用する手順だけを。
f:id:cppx:20171112115027p:plain
上の画像のような検索ボックスから、「speech」と入力して、Cloud Speech APIを選択します。
f:id:cppx:20171112115206p:plain このような画面になると思うので、「有効にする」を選択し、APIを有効にしましょう。

Keyを作成する

次に、APIで使用するKeyの作成を行っていきます。 f:id:cppx:20171112115320p:plain 上の画像のような画面になると思うので、左のバーから「認証情報」を選択し、「認証情報を作成」→「APIキー」と選択し、APIキーの作成をします。
ここで作成したKeyはくれぐれも外部に漏れないように気を付けてくださいね。

解析したい音声をGoogle Storageにアップロードする

準備が出来たので、さっそく音声解析を試してみましょう。
https://cloud.google.com/speech/docs/getting-startedGoogleのクイックスタートをやってみたいと思います。

{
  'config': {
      'encoding':'FLAC',
      'sampleRate': 16000,
      'languageCode': 'en-US'
  },
  'audio': {
      'uri':'gs://cloud-samples-tests/speech/brooklyn.flac'
  }
}

雰囲気的にはこんな感じのJSONを投げたいです。問題はuriのところなのですが、今現在(2017/11)では、gs://からはじまURLしか対応していないようで、httpが使えません。なので、解析したい音声をGoogle Storageにアップロードしていきます。

f:id:cppx:20171112121726p:plain

マイページ左のバーから「Storage」を選択し、 f:id:cppx:20171112121806p:plain バケットを作成します。ストレージクラスは、上から2番目か3番目辺りでいいと思います。あんまり詳しくないです。

音声の形式について

サンプリングレートだったり、形式だったりを適切なものにすると解析の精度が良くなるようなのですが、私はこの辺りに関する知識が皆無なので、ここでは触れないことにします。https://cloud.google.com/speech/docs/best-practices?hl=jaに、Googleが最も良い形式を書いてくれているので、こちらを参考に・・・。

音声解析

いよいよ音声解析をしていきます!
今回は非同期的な音声解析を試してみます。 手順をまとめると、

  1. https://speech.googleapis.com/v1beta1/speech:asyncrecognizeにAPIKeyとJSONを投げる(POST)
  2. nameという識別番号が返ってくる
  3. https://speech.googleapis.com/v1beta1/operations/"返ってきたname"にアクセスする(GET)
  4. 解析結果が返ってくる

という感じです。
以下Rubyの簡単なコードを。リクエストを送信するコードと結果を受け取るコードで分けてあります。

require "faraday"
require "json"
require 'base64'

gs = "Analysis object" # 解析したい音声のGoogle StorageのURL
key = "your API key" # 作成したAPIKey
input ={
  "config": {
      "encoding":"FLAC",
      "sample_rate": 44100, #本当は16000が一番良い
      "language_code": "ja-JP" #日本語ならこう
  },
  "audio": {
      "uri":gs
  }
}

res = Faraday.post "https://speech.googleapis.com/v1beta1/speech:asyncrecognize?key=" + key, JSON.generate(input), content_type: "application/json"
puts res.body
  • 結果を受け取る
require "faraday"
require "json"
require 'base64'

name = ARGV[0] # 返ってきたnameをコマンドライン引数にしています
key = "your API key"

res = Faraday.get "https://speech.googleapis.com/v1beta1/operations/"+ name +"?key=" + key

puts res.body

解析は短い音声ならそんなに時間はかからないので、1つのコードにしてもいいかもしれませんね。

{
  "results": [
    {
      "alternatives": [
        {
          "transcript": "録音した言葉",
          "confidence": 0.98267895
        }
      ]
    }
  ]
}

みたいなJSONが返ってくると成功ですね。

ちょっと試してみた感じ、精度はかなり良くていい感じですね。色々遊べそう。1ヶ月60分まで!!