和青龙的语音交互OpenLoongBrain除了使用TTS服务提供的已有声音,集成了GPT-SoVITS之后,就可以自己创建想要的声音啦!
本文展示如何让青龙使用GPT-SoVITS训练的声音进行交互(项目在VSCode中运行)。
OpenLoongBrain项目地址:
https://atomgit.com/openloong/OpenLoongBrain
GPT-SoVITS项目地址(部署在本地时项目所在目录最好纯英文):
https://github.com/RVC-Boss/GPT-SoVITS
官方语雀指南(本文中没有出现的问题可以去查询):
[url]https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e
[/url]
GPT-SoVITS是一个开源的声音克隆项目,根据官方文档,目前除了可以克隆提供的声色外,还可以克隆一些游戏角色的声音(崩坏:星穹铁道,原神,崩坏三,绝区零,蔚蓝档案(日语));除了官方文档,网络上也有很多用户分享了自己训练的模型。本文使用了他人已经训练好的模型,也尝试自行训练了声音模型。
GPT-SoVITS有两种声音生成功能:
- 零样本语音合成(Zero-Shot TTS):提供5秒的音频样本即可生成语音
- 小样本语音合成(Few-Shot TTS):提供1分钟的音频进行训练,完成后即可克隆声音
OpenLoongBrain是集成在青龙机器人上的语音交互系统,目前支持语音输入和文字输入。
TTS(文字转语音):代码中集成了多种方式,下文有介绍;本文使用的TTS方式即为GPT-SoVITS
Speech2Text:集成了讯飞模块
GPT-SoVITS项目部署:
部署环境:Ubuntu22.04,python3.9.19,CUDA12.2
- conda create -n GPTSoVits python=3.9
- conda activate GPTSoVits
- bash install.sh
复制代码 预训练模型的下载可参考官方文档,内有不同下载途径。
自行训练声音模型:
获取需要用来训练的声音的音频素材后,在GPTSoVits环境下终端输入,启动webUI
(webUI使用参考:https://blog.csdn.net/Polo_fang/article/details/140521946)
(处理音频使用单独部署的UVr5和audio-slicer,在webUI中已被集成)
(如果运行webUI时遇到解决不掉的bug,可以直接启用客户端对音频进行处理)
UV5r(Ultimate Vocal Remover V5):人声分离软件,可以去除BGM提取人声,也可以单独提取BGM去除人声,本项目需要用到的功能就是提取人声了,用来训练的音频人声越纯净效果越好);
(项目地址:https://github.com/Anjok07/ultimatevocalremovergui)
audio-slicer:音频处理工具,通过沉默检测技术对音频进行切割,只提取音频中有声音的部分;
(项目地址:https://github.com/openvpi/audio-slicer)
网页调试的过程中遇到以下问题:
(下图中"实验/模型名"最好不用中文)
开启文本获取出现
FileNotFoundError: [Errno 2] No such file or directory: 'logs/xxx/2-name2text-0.txt'
(如果出现zipfile.BadZipFile: File is not a zip file错误,也可通过以下方式解决)
手动下载:
https://www.icloud.com/iclouddrive/0b9blkIrl2rOabOqyksasY2dQ#nltk_data
解压替换本地nltk_data文件夹,若无此文件夹,压缩包解压后放到任意盘根目录/用户名根目录下。
SoVITS和GPT训练完成后,模型所在目录为GPT-SoVITS/GPT_weights(_v2)和/GPT-SoVITS/SoVITS_weights(_v2)(网页上选择v1/v2版本对应的不同文件夹)。
直接使用已完成的模型:
获取模型+训练数据的网址(来自官方语雀文档,其他模型资源请自行查找):
https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/nwnaga50cazb2v93
模型下载后,分别把***GPT.ckpt,***SoVITS.pth模型移动到对应的路径下。
如果使用v1版本,分别移动到/GPT-SoVITS/GPT_weights和/GPT-SoVITS/SoVITS_weights下;
如果使用v2版本,分别移动到/GPT-SoVITS/GPT_weights_v2和/GPT-SoVITS/SoVITS_weights_v2下。
API启用
在运行OpenLoongBrain语音交互的server和client之前,需要在GPT-SoVITS项目地址下,环境中运行,启动GPT-SoVITS项目(此处代码使用的是v2版本的api文件,如有需要,打开/GPT_SoVITS/configs/tts_infer.yaml修改里面对应的路径):
- python api_v2.py -a 127.0.0.1 -p 9880 -c GPT_SoVITS/configs/tts_infer.yaml
复制代码 启动成功后,terminal如图:
GPT-SoVITS没有指定生成语音的情感的功能,如果想要生成某种语气,TTS推理时提供的主参考音频以及代码中的参考音频可以选定特定的语气,这样生成的语音会参考提供的音频。
- # example_udp_local.py中的代码
- data = {
- "text": for_sending, # 把 for_sending 内容写入 text 字段
- "text_lang": "zh",
- "ref_audio_path": "/参考/语音/的路径/.wav",#你生成的语气的参考音频
- "prompt_text": "参考语音的文字内容。",
- "prompt_lang": "zh",
- "text_split_method": "cut5",
- "batch_size": 1,
- "media_type": "wav",
- "streaming_mode": True
- }
复制代码
OpenLoongBrain项目部署
大模型
大模型下载地址:
https://modelscope.cn/models/qwen/Qwen1.5-4B-Chat/files
客户端
修改TTS方式
目前的TTS集成了Piper,Coqui,讯飞离/在线版,百度在线版以及GPT-SoVITS。在example_udp_local.py中修改代码,选择TTS方式;
TTS对应名称:
Piper: piper
Coqui: coqui
讯飞离线TTS: xunfei
讯飞在线TTS: online_xunfei
百度在线TTS: baidu
GPT-SoVITS: custom
语音交互方式(input_type):
语音输入: speech
文字输入: text
下图代码为使用GPT-SoVITS+文字交互版本
启用chat_qinglong环境,运行example_udp_local.py
- python example_udp_local.py
复制代码 下图为文字交互时terminal的输出:
在terminal中输入文字,即可与大模型进行交互。在每次发送想要让大模型进行反应的文字之前,需要输入“你好”进行激活。同理,语音交互时,需要说“你好”进行激活。激活后,会播放说“我在”的mp3文件,听到“我在”之后即可进行交互。
服务器端
启用zhuque环境,运行
启动成功后,终端显示:
再启一个终端(zhuque环境),运行agent_coffee_local1.py
- python agent_coffee_local1.py
复制代码 运行成功后,终端显示:
下面视频为文字输入时的交互展示:
效果评价:
提供了大约总计一分钟的音频,经测试,audio-slicer生成的声音片段在十秒之内,训练的效果会相对好一些;片段太长会影响生成声音质量。交互速度和交互质量还比较ok。
另附torch,torchaudio,torchvision下载网址,可根据需求手动下载:
(cuXXX:cuda版本;cpXX:python环境,如3.8即为cp38)
Torch:
https://download.pytorch.org/whl/torch/
Torchaudio:
https://download.pytorch.org/whl/torchaudio/
Torchvision:
https://download.pytorch.org/whl/torchvision/
|