Pythonとwhisperを使ってマイク入力による文字起こしをする(CPU)
whisperは、OpenAIが公開したオープンソースの素晴らしい音声認識モデルです。
これを使用することにより、ローカル環境で高精度な音声認識を行えます。
今回は、マイク入力でム文字起こしをしてみました。
この記事を参考にして動かしました。
詳しいことはこの記事を見てください。
nikkie-ftnext.hatenablog.com
仕組み
マイク入力
↓
「Speech Recognition」で音声データ作成
↓
「SoundFile」で音声データの読み込み
↓
「whisper」で文字起こし
マイク入力には、「Speech Recognition」と呼ばれるPythonのライブラリを使用する。
「Speech Recognition」を使用すると、音の波形が小さくなったところで音声ファイルを切ってくれる。
また、「Speech Recognition」の依存関係である「PyAudio」が2022年12月26日に新しいバージョン(0.2.13)を出したためPython3.8以上でも使えるようになりました。(やったー)
続いて「SoundFile」で音声データの読み込み、「whisper」で文字起こしを行う。
環境
・Ubuntu20.04
・Python3.8.10
・Intel CPU
必要なものをインストール
whisperをインストール
以下のコマンドでwhisperをインストールする。
pip install git+https://github.com/openai/whisper.git
依存関係のffmpegをインストールする。
(無くても動く場合もある)
pip install ffmpeg-python
Speech Recognitionをインストール
pip install SpeechRecognition
依存関係のPyAudioをインストールする。
sudo apt install python3-pyaudio
その他必要なものをインストール
SoundFile
pip install soundfile
numpy
pip install numpy
ソースコード
from io import BytesIO import numpy as np import soundfile as sf import speech_recognition as sr import whisper if __name__ == "__main__": model = whisper.load_model("medium") recognizer = sr.Recognizer() while True: # マイクから音声を取得 with sr.Microphone(sample_rate=16_000) as source: print("なにか話してください") audio = recognizer.listen(source) print("音声処理中 ...") # 音声データをWhisperの入力形式に変換 wav_bytes = audio.get_wav_data() wav_stream = BytesIO(wav_bytes) audio_array, sampling_rate = sf.read(wav_stream) audio_fp32 = audio_array.astype(np.float32) result = model.transcribe(audio_fp32, fp16=False) print(result["text"])
whisperのモデルは、medium
が良さそうです。
whisperの出力はJSON形式であり、今回必要なものは認識した文字列です。
result["text"]
と書くことで、認識した文字列だけを抽出することができます。