Win11 阿里最强语音克隆模型CosyVoice安装与使用避坑教程

阿里推出两款语音大模型,实测效果强于ChatTTS。一个是SenseVoice,主要是whisper的“听”;一个是CosyVoice,是“说”,内置音色、克隆音色的“说”。

之前Ai-China出过ChatTTS的教程,当时惊艳不已。但在实际使用过程中,ChatTTS是有一些问题的,最主要的就是固定音色。因为使用的是WebUI,生成长文本音频时无论怎样设置都是多种音色(甚至男女多人都出现了,明明设置的单音色)。实测CosyVoice完美解决了这个问题,而且几秒的音频即可克隆喜爱的音色。

今天就教大家如何避开安装使用CosyVoice过程中Ai-China亲历的坑。

安装CosyVoice

一、准备工作

1. Github作者主页 https://github.com/FunAudioLLM/CosyVoice

2. 安装好Git和Conda

(1) Git https://git-scm.com/downloads
(2)Conda https://docs.conda.io/en/latest/miniconda.html

安装上述miniconda即可,Anaconda太大,安装包就有近1G,安装时注意如下图一样勾选第2项

image-20240719090746171

二、 克隆作者Github库

在想要安装的位置创建一个CosyVoice文件夹,进入该文件夹,在地址栏输入cmdpowershell后回车,即打开命令行,在命令行依次输入以下命令:

1
2
3
git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git # 克隆repo
cd CosyVoice # 进入CosyVoice文件夹
git submodule update --init --recursive # 如果下面的克隆子模块命令未成功执行,请一直执行直到成功

三、 创建Conda虚拟环境并在虚拟环境下安装

1
2
3
4
5
6
7
8
9
10
conda create -n cosyvoice python=3.10 # 即创建一个名称为“cosyvoice”、python版本为“3.10”的虚拟环境,原作者选择的python版本是3.8
conda activate cosyvoice # 激活虚拟环境,只有激活后,才可继续进行安装、启动等操作,否则必然出错。激活后的标志是命令行开头增加了“(cosyvoice)”字符
conda install -y -c conda-forge pynini==2.1.5 # pynini 是 WeTextProcessing 的必需模块,且可在任何平台上运行。该模块在windows下只有用conda命令才可安装,这也是开头建议windows上使用conda的原因。注意:安装中会出现一个要求输入确认的提示,此时输入y然后回车
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com # 安装 requirements.txt 中规定的依赖项,并启用阿里镜像

# 若遇 sox 兼容性问题,请如下安装
# ubuntu
sudo apt-get install sox libsox-dev
# centos
sudo yum install sox sox-devel

1. Python版本

原作者指定的python版本为3.8,但Ai-China实测安装时会弹出大量的Warning,报SSL错误而无法完成安装,选择python 3.10则无此报错。而且,选择了3.8进行安装之后,最后也会报某些依赖项最低要求3.9之类。所以,Ai-China觉得可以放弃python 3.8了。

2. requirements.txt中内容的调整

打开requirements.txt文件,删掉最后一行的WeTextProcessing==1.0.3,否则肯定是安装失败的,因为这个模块依赖 pynini,而pynini在windows的pip下无法安装

然后在 requirements.txt 里增加一行 Matcha-TTS

如果要使用 api 服务,必须再增加2行内容,分别是 flaskwaitress

onnxruntime这个模块的下载有问题,如下图所示:

image-20240719091643813

或者现在就将高亮的两行改成onnxruntime==1.16.0,如果之后下载还是报错ModuleNotFoundError: No module named 'onnxruntime',则运行命令

1
2
conda install -c anaconda onnx
conda install -c anaconda onnxruntime

单独安装onnxruntime模块

3. 依赖项安装

输入pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com命令开始安装

……

……

漫长的等待过程,Ai-China等了1个小时10分钟左右

4. 预训练库安装

利用Git和下述命令导入预训练库,会生成一个pretrained_models文件夹并将下述库文件放到里面

1
2
3
4
5
6
# git模型下载,请确保已安装git lfs
mkdir -p pretrained_models
git clone https://www.modelscope.cn/iic/CosyVoice-300M.git pretrained_models/CosyVoice-300M
git clone https://www.modelscope.cn/iic/CosyVoice-300M-SFT.git pretrained_models/CosyVoice-300M-SFT
git clone https://www.modelscope.cn/iic/CosyVoice-300M-Instruct.git pretrained_models/CosyVoice-300M-Instruct
git clone https://www.modelscope.cn/iic/CosyVoice-ttsfrd.git pretrained_models/CosyVoice-ttsfrd

四、 利用Python运行CosyVoice

1. 添加到Python路径

首先将 third_party/Matcha-TTS 添加到你的 PYTHONPATH.

