ttsfrd的使用

发布于:2025-05-01 ⋅ 阅读:(36) ⋅ 点赞:(0)

作用:文本标准化,将数字转成大写等预处理。
例:数字处理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("处理完成!")  # 保持终端活跃


网站公告

今日签到

点亮在社区的每一天
去签到