第6回 音声認識

一覧に戻る

第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

処理の流れ

以下の流れで実装します。

  1. ファイルをGoogle Colaboratoryにアップロード
  2. 各種情報を設定
  3. 音声認識を実行

実装

ファイルを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
本日はご来場いただきまして、誠にありがとうございます。
開演に先立ちまして、お客様にお願い申し上げます。
携帯電話など音の出るものの電源はお切りください。
また許可のない録音撮影はご遠慮ください。
皆様のご協力をよろしくお願いいたします。
--- 音声認識 正常終了 ---

上記のような結果が得られ、正常に認識されたことが確認できました。


今回はこれで以上になります。次回のテーマはテキストの感情認識の予定です。

最後までお読みいただきありがとうございました。それでは引き続き次回もよろしくお願いいたします。


一覧に戻る