1
set PYTHONPATH=third_party/Matcha-TTS

2. 利用下述代码制作一个Python可执行文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from cosyvoice.cli.cosyvoice import CosyVoice
from cosyvoice.utils.file_utils import load_wav
import torchaudio

cosyvoice = CosyVoice('pretrained_models/CosyVoice-300M-SFT')
# sft usage
print(cosyvoice.list_avaliable_spks())
output = cosyvoice.inference_sft('你好,我是通义生成式语音大模型,请问有什么可以帮您的吗?', '中文女')
torchaudio.save('sft.wav', output['tts_speech'], 22050)

cosyvoice = CosyVoice('pretrained_models/CosyVoice-300M')
# zero_shot usage, <|zh|><|en|><|jp|><|yue|><|ko|> for Chinese/English/Japanese/Cantonese/Korean
prompt_speech_16k = load_wav('zero_shot_prompt.wav', 16000)
output = cosyvoice.inference_zero_shot('收到好友从远方寄来的生日礼物,那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐,笑容如花儿般绽放。', '希望你以后能够做的比我还好呦。', prompt_speech_16k)
torchaudio.save('zero_shot.wav', output['tts_speech'], 22050)
# cross_lingual usage
prompt_speech_16k = load_wav('cross_lingual_prompt.wav', 16000)
output = cosyvoice.inference_cross_lingual('<|en|>And then later on, fully acquiring that company. So keeping management in line, interest in line with the asset that\'s coming into the family is a reason why sometimes we don\'t buy the whole thing.', prompt_speech_16k)
torchaudio.save('cross_lingual.wav', output['tts_speech'], 22050)

cosyvoice = CosyVoice('pretrained_models/CosyVoice-300M-Instruct')
# instruct usage, support <laughter></laughter><strong></strong>[laughter][breath]
output = cosyvoice.inference_instruct('在面对挑战时,他展现了非凡的<strong>勇气</strong>与<strong>智慧</strong>。', '中文男', 'Theo \'Crimson\', is a fiery, passionate rebel leader. Fights with fervor for justice, but struggles with impulsiveness.')
torchaudio.save('instruct.wav', output['tts_speech'], 22050)

将以上代码保存为run_cosyvoice.py文件,放到CosyVoice文件夹根目录下

3. 执行py文件

cmdpowershell下进入此根目录,如果你没有退出或更改,当前应该就在此目录下。如果已经退出或更改,请参照上文进入此目录和虚拟环境。

输入命令python run_cosyvoice.py

如果一切顺利的话,CosyVoice程序会开始运行,几秒后在CosyVoice文件夹下生成几个音频文件,分别代表上述代码中的音色选择、推理文字生成等内容。如果想生成自己的文字变语音,在代码中修改相应的文字部分即可。

但是,以Ai-China反复装过不下10次的经验来看,如果此时就已经可用了,那表明你的人品可以中千万彩票了。

4. 执行python run_cosyvoice.py后通常会报的错误:

(1) ModuleNotFoundError: No module named 'ttsfrd'

解决方案:

1
2
git clone https://www.modelscope.cn/speech_tts/speech_kantts_ttsfrd.git ./speech_kantts_ttsfrd
pip install ./speech_kantts_ttsfrd/ttsfrd-0.3.6-cp38-cp38-linux_x86_64.whl
(2) ModuleNotFoundError: No module named 'tn'

此报错的原因是缺少WeTextProcessing,解决方案:

1
2
conda install -c anaconda sox #先安装sox,不知有无影响
pip install WeTextProcessing
(3) ModuleNotFoundError: No module named 'onnxruntime'

无法正常下载安装,那就从anaconda库中下载安装,解决方案:

1
2
conda install -c anaconda onnx
conda install -c anaconda onnxruntime
(4) ERROR: Failed building wheel for Matcha_TTS Failed to build Matcha_TTS ERROR: Could not build wheels for Matcha_TTS, which is required to install pyproject.toml-based projects

TTS字样,就知道Matcha_TTS是一个重要模块,它的出错,解决起来很棘手。

这个报错就是因为Windows中对于编译特定Python包的最低要求,包括Microsoft Visual C++ 14.0或以上。

为了心心念念的CosyVoice,Ai-China义无反顾地下载安装了Microsoft Visual C++,实在是大,最低要求的安装包都近5G

image-20240719103338480

然后再安装Matcha_TTS

pip install matcha-tts,世界瞬间平滑安静了许多。

(5) diffusers版本冲突
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ERROR: Cannot install -r requirements.txt (line 31) and diffusers==0.27.2 because these package versions have conflicting dependencies.

