Cloud Speech API を使用すると、80 以上の言語で音声ファイルの音声をテキストに変換できます。

このラボでは、音声ファイルを録音し、それを Cloud Speech API に送信して変換します。

学習すること

必要になるもの

チュートリアルの使用目的を教えてください

通読のみ 通読して、演習を行う

Google Cloud Platform の使用経験を教えてください

初心者 中級者 上級者

カンファレンス用コードラボのセットアップ

全てのパソコンは Codelab のみの使用となります!

ログイン後https://kiosk.gcplab.me/next17-tokへアクセスしてください。

退出なさる時はログアウトを忘れずにお願いいたします。

講師は、セットアップ済みの既存のプロジェクトで一時アカウントをあなたと共有するので、課金の有効化や本コードラボの実行に伴うコストについては心配いりません。それらのアカウントはすべて、コードラボ終了直後に無効化されます。

ログインに使用する一時ユーザー名/パスワードを講師から受け取った後、Google Cloud Console にログインします。https://console.cloud.google.com/.

割り当てられたプロジェクト ID をメモしてください (上のスクリーンショットでは「next17-tok-xxxx」)。以降、本コードラボでは PROJECT_ID と呼びます。

画面の左上にあるメニューアイコンをクリックします。

ドロップダウンで [API Manager] を選択します。

[API を有効にする] をクリックします。

次に、検索ボックスで [speech] を検索し、[Google Cloud Speech API] をクリックします。

[有効にする] をクリックして、Cloud Speech API を有効にします。

有効になるまで数秒待ちます。有効になると、以下のように表示されます。

Google Cloud はラップトップからリモートで操作できるため、本コードラボでは、Cloud で動作するコマンドライン環境である Google Cloud Shell を使用します。この Debian ベース仮想マシンには、必要なすべての開発ツール (docker、gcloud、kubectl など) がロードされています。それは、永続的な 5GB ホームディレクトリを提供し、Google Cloud で動作し、ネットワーク性能と認証を大幅に改善します。そのため、本コードラボに必要なものは、ブラウザのみです (本コードラボは Chromebook でも動作します)

Google Cloud Shell をアクティブにするには、開発者コンソールで右上のボタンをクリックするだけです (プロビジョニングと環境への接続には数分しかかかりません)。

クラウド シェルに接続すると、すでに認証済みであり、プロジェクトがすでに PROJECT_ID に設定されていることが分かります。

$ gcloud auth list
認定済みアカウント:
 - <myaccount>@<mydomain>.com (アクティブ)
$ gcloud config list project
[core]
project = <PROJECT_ID>

何かしらの理由でプロジェクトが設定されていない場合、次のコマンドを発行してください。

$ gcloud config set project <PROJECT_ID>

PROJECT_ID が分かりませんか?セットアップステップでどの ID を使用したかを確認するか、コンソール ダッシュボードで検索してください。

Speech API には curl を使用してリクエストを送信することになります。そこで、リクエスト URL 内で渡すための API キーを生成する必要がでてきます。API キーを作成するために、プロジェクト ダッシュボードの [API Manager] セクションに移動します。

次に、[認証情報] タブを選択して、[認証情報を作成] をクリックします。

ドロップダウン メニューで [API キー] を選択します。

次に、生成されたキーをコピーします。

これで API キーが手に入りました。リクエストするたびに API キーの値を挿入しなくてすむように、生成した API キーを環境変数に保存します。キーの保存は Cloud Shell で行えます。以下の <your_api_key> を、先ほどコピーしたキーに置き換えてください。

export API_KEY=<YOUR_API_KEY>

Speech API へのリクエストは request.json ファイル内で作れます。最初に、このファイルを Cloud Shell で作成します。

touch request.json

次に、作成したファイルを任意のコマンドライン エディター(nanovimemacs)で開きます。ご自分の request.json ファイルに以下の行を加えます。このとき、 uri の値をご自分の生音声ファイルの uri に置き換えてください。

request.json

{
  "config": {
      "encoding":"FLAC",
      "sample_rate": 16000,
      "language_code": "en-US"
  },
  "audio": {
      "uri":"gs://cloud-samples-tests/speech/brooklyn.flac"
  }
}

リクエスト本文には configaudio のオブジェクトがあります。config では、リクエストの処理方法を Speech API に指定します。encoding のパラメーターでは、API に送信する音声ファイルで使用されている音声エンコーディングのタイプを API に指定します。FLAC は .raw ファイル用のエンコーディング タイプです(エンコーディング タイプの詳細については、ドキュメントをご覧ください)。sample_rate は、API に送信する音声データのレート(単位:ヘルツ)です。config オブジェクトに追加できるパラメーターは他にもありますが、encodingsample_rate に追加できるパラメーターはありません。

audio オブジェクトでは、Cloud Storage にある音声ファイルの uri を API に渡します。これで Speech API をコールする準備が整いました。

ここからは、以下の curl コマンドを使用して、前の手順で保存しておいた API キー環境変数と一緒に、リクエスト本文を Speech API に渡します(すべてを 1 つのコマンドラインにします)。

curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json \
"https://speech.googleapis.com/v1beta1/speech:syncrecognize?key=${API_KEY}"

次のようなレスポンスが返されます。

{
  "results": [
    {
      "alternatives": [
        {
          "transcript": "how old is the Brooklyn Bridge",
          "confidence": 0.98267895
        }
      ]
    }
  ]
}

transcript の値には、Speech API によって変換された音声ファイルのテキストが返されます。confidence の値には、API による音声変換の信頼度値が示されます。

前述のリクエストをご覧いただくと、syncrecognize メソッドを呼び出したことがわかります。Speech API は、synchronous (同期音声) と asynchronous (非同期音声) のどちらの音声もテキストに変換できます。今回の例では完全な音声ファイルを送信しましたが、syncrecognize メソッドを使用すれば、ユーザーが話している最中のストリーミング音声をテキストに変換することもできます。

多言語の対応についてご説明します。Speech API は 80 以上の言語を認識し、音声をテキストに変換できます。多言語対応は、request.json ファイルの language_code パラメーターを変更することによって行います。対応している言語のリストについては、こちらでご確認いただけます。.

たとえば、スペイン語の音声ファイルがある場合、request.json ファイルの language_code 属性を以下のように設定できます。

request.json

 {
  "config": {
      "encoding":"FLAC",
      "sample_rate": 16000,
      "language_code": "es-ES"
  },
  "audio": {
      "uri":"gs://.../..."
  }
}

このコードラボでは、Speech API で音声をテキストに変換する方法を学びました。今回の例では、音声ファイルの Google Cloud Storage URI を API に渡しましたが、音声コンテンツの base64 エンコードの文字列を渡すこともできます。

学習したこと

次のステップ