Add args for Dataset and improve
This commit is contained in:
@@ -6,9 +6,8 @@ from common.log import logger
|
||||
from common.subprocess_utils import run_script_with_log, second_elem_of
|
||||
|
||||
|
||||
def do_slice(model_name, normalize):
|
||||
def do_slice(model_name: str, min_sec: float, max_sec: float, input_dir="inputs"):
|
||||
logger.info("Start slicing...")
|
||||
input_dir = "inputs"
|
||||
output_dir = os.path.join("Data", model_name, "raw")
|
||||
cmd = [
|
||||
"slice.py",
|
||||
@@ -16,16 +15,18 @@ def do_slice(model_name, normalize):
|
||||
input_dir,
|
||||
"--output_dir",
|
||||
output_dir,
|
||||
"--min_sec",
|
||||
str(min_sec),
|
||||
"--max_sec",
|
||||
str(max_sec),
|
||||
]
|
||||
if normalize:
|
||||
cmd.append("--normalize")
|
||||
success, message = run_script_with_log(cmd)
|
||||
success, message = run_script_with_log(cmd, ignore_warning=True)
|
||||
if not success:
|
||||
return f"Error: {message}"
|
||||
return "音声のスライスが完了しました。"
|
||||
|
||||
|
||||
def do_transcribe(model_name):
|
||||
def do_transcribe(model_name, whisper_model, compute_type, language, initial_prompt):
|
||||
input_dir = os.path.join("Data", model_name, "raw")
|
||||
output_file = os.path.join("Data", model_name, "esd.list")
|
||||
result = run_script_with_log(
|
||||
@@ -37,6 +38,14 @@ def do_transcribe(model_name):
|
||||
output_file,
|
||||
"--speaker_name",
|
||||
model_name,
|
||||
"--model",
|
||||
whisper_model,
|
||||
"--compute_type",
|
||||
compute_type,
|
||||
"--language",
|
||||
language,
|
||||
"--initial_prompt",
|
||||
initial_prompt,
|
||||
]
|
||||
)
|
||||
return "音声の文字起こしが完了しました。"
|
||||
@@ -45,8 +54,6 @@ def do_transcribe(model_name):
|
||||
initial_md = """
|
||||
# 簡易学習用データセット作成ツール
|
||||
|
||||
**注意**:より精密で高品質なデータセットを作成したい・書き起こしをいろいろ修正したい場合は、[Aivis Dataset](https://github.com/litagin02/Aivis-Dataset)をおすすめします。書き起こし部分もかなり工夫されています。このツールはあくまでスライスして書き起こすという簡易的なことしかしていません。
|
||||
|
||||
Style-Bert-VITS2の学習用データセットを作成するためのツールです。与えられた音声からちょうどいい長さの発話区間を切り取りスライスし、それぞれの音声に対して文字起こしを行います。
|
||||
|
||||
## 必要なもの
|
||||
@@ -57,11 +64,13 @@ Style-Bert-VITS2の学習用データセットを作成するためのツール
|
||||
1. `inputs`フォルダ直下にwavファイルをすべて入れる
|
||||
2. `モデル名`を入力して、`音声のスライス`ボタンを押す
|
||||
3. 完了したら、`音声の文字起こし`ボタンを押す
|
||||
4. 出来上がった音声ファイルたちは`Data/{モデル名}/raw`に、書き起こしファイルは`Data/{モデル名}/esd.list`に保存されます。
|
||||
|
||||
細かいパラメータ調整とかがしたい人は、`slice.py`と`transcribe.py`を眺めて直接実行してください。
|
||||
## 注意
|
||||
|
||||
また、出来上がった音声ファイルたちは`Data/{モデル名}/raw`に、書き起こしファイルは`Data/{モデル名}/esd.list`に保存されます。
|
||||
書き起こしの結果をどれだけ修正すればいいかはデータセットに依存しそうです。
|
||||
- 長すぎる秒数(12-15秒くらいより長い?)のwavファイルは学習に用いられないようです。また短すぎてもあまりよくない可能性もあります。
|
||||
- 書き起こしの結果をどれだけ修正すればいいかはデータセットに依存しそうです。
|
||||
- 手動で書き起こしをいろいろ修正したり結果を細かく確認したい場合は、[Aivis Dataset](https://github.com/litagin02/Aivis-Dataset)もおすすめします。書き起こし部分もかなり工夫されています。ですがファイル数が多い場合などは、このツールで簡易的に切り出してデータセットを作るだけでも十分という気もしています。
|
||||
"""
|
||||
|
||||
with gr.Blocks(theme="NoCrypt/miku") as app:
|
||||
@@ -70,20 +79,45 @@ with gr.Blocks(theme="NoCrypt/miku") as app:
|
||||
with gr.Accordion("音声のスライス"):
|
||||
with gr.Row():
|
||||
with gr.Column():
|
||||
normalize = gr.Checkbox(label="スライスされた音声の音量を正規化する", value=True)
|
||||
min_sec = gr.Slider(
|
||||
minimum=0, maximum=10, value=2, step=0.5, label="この秒数未満は切り捨てる"
|
||||
)
|
||||
max_sec = gr.Slider(
|
||||
minimum=0, maximum=15, value=12, step=0.5, label="この秒数以上は切り捨てる"
|
||||
)
|
||||
slice_button = gr.Button("スライスを実行")
|
||||
result1 = gr.Textbox(label="結果")
|
||||
with gr.Row():
|
||||
with gr.Column():
|
||||
whisper_model = gr.Radio(
|
||||
["tiny", "base", "small", "medium", "large", "large-v2", "large-v3"],
|
||||
value="large-v3",
|
||||
)
|
||||
compute_type = gr.Dropdown(
|
||||
[
|
||||
"int8",
|
||||
"int8_float32",
|
||||
"int8_float16",
|
||||
"int8_bfloat16",
|
||||
"int16",
|
||||
"float16",
|
||||
"bfloat16",
|
||||
"float32",
|
||||
],
|
||||
value="bfloat16",
|
||||
)
|
||||
language = gr.Dropdown(["ja", "en", "zh"], value="ja")
|
||||
initial_prompt = gr.Textbox(label="初期プロンプトを入力してください(省略可)")
|
||||
transcribe_button = gr.Button("音声の文字起こし")
|
||||
result2 = gr.Textbox(label="結果")
|
||||
slice_button.click(
|
||||
do_slice,
|
||||
inputs=[model_name, normalize],
|
||||
inputs=[model_name, min_sec, max_sec],
|
||||
outputs=[result1],
|
||||
)
|
||||
transcribe_button.click(
|
||||
do_transcribe,
|
||||
inputs=[model_name],
|
||||
inputs=[model_name, whisper_model, compute_type, language, initial_prompt],
|
||||
outputs=[result2],
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user