chattts本地化python部署及采坑记录(2024年亲测可用)

ChatTTS 是一个文本转语音的开源项目,短短2周左右的时间,在 GitHub 上已经斩获了 24.4k Star

网: https://chattts.com/zh

源地址https://github.com/2noise/ChatTTS

ChatTTS模型:https://huggingface.co/2Noise/ChatTTS

ChatTTS在线网页Demo:https://huggingface.co/spaces/lenML/ChatTTS-Forge

为了进行使用,本人也是参考了许多的文章,包括但不限于:

Chat-TTS:windows本地部署实践【有手就行】

ChatTTS 开源文本转语音模型本地部署、API使用和搭建WebUI界面(建议收藏)-CSDN博客

PyTorch中torch、torchvision、torchaudio、torchtext版本对应关系_torch2.0.1对应的torchvision-CSDN博客

不知道是不是因为版本不一致的原因,这些文章都说了引用模型是load_models,但是我下载的版本这样引用会报错说不存在load_models这个方法。经过研读ChatTTS下的core.py,这个方法已经变成了load方法。接下来就把安装和可能踩坑的步骤都讲一遍。

一、代码及模型下载

1.直接使用git clone下载代码和依赖

git clone https://github.com/2noise/ChatTTS
git clone https://huggingface.co/2Noise/ChatTTS

我是把代码和模型分别放在两个路径,并不影响使用。

2.安装依赖

在ChatTTS项目的根目录下执行以下命令

pip install -r requirements.txt

直接安装依赖可能会有一些冲突,需要自己修改一下。这里特别参考了

PyTorch中torch、torchvision、torchaudio、torchtext版本对应关系_torch2.0.1对应的torchvision-CSDN博客

因为我下载的torch 版本是2.2.2,根据这篇文章我调整了torchvision和torchaudio的配置,修改前后变化如下:

torchvision 0.19.0——>0.17.2
torchaudio 2.4.0——>2.2.2

具体执行的代码为

pip uninstall torchvision
pip install torchvision==0.17.2
pip uninstall torchaudio
pip install torchaudio==2.2.2

二、测试代码编写

在ChatTTS下编写代码,我是直接在根目录下新增了一个test.py。

直接上一下核心代码

import torch
import torchaudio
import ChatTTS
model_dir = '替换成自己的模型地址'

chat = ChatTTS.Chat()
chat.load(source='local', custom_path=model_dir,compile=False)
texts = '测试文字'
wavs = chat.infer(texts)
torchaudio.save("保存文件路径", torch.from_numpy(wavs), 24000)

就是这段代码,我研究了很久!

首先是教程说到的引用模型,很多教程都写了chat.load_models,这时候可以去看看ChatTTS下的ChatTTS下的代码,这里就是核心代码,在core.py的第124行的源码如下

def load(
        self,
        source: Literal["huggingface", "local", "custom"] = "local",
        force_redownload=False,
        compile: bool = True,
        custom_path: Optional[torch.serialization.FILE_LIKE] = None,
        device: Optional[torch.device] = None,
        coef: Optional[torch.Tensor] = None,
        use_flash_attn=False,
    ) -> bool:
# 具体执行代码

可以看到加载模型的方法已经变成了load

source的选项有3个,因为想引用本地的模型所以写了local

compile的默认值为True,因为是在win平台,pytorch的dynamo图模式,不支持compile,所以将compile参数设置为False

这里的本地文件路径应该用custom_path来指定。

如果正常的话运行这段代码就会在项目下生成一段转换后的音频。我还遇到了许多报错!

三、报错总结

报错1:check models in custom path %s failed

程序提示找不到模型,很疑惑明明路径写对了,于是去看了是dl.py中的check_all_assets方法报错,具体就是它去你的模型下找不到它规定的模型,在dl.py的第46行有以下代码

def check_all_assets(base_dir: Path, sha256_map: Dict[str, str], update=False) -> bool:
    logger.get_logger().info("checking assets...")
    current_dir = base_dir / "asset"
    names = [
        "Decoder.pt",
        "DVAE_full.pt",
        "GPT.pt",
        "spk_stat.pt",
        "tokenizer.pt",
        "Vocos.pt",
    ]

我发现这里的DVAE_full.pt我本地的是DVAE.pt,我直接把DVAE.pt给复制改名了为DVAE_full.pt。

报错:Error(s) in loading state_dict() for Model

经过百度是加载模型参数出错了,所以去掉了它的加载,在core.py搜索以下代码load_state_dict,或者直接根据报错双击报错代码定位,在后面加上strict=False,去掉严格校验。

报错:os.rename报错:[WinError 2] 系统找不到指定的文件

这个我忘了怎么解决的了!

报错:torchaudio 加载wav报错 Couldn‘t find appropriate backend to handle uri *** and format None

代码执行到保存文件的时候报错了,经过百度是缺了个音频库依赖,于是下载完重启项目就可以了

pip install pysoundfile
报错:ValueError: Expected 2D array, got 1D array instead

代码执行到保存文件的时候报错了,这个错误说的是是把1维数组传了给2维数组,我发现是save的时候torch.from_numpy(wavs[0]),假如这里取了第一个元素,这就是1维度数组,所以把[0]去掉就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值