The conflict is caused by:
The user requested diffusers==0.27.2
matcha-tts 0.0.6.0 depends on diffusers==0.25.0
The user requested diffusers==0.27.2
matcha-tts 0.0.5.1 depends on diffusers==0.25.0
The user requested diffusers==0.27.2
matcha-tts 0.0.4 depends on diffusers==0.21.3
The user requested diffusers==0.27.2
matcha-tts 0.0.3 depends on diffusers==0.21.2
The user requested diffusers==0.27.2
matcha-tts 0.0.2 depends on diffusers==0.21.2

To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict

ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts

可以看出,有的要求版本0.27,有的要求0.25,还有的要求0.21,还真是众口难调啊

解决方案:

修改requirements.txt,你们的要求,朕都准了!

diffusers那一行改为diffusers>=0.21.2,<=0.27.2

(6) 运行WebUItyping_extensions报错
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
运行 `python webui.py --port 50000 --model_dir pretrained_models/CosyVoice-300M` 后报错(注意使用python3运行无反应)
ImportError: cannot import name 'Doc' from 'typing_extensions' (C:\Programs\miniconda3\envs\cosyvoice\lib\site-packages\typing_extensions.py) #此报错是因为 typing_extensions的版本不对

`pip install typing_extensions==4.8.0` #输入命令后显示
Collecting typing_extensions==4.8.0
Downloading typing_extensions-4.8.0-py3-none-any.whl.metadata (3.0 kB)
Downloading typing_extensions-4.8.0-py3-none-any.whl (31 kB)
Installing collected packages: typing_extensions
Attempting uninstall: typing_extensions
Found existing installation: typing_extensions 4.12.2 #找到当前版本
Uninstalling typing_extensions-4.12.2: #卸载当前版本
Successfully uninstalled typing_extensions-4.12.2 #成功卸载当前版本
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
typeguard 4.3.0 requires typing-extensions>=4.10.0, but you have typing-extensions 4.8.0 which is incompatible. #报错:4.8.0版本不兼容,需要4.10,我没有再试4.10,因为下面自动安装了4.7.1
Successfully installed typing_extensions-4.7.1
(7) 其他缺失报错下载失败

有样学样,如果pip install命令安装下载出错,可以添加-i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com镜像参数,多数都能正常下载。也可以如上所说,使用conda/anaconda命令或库下载安装。

注意:一定要看requirements.txt中规定的依赖项都安装完,之所以选择python 3.10也是因为这一点(只有它能完整安装依赖项)。一旦不完整,就会各种模块子模块缺失报错,人工手动安装不过来!

五、 其他更方便的使用方式

1. 官方WebUI

使用命令python webui.py

命令行运行快结束的时候,需要找一下,会提示running on: ,后面就是本地地址

image-20240719105703983

输入浏览器后

image-20240719105735071

但Ai-China第一次运行WebUI的时候,提示就不一样。记得是0.0.0.0:50000,如果想在Public网上运行的话,需要修改webui.py文件末行,加上share=True之类。这里值得一提的是,0.0.0.0实际上是一种“本地网络”的表述,在windows的浏览器中输入0.0.0.0并无任何作用(Linux下可以)。需要换成任何表述本地网络的地址:127.0.0.1:50000 localhost:50000甚至是你的主机本地IP(192.168.x.x):端口号也完全没问题。

这个WebUI应该是把几个预训练模型整合到了一起,下面介绍将各个不同模型分开来使用的方法。

2. 根据模型启用WebUI

(1) 克隆音色生成
1
2
3
4
5
@echo off
call conda activate cosyvoice
start http://127.0.0.1:50001
python webui.py --port 50001 --model_dir pretrained_models/CosyVoice-300M
pause

将以上内容保存为克隆音色生成.bat

(2) 内置音色+语气微调
1
2
3
4
5
@echo off
call conda activate cosyvoice
start http://127.0.0.1:50002
python webui.py --port 50002 --model_dir pretrained_models/CosyVoice-300M-Instruct
pause

将此内容保存为内置音色+语气微调.bat

(3) 内置音色生成
1
2
3
4
5
@echo off
call conda activate cosyvoice
start http://127.0.0.1:50000
python webui.py --port 50000 --model_dir pretrained_models/CosyVoice-300M-SFT
pause

也保存为内置音色生成.bat

将以上3个文件放置到CosyVoice文件夹根目录下,需要使用哪种,直接双击对应的bat文件即可。双击会自动打开浏览器新页面,但会稍等一下刷新页面才会出现WebUI。可以看出,此方法也是调用WebUI,只不过作了区分。另外要注意,虽然端口已经作了区分,但还是尽量不要同时运行上述2或3个程序,容易爆显存。

PS:本文主要参考
官网
CosyVoice:阿里最强语音克隆模型体验并封装API接口

Youtube教程