渋谷ほととぎす通信

新しいこと、枯れたこと問わずサムザップ大庭が興味を持ったものを調査、生活の効率を求める完全趣味の技術ブログ。基礎を大事にしています。※あくまで個人ブログであり所属組織とは関係ありません

GoogleCloud Speech-to-TextをGoで触ってみる


上記、同僚がLTでCloud Speech-to-Textを使ったマイクロサービスを作っていたので、僕も触ってみようということで、触ってみたという記事です。


Speech-to-Text: 自動音声認識  |  Cloud Speech-to-Text  |  Google Cloud
ちなみにCloud Speech-to-Textとは、Google製のAI テクノロジーを搭載したAPIで、音声をテキストに変換してくれるクラウドサービスです。

公式ドキュメントに従っていく

基本的にはこちらのページのSpeech-to-Textの公式ドキュメントに従っていきます。
今回は「TestCloudSpeechApp」という新規プロジェクトを作成します。

プロジェクトの作成と設定

ドキュメントの通り以下の作業をします

  1. プロジェクトの作成
  2. サービス アカウントの作成
  3. 秘密鍵のダウンロード
  4. プロジェクトに対して Cloud Speech-to-Text API を有効にする

f:id:esakun:20200624234241p:plain:w450

プロジェクトの設定ボタンをクリックします。

Configure a billing accountという警告

f:id:esakun:20200624134547p:plain

警告内容に従い、課金アカウントを作成するため 「CONTINUE」ボタンをクリックします。


f:id:esakun:20200624135458p:plain:w450 案内に従っていき、無料トライアルを開始します。


f:id:esakun:20200624135510p:plain:w450

すると1年間有効の300ドルが付与されます。


f:id:esakun:20200624135433p:plain:w450

請求先アカウントを作成をクリックします。 おそらくこの工程が2. サービス アカウントの作成です。


f:id:esakun:20200624135554p:plain:w450 このような画面になるので、 DOWNLOAD PRIVATE KEY AS JSONをクリックして秘密鍵のJSONをダウンロードしておきます。 この工程が3. 秘密鍵のダウンロードです。

f:id:esakun:20200624135629p:plain:w450

そして先程作成したプロジェクトのCloud Speech-to-Text APIを有効化します。NEXTボタンをクリック。 この工程が4. プロジェクトに対して Cloud Speech-to-Text API を有効にするにあたります。


f:id:esakun:20200624141743p:plain:w450

準備が完了しました。


環境変数 GOOGLE_APPLICATION_CREDENTIALS を、サービス アカウント キーが含まれる JSON ファイルのパスに設定します。この変数は現在のシェル セッションにのみ適用されるため、新しいセッションを開く場合は、変数を再度設定してください。

.bashrcや.bash_profileなどに

export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

という一行を追加してパスを通します。 "[PATH]"には先程ダウンロードした秘密鍵のJSONまでのパスを記述します。


一旦ここまでがプロジェクトの設定です。引き続き公式ドキュメントに沿って作業します。

Cloud SDKのインストールと初期化

こちらのドキュメントに従います。

f:id:esakun:20200625134731p:plain:w450

まずは、SDKをダウンロードしてきます。

インストールのシェルを実行。

sh install.sh

f:id:esakun:20200625091902p:plain:w450 アップデートしてよいかと問われたので、アップデートを選択。


f:id:esakun:20200625092041p:plain:w450 既存設定をいじりたくなかったので(というか忘れているので)、新規で設定を作ることを選択。


f:id:esakun:20200625092133p:plain:w450 設定名を入力。 ※起動は-のみ使用可能


f:id:esakun:20200625092207p:plain:w450 ログインするGoogleアカウントを選択。


f:id:esakun:20200625092246p:plain:w450 先程作ったプロジェクトを選択。今回は TestCloudSpeechAppを選択しています。


f:id:esakun:20200625091417p:plain:w450 成功するとこのような表示になります。


そろそろクライアント作業に入ります。

音声文字変換をリクエストするサンプルコードを動かす

クライアント ライブラリのインストール

今回は初めてですがGoを選択します。

go get -u cloud.google.com/go/speech/apiv1

とシェルで実行してライブラリをインストールしておきます。

こちらのコードを動かしてみます。コピーして、helloworld-speech-to-text.goというファイルを作成してペーストしておきます。

実行

go run helloworld-speech-to-text.go

案の定失敗

Failed to read file: open /path/to/audio.raw: no such file or directory
exit status 1

エラー内容から、

ソースコードの/path/to/audio.raw部分を自分で用意した音声ファイルを突っ込む必要がありました。
Googleさん音声ファイルを用意しておいてよ〜って思ってたんですが、この記事を書き終えた後に気づきましたが、C#の方のサンプルにはアップロードされていました。 f:id:esakun:20200625114652p:plain:w450 https://github.com/GoogleCloudPlatform/dotnet-docs-samples/blob/master/speech/api/QuickStart/audio.raw

QuickTimeで音声収録してwavに変換

ここから自分の音声ファイルを作成していきます。

f:id:esakun:20200625105656p:plain:w450

Macの場合はQuickTimeでお手軽に収録できます。手持ちのMacBookにはマイクも付いているので、特に機材用意もなく収録できます。


f:id:esakun:20200625105708p:plain:w450

QuickTimeからはm4aというフォーマットで保存されます。

m4aでは失敗したのでwavへ変換

m4aでも試しましたが、失敗してしまったので、間違いなさそうなwav形式に大好きなffmpegで以下のようなコマンドでサクッと変換します。

ffmpeg -i sample.m4a sample.wav

※ffmpegが未インストールだった場合はbrew install ffmpegしてください


f:id:esakun:20200625110009p:plain:w450 サンプルコードのfilenameの部分をリネーム。


再度Goを実行します。

go run helloworld-speech-to-text.go

認識された!!

f:id:esakun:20200625110405p:plain:w450 ドライな感じでコンソールに出力されただけですが、僕の音声(Hello)がちゃんと「Hello」と認識されて少し感動しました。

途中ですが最後に

同僚のマイクロサービスを動かすところまでは本記事では到達できませでしたが、Cloud Speech-to-Textを使うところまではできました。
ほぼほぼプロジェクト設定周りに時間を食われた形ですが、動いてよかったです。


僕の肉声ファイルを含む全ソースを以下にアップしておきます。

副次的に学んだこと

音声をシェルから再生させて、情報を知る

brew install SoX

brewからインストールして使いました。

play sample.wav

と実行すると指定した音声が再生され音声情報も表示されます。 f:id:esakun:20200625121307p:plain:w450

シェルから実行できるのはちょっと便利。

ffmpegでトリミング

インターネットから音声ファイルを落としてきた時に、やたら長かったので、サクッとffmpegでトリミングできないかなと調べていたら、良い参考記事がありました。ありがとうございます。
ffmpeg で指定時間でカットするまとめ | ニコラボ

ffmpeg -i input.wav -t 3 output.wav

みたいに -tオプションでトリミングができます。