搭建视频教程:开源项目sambert语言合成,手把手教你搭建和训练效果最好的中英混TTS项目,实现个性化语音合成。_哔哩哔哩_bilibili
ModelScope 魔搭社区 # sambert,支持中文、英文、中英混音频的语言合成。
个性化语音合成-自动标注模型-16k # 数据标注,支持中文、英文、中英混音频的标注
FRCRN语音降噪-单麦-16k # 若声音有噪声,可以使用该方法去噪。本人尝试过使用demucs,处理电流声效果不好。
GitHub - alibaba-damo-academy/FunASR: A Fundamental End-to-End Speech Recognition Toolkit 语音转文本,需要提取音频的文本作为训练素材,可以使用该模型进行提取,如果是视频,则需要先转换为音频进行处理(使用ffmpeg命令行进行转换。ffmpeg -i zwy.mp4 zwy.mp3)
"""
克隆仓库
进入目录
创建环境
"""
git clone https://github.com/alibaba-damo-academy/KAN-TTS.git
cd KAN-TTS
# 防止使用pip安装时出现网络问题,建议切换国内pip源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 创建虚拟环境
conda env create -f environment.yaml(此步可能报错,一些包可能需要单独安装)
# 安装kantts依赖
pip install kantts -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
# 激活虚拟环境
conda activate maas
准备带有interval、prosody、wav三个文件夹的数据。
如果不需要用自己的声音,可以使用aishell3,参考上面给的sambert文档。
没有这种格式的数据是无法训练的,使用魔搭社区中的自动数据标注方法标注自己的声音。
# 建议新建一个环境进行
# conda deactivate # 退出当前环境
# conda create -n autolabel # 创建环境
# conda activate autolabel # 激活环境
pip install -U tts-autolabel -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
调用接口运行自动标注
from modelscope.tools import run_auto_label
input_wav = '/tmp/test_wavs' # 音频文件路径
work_dir = '/tmp/output_dir' # 输出路径
ret, report = run_auto_label(
input_wav = input_wav,
work_dir = work_dir,
resource_revision = "v1.0.7"
)
print(report)
如果你的声音不是16k采样,则需要做重采样处理(可以使用下面操作,也可以自己使用ffmpeg命令行操作)。
注意aishell3是声音文件夹上再套的一层文件夹,该特征提取命令是将文件夹中的所有的声音均进行重采样。
# 拉取元数据仓库,并做重采样处理
git clone https://www.modelscope.cn/datasets/speech_tts/AISHELL-3.git
./AISHELL-3/aishell_resample.sh aishell3 aishell3_16k 16000 # aishell3为输入文件夹,aishell3_16k为输出文件夹。
这里我们以16k采样率为例kantts/configs/audio_config_16k.yaml
运行以下命令来进行特征提取,其中--speaker
代表该数据集对应发音人的名称,用户可以随意命名。
# 特征提取
python kantts/preprocess/data_process.py --voice_input_dir aishell3_16k/SSB0009 --voice_output_dir training_stage/SSB0009_feats --audio_config kantts/configs/audio_config_16k.yaml --speaker SSB0009
至此数据准备工作就算完成了。
下面训练完声学模型和声码器后即可合成语音。
克隆预训练模型
使用git命令拉取模型,在拉取前,首先你需要安装git-lfs, 具体的安装教程见Git Large File Storage,安装完成后执行以下命令。
# 克隆预训练模型
git clone -b pretrain http://www.modelscope.cn/speech_tts/speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_16k.git
KAN-TTS的训练脚本是配置驱动的,我们使用预训练模型的sambert/config.yaml
作为训练配置文件。
此外根据在数据准备阶段对数据集做的命名,我们还需要修改配置文件中的speaker_list
配置项:
# 将speaker_list其中一个发音人替换为上面命名的发音人
linguistic_unit:
cleaners: english_cleaners
lfeat_type_list: sy,tone,syllable_flag,word_segment,emo_category,speaker_category
speaker_list: SSB0009,F74,FBYN,FRXL,M7,xiaoyu
以及train_max_steps
配置项,我们希望在basemodel 980k的基础上,继续微调120k
# 将train_max_steps改为1100100 ... train_max_steps: 1100100 ...
完成上述必要的配置项修改后,我们就可以使用以下命令训练声学模型了:
# 训练声学模型
CUDA_VISIBLE_DEVICES=0 python kantts/bin/train_sambert.py --model_config speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_16k/basemodel_16k/sambert/config.yaml --resume_path speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_16k/basemodel_16k/sambert/ckpt/checkpoint_980000.pth --root_dir training_stage/SSB0009_feats --stage_dir training_stage/SSB0009_sambert_ckpt
与声学模型类似,声码器的训练脚本也是配置驱动的,你可以使用预训练模型目录下的hifigan/config.yaml
作为训练配置文件,另外声学模型和声码器的微调并没有依赖关系,两者可以同时进行。 我们希望在basemodel 2000k steps的基础上再微调100k steps, 但不保留state,修改hifigan/config.yaml
配置项train_max_steps
# 将train_max_steps改为100100 ... train_max_steps: 100100 ...
# 训练声码器
CUDA_VISIBLE_DEVICES=0 python kantts/bin/train_hifigan.py --model_config speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_16k/basemodel_16k/hifigan/config.yaml --resume_path speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_16k/basemodel_16k/hifigan/ckpt/checkpoint_2000000.pth --root_dir training_stage/SSB0009_feats --stage_dir training_stage/SSB0009_hifigan_ckpt
在声学模型和声码器微调完毕后,我们就可以使用产出的模型文件来合成语音了,在此之前需要做一些准备工作。
将我们想要合成的文本写入一个文件test.txt
,每句话按行分隔,如下所示
徐玠诡谲多智,善揣摩,知道徐知询不可辅佐,掌握着他的短处以归附徐知诰。 许乐夫生于山东省临朐县杨善镇大辛庄,毕业于抗大一分校。 宣统元年(1909年),顺德绅士冯国材在香山大黄圃成立安洲农务分会,管辖东海十六沙,冯国材任总理。 学生们大多住在校区宿舍,通过参加不同的体育文化俱乐部及社交活动,形成一个友谊长存的社会圈。 学校的“三节一会”(艺术节、社团节、科技节、运动会)是显示青春才华的盛大活动。 雪是先天自闭症患者,不懂与人沟通,却拥有灵敏听觉,而且对复杂动作过目不忘。 勋章通过一柱状螺孔和螺钉附着在衣物上。 雅恩雷根斯堡足球俱乐部()是一家位于德国雷根斯堡的足球俱乐部,处于德国足球丙级联赛。 亚历山大·格罗滕迪克于1957年证明了一个深远的推广,现在叫做格罗滕迪克–黎曼–罗赫定理。
# 运行合成语音
CUDA_VISIBLE_DEVICES=0 python kantts/bin/text_to_wav.py --txt test.txt --output_dir res/SSB0009_syn --res_zip speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_16k/resource.zip --am_ckpt training_stage/SSB0009_sambert_ckpt/ckpt/checkpoint_1100000.pth --voc_ckpt training_stage/SSB0009_hifigan_ckpt/ckpt/checkpoint_2100000.pth --speaker SSB0009
完成后在res/SSB0009_syn/res_wavs
文件夹下就可以获得合成结果