こんにちは、エンジニアのオオバです。
GitHub - mogeta/calm_down
上記、同僚がLTでCloud Speech-to-Textを使ったマイクロサービスを作っていたので、ぼくも触ってみようということで、触ってみたという記事です。
Speech-to-Text: 自動音声認識 | Google Cloud
ちなみにCloud Speech-to-Textとは、Google製のAI テクノロジーを搭載したAPIで、音声をテキストに変換してくれるクラウドサービスです。
→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら
公式ドキュメントに従っていく
クイックスタート: クライアント ライブラリの使用 | Cloud Speech-to-Text ドキュメント | Google Cloud
基本的にはこちらのページのSpeech-to-Textの公式ドキュメントに従っていきます。
今回は「TestCloudSpeechApp」という新規プロジェクトを作成します。
プロジェクトの作成と設定
ドキュメントの通り以下の作業をします
- プロジェクトの作成
- サービス アカウントの作成
- 秘密鍵のダウンロード
- プロジェクトに対して Cloud Speech-to-Text API を有効にする
![GoogleCloud Speech-to-TextをGoで触ってみる_0](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200624/20200624234241.png#722__290)
プロジェクトの設定ボタンをクリックします。
Configure a billing accountという警告
![GoogleCloud Speech-to-TextをGoで触ってみる_1](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200624/20200624134547.png#640__210)
警告内容に従い、課金アカウントを作成するため 「CONTINUE」ボタンをクリックします。
![GoogleCloud Speech-to-TextをGoで触ってみる_2](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200624/20200624135458.png#440__500)
案内に従っていき、無料トライアルを開始します。
![GoogleCloud Speech-to-TextをGoで触ってみる_3](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200624/20200624135510.png#607__318)
すると1年間有効の300ドルが付与されます。
![GoogleCloud Speech-to-TextをGoで触ってみる_4](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200624/20200624135433.png#750__498)
請求先アカウントを作成をクリックします。
おそらくこの工程が2. サービス アカウントの作成です。
![GoogleCloud Speech-to-TextをGoで触ってみる_5](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200624/20200624135554.png#629__313)
このような画面になるので、 DOWNLOAD PRIVATE KEY AS JSONをクリックして秘密鍵のJSONをダウンロードしておきます。
この工程が3. 秘密鍵のダウンロードです。
![GoogleCloud Speech-to-TextをGoで触ってみる_6](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200624/20200624135629.png#621__274)
そして先程作成したプロジェクトのCloud Speech-to-Text APIを有効化します。NEXTボタンをクリック。
この工程が4. プロジェクトに対して Cloud Speech-to-Text API を有効にするにあたります。
![GoogleCloud Speech-to-TextをGoで触ってみる_7](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200624/20200624141743.png#634__315)
準備が完了しました。
環境変数 GOOGLE_APPLICATION_CREDENTIALS を、サービス アカウント キーが含まれる JSON ファイルのパスに設定します。この変数は現在のシェル セッションにのみ適用されるため、新しいセッションを開く場合は、変数を再度設定してください。
.bashrcや.bash_profileなどに
export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
という一行を追加してパスを通します。
"[PATH]"
には先程ダウンロードした秘密鍵のJSONまでのパスを記述します。
一旦ここまでがプロジェクトの設定です。引き続き公式ドキュメントに沿って作業します。
Cloud SDKのインストールと初期化
Cloud SDK のドキュメント | Google Cloud
こちらのドキュメントに従います。
![GoogleCloud Speech-to-TextをGoで触ってみる_8](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200625/20200625134731.png#750__197)
まずは、SDKをダウンロードしてきます。
インストールのシェルを実行。
sh install.sh
![GoogleCloud Speech-to-TextをGoで触ってみる_9](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200625/20200625091902.png#750__172)
アップデートしてよいかと問われたので、アップデートを選択。
![GoogleCloud Speech-to-TextをGoで触ってみる_10](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200625/20200625092041.png#750__115)
既存設定をいじりたくなかったので(というか忘れているので)、新規で設定を作ることを選択。
![GoogleCloud Speech-to-TextをGoで触ってみる_11](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200625/20200625092133.png#750__68)
設定名を入力。
※起動は
-
のみ使用可能 ![GoogleCloud Speech-to-TextをGoで触ってみる_12](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200625/20200625092207.png#750__202)
ログインするGoogleアカウントを選択。
![GoogleCloud Speech-to-TextをGoで触ってみる_13](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200625/20200625092246.png#750__385)
先程作ったプロジェクトを選択。今回は
TestCloudSpeechApp
を選択しています。 ![GoogleCloud Speech-to-TextをGoで触ってみる_14](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200625/20200625091417.png#750__147)
成功するとこのような表示になります。
そろそろクライアント作業に入ります。
音声文字変換をリクエストするサンプルコードを動かす
クライアント ライブラリのインストール
今回は初めてですがGoを選択します。
go get -u cloud.google.com/go/speech/apiv1
とシェルで実行してライブラリをインストールしておきます。
Page not found · GitHub · GitHub
こちらのコードを動かしてみます。コピーして、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#の方のサンプルにはアップロードされていました。
![GoogleCloud Speech-to-TextをGoで触ってみる_15](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200625/20200625114652.png#750__401)
Page not found · GitHub · GitHub
QuickTimeで音声収録してwavに変換
ここから自分の音声ファイルを作成していきます。
![GoogleCloud Speech-to-TextをGoで触ってみる_16](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200625/20200625105656.png#750__188)
Macの場合はQuickTimeでお手軽に収録できます。手持ちのMacBookにはマイクも付いているので、特に機材用意もなく収録できます。
![GoogleCloud Speech-to-TextをGoで触ってみる_17](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200625/20200625105708.png#576__240)
QuickTimeからはm4aというフォーマットで保存されます。
m4aでは失敗したのでwavへ変換
m4aでも試しましたが、失敗してしまったので、間違いなさそうなwav形式に大好きなffmpegで以下のようなコマンドでサクッと変換します。
ffmpeg -i sample.m4a sample.wav
※ffmpegが未インストールだった場合はbrew install ffmpeg
してください
![GoogleCloud Speech-to-TextをGoで触ってみる_18](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200625/20200625110009.png#506__90)
サンプルコードのfilenameの部分をリネーム。
再度Goを実行します。
go run helloworld-speech-to-text.go
認識された!!
![GoogleCloud Speech-to-TextをGoで触ってみる_19](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200625/20200625110405.png#438__42)
ドライな感じでコンソールに出力されただけですが、ぼくの音声(Hello)がちゃんと「Hello」と認識されて少し感動しました。
途中ですが最後に
同僚のマイクロサービスを動かすところまでは本記事では到達できませでしたが、Cloud Speech-to-Textを使うところまではできました。
ほぼほぼプロジェクト設定周りに時間を食われた形ですが、動いてよかったです。
ぼくの肉声ファイルを含む全ソースを以下にアップしておきます。
GitHub - baobao/helloworld-speech-to-text: Helloworld Speech-to-Text
副次的に学んだこと
音声をシェルから再生させて、情報を知る
SoX - Sound eXchange download | SourceForge.net
brew install SoX
brewからインストールして使いました。
play sample.wav
と実行すると指定した音声が再生され音声情報も表示されます。
![GoogleCloud Speech-to-TextをGoで触ってみる_20](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200625/20200625121307.png#582__298)
シェルから実行できるのはちょっと便利。
ffmpegでトリミング
インターネットから音声ファイルを落としてきた時に、やたら長かったので、サクッとffmpegでトリミングできないかなと調べていたら、良い参考記事がありました。ありがとうございます。
ffmpeg で指定時間でカットするまとめ | ニコラボ
ffmpeg -i input.wav -t 3 output.wav
みたいに -t
オプションでトリミングができます。
![](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20200624/20200624134547.png#640.0__210.0)
この記事が気に入ったらフォローしよう