はじめに
音声データに含まれる会話の内容を簡単に文字起こしすることができるAPIとして、Google Cloud の Speech-to-Text APIがあります。
Speech-to-Text API は音声データを送信すると、それを変換したテキストデータをレスポンスとして返すAPIです。
この記事では、Speech-to-Text APIをGoogle Cloud上で導入する方法と、Google Colab上で利用する方法について述べます。
Google Cloud は初回300$の無料枠がありますので、試してみるといいかもしれません。
この記事で使用しているソースコードは以下のGoogle Colabで試すことができます。

Google CloudでSpeech-to-Text APIを使う準備
まずは、Google Cloud側でSpeech-to-Text APIを使う準備をおこないます。
Speech-to-Text APIの有効化と、APIの使用に必要な秘密鍵の生成をおこないます。
Speech-to-Text APIを有効化する
- Google Cloudコンソールのサイドバー: 「APIとサービス」→「ライブラリ」をクリックします。
- 検索バーから「Speech-to-Text API」を検索し、対象のAPIをクリックします。
- 「有効にする」ボタンをクリックしてAPIを有効化します。
サービスアカウントキーを作成する
- Google Cloudコンソールのサイドバー: 「APIとサービス」→「認証情報」をクリックします。
- 画面上部の「認証情報の作成」→「サービス アカウント」をクリックします。
- 適当なサービス アカウント名を入力して、「完了」ボタンをクリックします。
- 「認証情報」画面の下部に先ほど作成したサービス アカウントが追加されているので、クリックします。
- 画面上部の「キー」タブから、「鍵を追加」→「新しい鍵を作成」をクリックします。
- キータイプの選択では、ここではJSONを選択します。「作成」ボタンをクリックすると、秘密鍵(jsonファイル)がダウンロードされます。
以上でSpeech-to-Text APIを使う準備は完了です。作成した秘密鍵(jsonファイル)は後ほど使用するので大切に保管してください。
音声データを用意する
今回用いる音声データは、CoeFontStudioで用意しました。CoeFontStudioは株式会社Yellstonが提供しているAIを利用した音声自動生成ソフトで、テキスト入力した文章を自然な音声で読み上げてくれます。しかも無料で利用することができます。

読み上げてもらった文章は、日本昔話の「雪女」の一節です。
吹雪の中帰れなくなった二人は、近くの小屋で寒さをしのいで寝ることにする。その夜、顔に吹き付ける雪に巳之吉が目を覚ますと、恐ろしい目をした白ずくめ、長い黒髪の美女がいた。巳之吉の隣りに寝ていた茂作に女が白い息を吹きかけると、茂作は凍って死んでしまう。
女は巳之吉にも息を吹きかけようと巳之吉に覆いかぶさるが、しばらく巳之吉を見つめた後、笑みを浮かべてこう囁く。お前もあの老人のように殺してやろうと思ったが、お前はまだ若く美しいから、助けてやることにした。だが、お前は今夜のことを誰にも言ってはいけない。誰かに言ったら命はないと思え。そう言い残すと、女は戸も閉めず、吹雪の中に去っていった。
CoeFontStudioでは読み上げた内容をwavファイルとしてダウンロードすることができます。
ダウンロードしたファイルを “sample_voice.wav” とリネームして使用します。

Google ColabからSpeech-to-Text APIを使う
Google ColabからSpeech-to-Text APIを使用します。
APIを使用するには、上記で作成した、秘密鍵(jsonファイル)と音声データ(wavファイル)が必要です。今回は、これらのファイルをGoogle Driveに配置し、Google Colabからマウントすることで使用する方針をとります。
今回は下図のようにcolabファイルと同じディレクトリに秘密鍵と音声データを配置しました。

それでは、ソースコードを記載していきます。
- Speech-to-Text APIの使用に必要なライブラリをインストールします。
!pip install --upgrade google-cloud-speech
この際、下図のエラーが出た場合は、「RESTART RUNTIME」ボタンをクリックして、再度セルを実行してください。

- Google Driveをマウントします。
from google.colab import drive
drive.mount('/content/drive/')
working_dir = '{colabファイルが配置されているディレクトリのフルパスを記載}'
# 作業ディレクトリに移動
%cd {working_dir}
- 秘密鍵を読み込みます。
import os
voice_file_path = 'sample_voice.wav'
api_key_path = 'secret_key.json'
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = api_key_path
- 音声データのサンプリングレートを確認します。今回は44100 Hz でした。
import wave
# サンプリングレートを確認
with wave.open(voice_file_path, 'rb') as f:
fr = f.getframerate()
print("サンプリングレート: ", fr)
# 出力
サンプリングレート: 44100
- Speech-to-Text APIを使用します。下記のコードを実行すると、Speech-to-Text APIの結果が標準出力されます。
import io
from google.cloud import speech
with io.open(voice_file_path, 'rb') as f:
content = f.read()
audio = speech.RecognitionAudio(content=content)
config = speech.RecognitionConfig(
encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
sample_rate_hertz=44100,
language_code='ja-JP')
client = speech.SpeechClient()
response = client.recognize(config=config, audio=audio)
for result in response.results:
print(result.alternatives[0].transcript)
Speech-to-Text APIの結果は下記のようになりました。
吹雪の中帰れなくなった二人は近くの小屋で寒さを凌いで寝ることにするその夜顔に吹き付ける雪見美濃吉が目を覚ますと恐ろしい目をした白ずくめ長い黒髪の美女がいた美濃吉の隣に出ていたの柵に女が白い息を吹きかけると模索は凍って死んでしまう女はみのきちにも息を吹きかけ様とみのきちに覆いかぶさるがしばらく美濃吉を見つめた後笑みを浮かべてこう囁くお前もあの老人のように殺してやろうと思ったがお前はまだ若く美しいから助けてやることにしただがお前は今夜のことを誰にも言ってはいけない誰かに言ったら命はないと思いそう言い残すと女は楽しめず吹雪の中に去っていった
句読点は出力されませんが、なかなか精度の良い結果だと思います。
以上のように、Google Cloud の Speech-to-Text APIを使うことで、簡単に音声データのテキスト化を試すことができます。