ttsfrd的作用:
文本标准化,将数字转成大写等预处理,例:数字处理123 → 一百二十三,
日期处理2023-12-25 → 2023年12月25日,特殊符号 40¥→40元。从而适合TTS朗读。
SDK模型下载
from modelscope import snapshot_download
snapshot_download('iic/CosyVoice-ttsfrd', local_dir='pretrained_models/CosyVoice-ttsfrd')
git模型下载,请确保已安装git lfs
mkdir -p pretrained_models
git clone https://www.modelscope.cn/iic/CosyVoice-ttsfrd.git pretrained_models/CosyVoice-ttsfrd
cd pretrained_models/CosyVoice-ttsfrd/
unzip resource.zip -d .
pip install ttsfrd_dependency-0.1-py3-none-any.whl
pip install ttsfrd-0.4.2-cp310-cp310-linux_x86_64.whl
使用
import re
import cn2an
import ttsfrd
import json
def convert_numbers_to_chinese(para):
"""转换数字为中文写法,使用 num2words 库"""
# 替换段落中的所有数字为中文数字
def replace_number(match):
num_str = match.group()
try:
# 将阿拉伯数字转换为中文数字
return cn2an.an2cn(num_str)
except:
return num_str # 如果转换失败,保留原样
para = re.sub(r'\d+', replace_number, para)
return para.strip() # 返回转换后的段落
def clean_markdown(text):
# 1. 处理字面换行符
cleaned = text.replace('\\n', '\n')
# 2. 去除Markdown特殊符号
cleaned = re.sub(r'[#*\-_`~\[\](){}]', '', cleaned)
# 3. 处理所有换行符
cleaned = re.sub(r'[\r\n]+', ' ', cleaned)
# 4. 合并连续空白
cleaned = re.sub(r'\s+', ' ', cleaned).strip()
cleaned = convert_numbers_to_chinese(cleaned)
return cleaned
def clear(text):
text = text.strip()
# 1. 处理字面换行符
cleaned = text.replace('\\n', '\n')
# 2. 去除Markdown特殊符号
cleaned = re.sub(r'[#*\-_`~\[\](){}]', '', cleaned)
# 3. 处理所有换行符
cleaned = re.sub(r'[\r\n]+', ' ', cleaned)
# 4. 合并连续空白
cleaned = re.sub(r'\s+', ' ', cleaned).strip()
print(f'调用ttsfrd前:{cleaned}')
frd = ttsfrd.TtsFrontendEngine()
assert frd.initialize('/root/autodl-tmp/F5-TTS-main/pretrained_models/CosyVoice-ttsfrd/resource') is True, \
'failed to initialize ttsfrd resource'
frd.set_lang_type('pinyinvg')
texts = [i["text"] for i in json.loads(frd.do_voicegen_frd(cleaned))["sentences"]]
print(type(texts))
return ''.join(texts)
if __name__ == "__main__":
# with open('/root/autodl-tmp/md阅读文本.txt', 'r', encoding='utf-8') as f:
# input_text = f.read()
input_text = 'xxxx'
# output_text = clean_markdown(input_text)
output_text = clear(input_text)
# with open('/root/autodl-tmp/md阅读文本_cleaned.txt', 'w', encoding='utf-8') as f:
# f.write(output_text)
print(output_text)
input("处理完成!") # 保持终端活跃