はじめに
音声データに含まれる会話の内容を簡単に文字起こしすることができる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を使うことで、簡単に音声データのテキスト化を試すことができます。