Files
chaojie-ComfyUI_StreamingT2V/thirdparty/modelscope/tools/speech_tts_autolabel.py
T
2024-04-08 06:24:30 +08:00

144 lines
5.3 KiB
Python

# These codes are copied from modelscope revision c58451baead80d83281f063d12fb377fad415257
import argparse
import os
import sys
import zipfile
from modelscope.hub.check_model import check_local_model_is_latest
from modelscope.hub.snapshot_download import snapshot_download
from modelscope.utils.constant import ThirdParty
from modelscope.utils.logger import get_logger
try:
from tts_autolabel import AutoLabeling
except ImportError:
raise ImportError('pls install tts-autolabel with \
"pip install tts-autolabel -f \
https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html"'
)
DEFAULT_RESOURCE_MODEL_ID = 'damo/speech_ptts_autolabel_16k'
logger = get_logger()
# Suggest params:
# --para_ids all --resource_revision v1.0.2 --input_wav data/test/audios/autolabel
# --work_dir ../ptts/test/diff2 --develop_mode 1 --stage 1 --process_num 2 --no_para --disable_enh
def run_auto_label(input_wav,
work_dir,
para_ids='all',
resource_model_id=DEFAULT_RESOURCE_MODEL_ID,
resource_revision=None,
gender='female',
stage=1,
process_num=4,
develop_mode=0,
has_para=False,
enable_enh=False):
if not os.path.exists(input_wav):
raise ValueError(f'input_wav: {input_wav} not exists')
if not os.path.exists(work_dir):
raise ValueError(f'work_dir: {work_dir} not exists')
def _download_and_unzip_resource(model, model_revision=None):
if os.path.exists(model):
model_cache_dir = model if os.path.isdir(
model) else os.path.dirname(model)
check_local_model_is_latest(
model_cache_dir,
user_agent={ThirdParty.KEY: 'speech_tts_autolabel'})
else:
model_cache_dir = snapshot_download(
model,
revision=model_revision,
user_agent={ThirdParty.KEY: 'speech_tts_autolabel'})
if not os.path.exists(model_cache_dir):
raise ValueError(f'model_cache_dir: {model_cache_dir} not exists')
zip_file = os.path.join(model_cache_dir, 'model.zip')
if not os.path.exists(zip_file):
raise ValueError(f'zip_file: {zip_file} not exists')
z = zipfile.ZipFile(zip_file)
z.extractall(model_cache_dir)
target_resource = os.path.join(model_cache_dir, 'model')
return target_resource
model_resource = _download_and_unzip_resource(resource_model_id,
resource_revision)
auto_labeling = AutoLabeling(
os.path.abspath(input_wav),
model_resource,
False,
os.path.abspath(work_dir),
gender,
develop_mode,
has_para,
para_ids,
stage,
process_num,
enable_enh=enable_enh)
ret_code, report = auto_labeling.run()
return ret_code, report
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument(
'--para_ids',
default='all',
help=
'you can use this variable to config your auto labeling paragraph ids, \
all means all in the dir, none means no paragraph 1 means 1 para only, \
1 2 means 1 and 2, transcipt/prosody/wav should be named exactly the same!!!'
)
parser.add_argument(
'--resource', type=str, default=DEFAULT_RESOURCE_MODEL_ID)
parser.add_argument(
'--resource_revision',
type=str,
default=None,
help='resource directory')
parser.add_argument('--input_wav', help='personal user input wav dir')
parser.add_argument('--work_dir', help='autolabel work dir')
parser.add_argument(
'--gender', default='female', help='personal user gender')
parser.add_argument('--develop_mode', type=int, default=1)
parser.add_argument(
'--stage',
type=int,
default=1,
help='auto labeling stage, 0 means qualification and 1 means labeling')
parser.add_argument(
'--process_num',
type=int,
default=4,
help='kaldi bin parallel execution process number')
parser.add_argument(
'--has_para', dest='has_para', action='store_true', help='paragraph')
parser.add_argument(
'--no_para',
dest='has_para',
action='store_false',
help='no paragraph')
parser.add_argument(
'--enable_enh',
dest='enable_enh',
action='store_true',
help='enable audio enhancement')
parser.add_argument(
'--disable_enh',
dest='enable_enh',
action='store_false',
help='disable audio enhancement')
parser.set_defaults(has_para=True)
parser.set_defaults(enable_enh=False)
args = parser.parse_args()
logger.info(args.enable_enh)
ret_code, report = run_auto_label(args.input_wav, args.work_dir,
args.para_ids, args.resource,
args.resource_revision, args.gender,
args.stage, args.process_num,
args.develop_mode, args.has_para,
args.enable_enh)
logger.info(f'ret_code={ret_code}')
logger.info(f'report={report}')