音声から文字を起こすサービス「Google Cloud Speech-to-Text API」をPythonで利用してみる
2023年11月20日 Posted 野々瀨(フロントエンドエンジニア)
近年、いろいろなところで音声認識システムが活用されています。例えば、AppleのSiriやAmazonのAlexa、UDトーク、その他AIロボットなど。そんな音声認識システムのサービスを利用して、Pythonで音声情報から文字を起こす方法をご紹介します。
音声から文字を起こすAPIサービス
音声から文字を起こすAPIを提供しているサービスは、次のように幾つかあります。
- IBM Watson Speech to Text
- Google Cloud Speech-to-Text
- Microsoft Azure 音声テキスト変換
- AWS Amazon Transcribe
- OpenAI Whisper API
- アドバンスト・メディア AmiVoice API
- JavaScript Web Speech API (SpeechRecognition API)
今回はGoogle CloudのSpeech-to-Textというサービスを利用した例をご紹介します。
Speech-to-Textサービスについて
Google CloudのSpeech-to-Textというサービスは、音声データを基に文字を起こしてくれるAPIサービスです。マイクからのリアルタイムな音声や音声ファイルから文字を起こすことができます。
料金
Google CloudのSpeech-to-Textは、1カ月あたりの処理時間(分)で料金が決まります。1カ月に0~60分までの時間であれば無料で利用することができ、60分を超過すると課金されます。また、処理の内容によっても料金が異なります。詳しくは、次の料金表ページをご覧ください。
この記事を書いている2023年時点では、初回で300ドル分の無料トライアルクレジットが用意されていますので、お試しの際はぜひご利用ください。
事前準備
次の内容を事前にご準備ください。
- Google Cloud Platformのアカウントの作成
- Google Cloudのプロジェクトの作成
- 支払い情報の設定
- Pythonとpipのインストール
Google Cloudの設定
APIの有効化
「+APIとサービスの有効化」リンクを押します。
検索の入力欄に「Speech to Text」を入力し、Enterキーを押します。
結果一覧にある「Cloud Speech-to-Text API」を押します。
「有効にする」ボタンを押します。この時、プロジェクトに対して支払い設定がされていない場合は、「課金が必要」というダイアログが表示されますので、「課金を有効にする」ボタンを押して、「請求先アカウントを作成」してください。
Speech-to-Text APIの詳細画面が表示されれば完了です。
サービスアカウントの作成
Google Cloud consoleでプロジェクトを選択し、トップ画面からクイック アクセスの「IAMと管理」リンクを押します。
左側のサイドメニューにあります「サービス アカウント」メニューを押します。
「+サービス アカウントを作成」リンクを押します。
「サービス アカウント名」、「サービス アカウント ID」を入力し、「作成して続行」ボタンを押します。この時、「サービス アカウント ID」は、「サービス アカウント名」を入力することで、自動的に作成されますので、任意で決めなくても、そのまま自動生成されたIDで作成することも可能です。
なお、後ほど使用するため、「サービス アカウント ID」の下に表示されているメールアドレスをコピーしておいてください(後からでも確認・コピーすることは可能です)。
サービスアカウントにプロジェクトへの付与する権限を指定することができます。今回は「続行」ボタンを押します。
サービスアカウントへアクセスを許可するユーザーを指定することができます。今回は「完了」ボタンを押します。
一覧に戻りますと、サービスアカウントが作成され、完了となります。
メールアドレスをコピーし忘れた場合はここでコピーするか、「メール」列のリンクを押すと詳細画面が表示されますので、そちらでもコピーすることができます。
認証情報をダウンロード
作成したサービスアカウントの詳細画面を開き、「キー」タブを押します。
「鍵を追加」ボタンを押して、表示されたドロップダウンメニューから「新しい鍵を作成」メニューを押します。
「キーのタイプ」項目の選択肢から「JSON」を選択し、「作成」ボタンを押します。
作成されるとダウンロードが自動的に行われます。完了しますと、「秘密鍵がパソコンに保存されました」と表示されますので、「閉じる」ボタンを押します。
ライブラリのインストール
google-cloud-speechというPythonのライブラリを、次のコマンドを入力し実行してインストールします。
pip install google-cloud-speech
ライブラリについては次の公式ページをご覧ください。Speech-to-Text クライアント ライブラリ
試してみる
各ライブラリを読み込みます。
import os, io
from google.cloud import speech
ダウンロードしたサービスアカウントの認証情報のファイルパスを、環境変数に設定します。
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = './data/xxx.json'
クライアントのインスタンスを生成します。
client = speech.SpeechClient()
音声ファイルを読み込んで音声データを取得します。
with io.open('./media/audio.wav', 'rb') as f:
content = f.read()
エンコードする音声データを設定します。
audio = speech.RecognitionAudio(content=content)
音声を処理する方法を設定します。
config = speech.RecognitionConfig(
encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
enable_automatic_punctuation=True,
audio_channel_count=2,
language_code='ja-JP'
)
指定されている引数は次のような内容です。
引数 | 型 | 説明 |
---|---|---|
encoding | enum | 音声のコーデックを指定します。音声ファイルがサポートされているコーデックでないとエラーとなります。詳しくは次のページをご覧ください。AudioEncoding(英語サイト) |
enable_automatic_punctuation | 句読点を付けるかどうかを指定します。日本語の場合、音声の途中の句読点がうまくつかないことが多いです。 | |
audio_channel_count | integer | 音声のチャンネル数を指定します。 |
language_code | string | 音声が何の言語であるかを指定します。詳しくは次のページをご覧ください。言語サポート |
speech.RecognitionConfig
メソッドの詳しい指定方法は次のページをご覧ください。
client.recognize
メソッドで音声から文字への抽出の実行します。
response = client.recognize(request={
'config': config,
'audio': audio
})
ちなみに音声が60秒を超える場合は、client.long_running_recognize
メソッドを使用します。
response = client.long_running_recognize(request={
'config': config,
'audio': audio
})
抽出した結果を出力します。
for result in response.results:
print(result.alternatives[0].transcript)
response.results
に抽出した文字を音声の区切りごとのデータを返します。抽出した文字はそのうちのalternatives
プロパティに格納されていて、文章の区切りごとに格納されます。さらにtranscript
プロパティが抽出した文字、confidence
プロパティが文字の信頼度として返します。
response.resultsについて詳しく知りたい方は次のページをご覧ください。Response body(英語サイト)
これをtest.pyとして保存して実行すると、例えば音声が「これはテストです」としゃべっていた場合、次のように出力されます。
以上で音声ファイルから文字を抽出することができました。これらのコードをまとめると次のようになります。
# ライブラリの読み込み
import os, io
from google.cloud import speech
# 認証情報のファイルパスを環境変数に設定
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'xxx.json'
# クライアントのインスタンスを生成
client = speech.SpeechClient()
# 音声ファイルを読み込む
with io.open('./media/audio.wav', 'rb') as f:
content = f.read()
# エンコードする音声データを設定
audio = speech.RecognitionAudio(content=content)
# 音声を処理する方法の設定
config = speech.RecognitionConfig(
encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
enable_automatic_punctuation=True,
audio_channel_count=2,
language_code='ja-JP'
)
# 抽出の実行
response = client.recognize(request={
'config': config,
'audio': audio
})
# 実行結果
for result in response.results:
print(result.alternatives[0].transcript)
なお、Pythonのライブラリの詳しい使い方については、次の公式ドキュメントページをご覧ください。
https://cloud.google.com/python/docs/reference/speech/latest