はじめに
前回は、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
まとめ
いかがだったでしょうか?
自宅のノートでも、かなり正確に文字起こしが出来るようになりました。
是非、皆さんもお試しください。