Feat: HF whisper for transcribing (faster than faster-whisper)

This commit is contained in:
litagin02
2024-03-14 15:10:08 +09:00
parent 4f60a3d5d5
commit b1972a3d3d
4 changed files with 189 additions and 40 deletions

View File

@@ -41,28 +41,40 @@ def do_slice(
def do_transcribe(
model_name, whisper_model, compute_type, language, initial_prompt, device
model_name,
whisper_model,
compute_type,
language,
initial_prompt,
device,
use_hf_whisper,
batch_size,
num_beams,
):
if model_name == "":
return "Error: モデル名を入力してください。"
success, message = run_script_with_log(
[
"transcribe.py",
"--model_name",
model_name,
"--model",
whisper_model,
"--compute_type",
compute_type,
"--device",
device,
"--language",
language,
"--initial_prompt",
f'"{initial_prompt}"',
]
)
cmd = [
"transcribe.py",
"--model_name",
model_name,
"--model",
whisper_model,
"--compute_type",
compute_type,
"--device",
device,
"--language",
language,
"--initial_prompt",
f'"{initial_prompt}"',
"--num_beams",
str(num_beams),
]
if use_hf_whisper:
cmd.append("--use_hf_whisper")
cmd.extend(["--batch_size", str(batch_size)])
success, message = run_script_with_log(cmd)
if not success:
return f"Error: {message}. しかし何故かエラーが起きても正常に終了している場合がほとんどなので、書き起こし結果を確認して問題なければ学習に使えます。"
return "音声の文字起こしが完了しました。"
@@ -165,6 +177,9 @@ def create_dataset_app() -> gr.Blocks:
label="Whisperモデル",
value="large-v3",
)
use_hf_whisper = gr.Checkbox(
label="HuggingFaceのWhisperを使う使うと速度が速いがVRAMを多く使う",
)
compute_type = gr.Dropdown(
[
"int8",
@@ -186,6 +201,23 @@ def create_dataset_app() -> gr.Blocks:
value="こんにちは。元気、ですかー?ふふっ、私は……ちゃんと元気だよ!",
info="このように書き起こしてほしいという例文(句読点の入れ方・笑い方・固有名詞等)",
)
num_beams = gr.Slider(
minimum=1,
maximum=10,
value=5,
step=1,
label="ビームサーチのビーム数",
info="小さいほど速度が上がり以前は5、精度は少し落ちるかもしれないがほぼ変わらない体感",
)
batch_size = gr.Slider(
minimum=1,
maximum=128,
value=32,
step=1,
label="バッチサイズ",
info="大きくすると速度が速くなるがVRAMを多く使う",
visible=False,
)
transcribe_button = gr.Button("音声の文字起こし")
result2 = gr.Textbox(label="結果")
slice_button.click(
@@ -210,8 +242,16 @@ def create_dataset_app() -> gr.Blocks:
language,
initial_prompt,
device,
use_hf_whisper,
batch_size,
num_beams,
],
outputs=[result2],
)
use_hf_whisper.change(
lambda x: gr.update(visible=x),
inputs=[use_hf_whisper],
outputs=[batch_size],
)
return app