第6回 音声認識
今回のテーマは音声認識です。音声認識とは、人間の声などをコンピュータで認識・解析する技術のことで、文字起こしやAIアシスタント、音声翻訳などに応用されています。音声認識の概要については解説動画をご覧ください。
今回の実装のソースコードはこちらからダウンロードできます。
目次
解説動画
概要
- 実装内容
- Microsoft AzureのSpeech to Textを用いて音声データから文字起こしをし、テキストデータを生成します。
- 実装環境
- Google Colaboratoryを使用します。Google Colaboratoryに関する説明はこちらをご覧ください。
- データ
- 効果音ラボ様の声素材の一部を使用させていただきました。再配布禁止の為、ダウンロードする場合は下記リンクからお好きなものをダウンロードして使用してください。
https://soundeffect-lab.info/sound/voice/info-lady1.html
- 効果音ラボ様の声素材の一部を使用させていただきました。再配布禁止の為、ダウンロードする場合は下記リンクからお好きなものをダウンロードして使用してください。
Speech to Text
今回使用するクラウドAPIはMicrosoft AzureのSpeech to Textです。
Speech to Textは音声認識により、音声データをテキストデータに変換します。
利用にはAzureのエンドポイントを作成する必要があります。エンドポイントはこちらから作成できます。(事前にAzureの無料アカウントを作成する必要があります。)
APIリファレンス:
https://docs.microsoft.com/ja-jp/python/api/azure-cognitiveservices-speech/azure.cognitiveservices.speech?view=azure-python
処理の流れ
以下の流れで実装します。
- ファイルをGoogle Colaboratoryにアップロード
- 各種情報を設定
- 音声認識を実行
実装
ファイルをColaboratoryにアップロードしておきます。アップロード方法はこちらを参考にしてください。なお、今回使用するファイルは「sample.wav」とし、/content/直下(sample_dataディレクトリと同じ階層)にアップロードしています。
Azure Speech ServicesのPython用SDKである、azure-cognitiveservices-speechをインストールします。
!pip install azure-cognitiveservices-speech
Collecting azure-cognitiveservices-speech Downloading azure_cognitiveservices_speech-1.21.0-cp37-cp37m-manylinux1_x86_64.whl (2.1 MB) |████████████████████████████████| 2.1 MB 5.1 MB/s Installing collected packages: azure-cognitiveservices-speech Successfully installed azure-cognitiveservices-speech-1.21.0
設定用クラスSpeechConfigに以下の3つの情報を設定します。
- APIキー
- リージョン(サーバー位置)
- 認識する言語
APIキーとリージョン(サーバー位置)はサービス契約時に取得したものになります。認識する言語は日本語なので「ja-JP」とします。
import azure.cognitiveservices.speech as speechsdk
# 作成したエンドポイントのキーとリージョンを入力してください
speech_key = 'XXXXX'
service_region = 'japaneast'
speech_recognition_language = 'ja-JP'
speech_config = speechsdk.SpeechConfig(subscription=speech_key,
region=service_region,
speech_recognition_language=speech_recognition_language)
次に、音声ファイルの設定用クラスAudioConfigにファイル情報(ファイルのパス)を設定します。
audio_filename = '/content/sample.wav'
audio_config = speechsdk.audio.AudioConfig(filename=audio_filename)
ここで、音声認識用クラスSpeechRecognizerを生成します。生成時に、先ほど設定したspeech_configとaudio_configを引数として渡します。
# SpeechRecognizerのインスタンス生成
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config,
audio_config=audio_config)
SpeechRecognizerは短い文章ごとに音声認識を行います。そのため、while文で認識結果が存在しているかどうかを判定し、存在していればまた次の文章の認識を始め、存在していなければそこで処理を終了するようにします。
認識結果はresultに渡していますが、result.textで認識結果のテキストを出力し、result.reasonで認識結果のありなしを確認しています。
# 認識結果がなくなるまで音声認識を続行
on_recognition = True
while on_recognition:
# 音声認識実施
result = speech_recognizer.recognize_once()
# 認識結果ありの場合
if result.reason == speechsdk.ResultReason.RecognizedSpeech:
print(result.text)
# 認識結果なしの場合
elif result.reason == speechsdk.ResultReason.NoMatch:
print('--- 音声認識 正常終了 ---')
on_recognition = False
# その他、エラー等で中止した場合
else:
print('--- 音声認識 中止 ---')
on_recognition = False
本日はご来場いただきまして、誠にありがとうございます。 開演に先立ちまして、お客様にお願い申し上げます。 携帯電話など音の出るものの電源はお切りください。 また許可のない録音撮影はご遠慮ください。 皆様のご協力をよろしくお願いいたします。 --- 音声認識 正常終了 ---
上記のような結果が得られ、正常に認識されたことが確認できました。
今回はこれで以上になります。次回のテーマはテキストの感情認識の予定です。
最後までお読みいただきありがとうございました。それでは引き続き次回もよろしくお願いいたします。