Google Cloud Platformの登録からCloud Speech APIを使用するまで
こんにちは、P1です。
今日は、Google Cloud Platform(GCP)に登録して、Cloud Speech APIを使用して、音声の文字起こしをしてみる備忘録です。
GCP、無料でも色々使えるみたいで、有効活用していきたいですよね。
- GCPの無料トライアルに登録
- プロジェクトを作成
- Cloud Speech APIを有効にする
- Keyを作成する
- 解析したい音声をGoogle Storageにアップロードする
- 音声の形式について
- 音声解析
GCPの無料トライアルに登録
とりあえず無料トライアルに登録してみます。$300分くらい枠も貰えるみたいなので、嬉しいですね。
まずは、https://cloud.google.com/free/にアクセスして、
上の画面から、無料トライアルに登録していきましょう。クレジットカードの登録が必要です。残念ながら必須で、Herokuのようにプリペイド的なカードではダメみたいです。まあ仕方がないといえば仕方がないですね・・・。
プロジェクトを作成
登録ができたら、https://console.cloud.google.com/home/dashboardから、マイページに行けると思います。
そうしたら、下の画像のように画面左上の「プロジェクトを選択」から、新しいプロジェクトを作成していきましょう。
プロジェクトの名前はまあ適当で問題ないかと。
Cloud Speech APIを有効にする
とりあえずプロジェクトを作成すれば、後は何でも出来る感じですね。
今回はCloud Speech APIを使用する手順だけを。
上の画像のような検索ボックスから、「speech」と入力して、Cloud Speech APIを選択します。
このような画面になると思うので、「有効にする」を選択し、APIを有効にしましょう。
Keyを作成する
次に、APIで使用するKeyの作成を行っていきます。
上の画像のような画面になると思うので、左のバーから「認証情報」を選択し、「認証情報を作成」→「APIキー」と選択し、APIキーの作成をします。
ここで作成したKeyはくれぐれも外部に漏れないように気を付けてくださいね。
解析したい音声をGoogle Storageにアップロードする
準備が出来たので、さっそく音声解析を試してみましょう。
https://cloud.google.com/speech/docs/getting-startedのGoogleのクイックスタートをやってみたいと思います。
{ '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にアップロードしていきます。
マイページ左のバーから「Storage」を選択し、 バケットを作成します。ストレージクラスは、上から2番目か3番目辺りでいいと思います。あんまり詳しくないです。
音声の形式について
サンプリングレートだったり、形式だったりを適切なものにすると解析の精度が良くなるようなのですが、私はこの辺りに関する知識が皆無なので、ここでは触れないことにします。https://cloud.google.com/speech/docs/best-practices?hl=jaに、Googleが最も良い形式を書いてくれているので、こちらを参考に・・・。
音声解析
いよいよ音声解析をしていきます!
今回は非同期的な音声解析を試してみます。
手順をまとめると、
- https://speech.googleapis.com/v1beta1/speech:asyncrecognizeにAPIKeyとJSONを投げる(POST)
- nameという識別番号が返ってくる
- https://speech.googleapis.com/v1beta1/operations/"返ってきたname"にアクセスする(GET)
- 解析結果が返ってくる
という感じです。
以下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分まで!!