【Python】SpeechRecognitionでマイク音声を録音・文字起こし

今回やりたいことは、発話した内容を手元のPCでマイクを通して録音するということです。

以前紹介したWhisper APIを利用するにあたって、音声ファイルが必要になります。発話した内容を即座に録音して、Whisper APIに渡して文字起こしする一連の処理のために録音方法を模索しました。

【C#】Whisper API(音声文字起こし)の使い方
Whisper APIは、OpenAIが開発した音声を文字起こし(Speech to Text)するサービスです。

もともとWh…

いくつも手段はありますが、一番使いやすいと感じたSpeechRecognitionを紹介します。

SpeechRecognitionのGitHubリポジトリ

【検証環境】Python3.10

SpeechRecognition のインストール

今回使うのは、SpeechRecognitionというライブラリです。

マイクの音声を録音する際に、pyaudioも必要になります。

pip install SpeechRecognition pyaudio

SpeechRecognition の使い方

以降はマイクの音声を利用するため、マイク入力がない場合エラーになります。

マイク入力から音声を録音

下記コードを実行すると、音声の録音を開始します。話し終わると、自動で録音を終了します。

録音が完了すると、audio.wavというファイルが生成されます。

import speech_recognition as sr

recognizer = sr.Recognizer()
try:
    with sr.Microphone(device_index=0) as source:
        ## 録音開始
        print("録音開始・・・")
        audio = recognizer.listen(source)
        ## 音声ファイル保存
        with open("audio.wav", "wb") as f:
            f.write(audio.get_wav_data())
            print("録音終了")
except Exception as e:
    print(e)

簡単に録音ができて、素晴らしいですね!

マイク入力した音声を文字起こし

録音処理に加えて、文字起こし処理を追加します。

import speech_recognition as sr

recognizer = sr.Recognizer()
try:
    with sr.Microphone() as source:
        print("なにか話してください")
        ## 録音開始
        audio = recognizer.listen(source)
        ## 文字起こし
        text = recognizer.recognize_google(audio, language="ja-JP")
        print(text)
        ## 音声ファイル保存
        with open("audio.wav", "wb") as f:
            f.write(audio.get_wav_data())
            print("録音終了")
except Exception as e:
    print(e)

追加したのは、この1行だけです。

text = recognizer.recognize_google(audio, language="ja-JP")

実際に起動したところ、問題なく文字起こしされています。

その他の設定

設定値などについての解説はSpeech Recognition Library Reference

いくつか使いそうなものを抜粋します

pause_threshold

`pause_threshold`は、録音を終了させるまでの無音の秒数を設定します。

デフォルトでは0.8で設定されています。

少しゆっくり話す場合などは、長めに設定するようにします。

import speech_recognition as sr

recognizer = sr.Recognizer()
// 無音になってから2秒経つまで録音を止めない
recognizer.pause_threshold = 2

timeout

`timeout`は話し始めるまでの待機時間を指定します。

デフォルトではNoneで、無限に待つようになっています。

下記の例では、5秒間話すまで待機します。

audio = recognizer.listen(source, timeout=5)

5秒間発話が確認されなければタイムアウトの例外になります。

energy_threshold

`energy_threshold`は録音対象に含める音量です。

例えば、雑音が入ってしまう場合などに設定値を高くすることで、小さい音は認識させないようにできます。

周囲の雑音が気になる場所では、設定値を適切に調整することで対応できます。

デフォルトでは300で、環境によって300~4000の間で調整するようにします。

recognizer.energy_threshold = 4000

トラブルシューティング

うまく動かなかったりした場合はこちらのトラブルシューティングを参照

参考サイト

【Python】音声認識ライブラリのSpeechRecognitionでサクッと文字起こし

声をPythonに聴かせて(マイクから入力した声をWhisperに、何度でも認識させよう)

Leave a Reply

Your email address will not be published. Required fields are marked *