speech_recognitionを使用したpythonによる音声入力


まずはマイクのデバイスIDを探す
以下のプログラムを実行すると表示される一覧から使えるマイクのIDを探す。

import speech_recognition as sr

for index, name in enumerate(sr.Microphone.list_microphone_names()):
    print("Microphone with name \"{1}\" found for `Microphone(device_index={0})`".format(index, name))

で、本体のプログラム

import speech_recognition as sr

r = sr.Recognizer()
r.dynamic_energy_threshold = False

loopFlag = 1


while loopFlag == 1:

    with sr.Microphone(device_index=0) as source:
        print('録音中: ')
        audio = r.listen(source)

    try:
        print('OK!')
        text = r.recognize_google(audio, language='ja-JP')
        print(text)
        if 'ストップ' in text:
            loopFlag = 0
    except:
        print("録音されていません")



補足)
・loopFlagは入力の永久ループから抜ける処理に使っている
・device_index=0は最初に探したマイクのデバイス番号なので状況によっては0ではない可能性はある。
・audio = r.listen(source)でマイクからの音声をaudioに代入する。
・listen(mic, timeout=5.0)などとタイムアウトを設定できるが5.0より小さくするとエラーを吐くようになるので注意。
・tryの中のrecognize_googleの部分で音声をテキストに変換する。変換された文字列はtextに代入される。
・永久ループをとめるため、変換結果にストップという文字列が入っているとloopFlagを0にして次のループでwhile分から抜ける。
・何かしらのトラブルで変換できなかった場合except内が処理されるが、try文中やそこで使っている関数内でのエラーでも正規のエラー表示はなくexcept中の処理が起きるだけになるのでデバッグ中は気を付ける。