はじめに
前回は、whisperを使ってアプリを作ってみました。
今回は、オリジナルより4倍高速だと言われるfaster-whisperを使って作り直してみたいと思います。
事前準備
1.FFMPEGをダウンロードして使えるようにします。
①. 下記よりダウンロードして解凍した後、「C:\Tools」にコピーする。
②. 環境変数「PATH」に以下を追加する。
C:\Tools\ffmpeg\bin
2.仮想環境を作成しましょう。
conda create -n tmp1 activate tmp1 conda install pip pip install ffmpeg-python pip install git+https://github.com/guillaumekln/faster-whisper.git
実際のプログラム
前回のプログラムを少しいじっただけです。
今回は、早くなったということで、「large-v2」を使っています。
また私のラックトップは、GPU積んでないので、CPUで動くようにしていますので、必要に応じて変更してください。
import sys from faster_whisper import WhisperModel import ffmpeg import re model_size = "large-v2" def whisper_mp3(attach): for i, file in enumerate(attach): # 対象ファイル print(f'{i}:{file}') # MP3ファイル以外は変換する。 if not file.endswith('.mp3'): file = ffmpeg_mp3(file) print('- MP3変換:', file) outfile = re.sub(r'\.(mp3|MP3)$', '.txt', file) # print(outfile) result = whisper_proc(file) # with open(f'{dname}\\{outfile_name}', "w") as f: with open(outfile, "w") as f: f.write(result) def add_line(s): new_s = s s_count = len(s) s_max_count = 40 if s_count >= s_max_count: if (s_count - s_max_count) >= 3: # 15文字以上、かつ、2行目が3文字以上あれば、改行する # つまり、18文字以上であれば、15文字で改行する new_s = s[:s_max_count] + "\n" + s[s_max_count:] return new_s + "\n" def whisper_proc(file): model = WhisperModel(model_size, device="cpu", compute_type="int8") segments, info = model.transcribe(file, beam_size=5) subs = [] for data in segments: print("[%.2fs -> %.2fs] %s" % (data.start, data.end, data.text)) text = add_line(data.text) subs.append(text) return ''.join(subs) def ffmpeg_mp3(file): result_file = file + '.mp3' ffmpeg.run( ffmpeg.output( ffmpeg.input(file), result_file) ) return result_file if __name__ == '__main__': whisper_mp3(sys.argv[1:]) print('文字起こし処理が完了しました。')
EXE化するために
下記のコマンドを実行して、EXE化してみましょう。
pip install pyinstaller pyinstaller demo_firstwhisper.py --onefile
まとめ
いかがだったでしょうか?
自宅のノートでも、かなり正確に文字起こしが出来るようになりました。
是非、皆さんもお試しください。