GPT-SoVITS项目的API改良与使用

GPT-SoVITS是一个非常棒的少样本中文声音克隆项目,之前有一篇文章详细介绍过如何部署和训练自己的模型,并使用该模型在web界面中合成声音,可惜它自带的 api 在调用方面支持比较差,比如不能中英混合、无法按标点切分句子等,因此对原版api做了修改,详细使用说明如下。

修改后代码开源地址:github.com/jianchang51...

代码下载地址 github.com/jianchang51...

api2.py 使用示例

下载解压 github.com/jianchang51... ,将 api2.py 复制到GPT-SoVITS软件目录下,执行命令同自带api.py一样,只需要将名字 api.py 改成 api2.py。默认端口也是 9880,默认绑定 127.0.0.1

效果音频,听听这是谁


启动默认模型并指定默认参考音频 -dr -dt -dl

假设参考音频要使用根目录下的 123.wav ,音频文字是 "一二三四五六七。" ,音频语言是中文,那么命令如下:

.\runtime\python api2.py -dr "123.wav" -dt "一二三四五六七。" -dl "zh"

Linux下命令去掉 .\runtime\ 即可

如上述命令这样在启动后,指定的参考音频将作为默认配置,在api请求数据中未指定参考音频时,将使用。

启动默认模型并指定ip地址和端口 -a -p

假设要指定绑定内网ip 192.168.0.120 ,端口要使用 9001,不指定默认参考音频,那么执行如下命令:

.\runtime\python api2.py -a "127.0.0.1" -p 9001

启动自己训练好的模型 -s -g

在指定自己的模型时,必须确保同时指定参考音频

训练好的模型可分别在软件目录下的 GPT_weightsSoVITS_weights 目录下寻找,以你训练时命名的模型名称开头,后跟e数字最大的那个即可。

.\runtime\python api2.py -s "SoVITS_weights/你的模型名" -g "GPT_weights/你的模型名" -dr "参考音频路径和名称" -dt "参考音频的文字内容,使用双引号括起来,确保文字内容里没有双引号" -dl zh|ja|en三者选一

强制在CPU上推理 -d cpu

默认将优先使用 CUDA 或 mps(Mac), 如果你想指定在CPU上运行,可以通过 -d cpu 指定

.\runtime\python api2.py -d cpu

注意 -d 后只能是 cpu 或 cuda 或 mps,并且只有在正确配置 cuda 后才能指定 cuda,只有Apple CPU Mac上才能指定 mps

全部按照默认运行

.\runtime\python api2.py

这种方式将使用默认模型,并且在 api 请求时必须指定参考音频、参考音频文字内容、参考音频语言代码,api 监听 9880 端口

可使用的语言代码 zh ja en

仅支持 中文、日语、英语 三种语言,对应只可使用 zh(代表中文或中英混合)ja(代表日语或日英混合)en(代表英语),使用 -dl 指定,如 -dl zh,-dl ja,-dl en

参考音频路径 -dr

参考音频填写以软件根目录为起点的相对目录,假如你的参考音频是直接放在软件根目录下,那么只需要填写带后缀的完整名字即可,比如 -dr 123.wav,如果是在子目录下,比如在 wavs 文件夹下,那么填写 -dr "wavs/123.wav"

参考音频的文字内容 -dt

参考音频的文字内容就是音频里的说话文字,需要正确填写标点符号,并使用英文双引号括起来。请注意,文字中不要再有英文双引号。

-dt "这里填写参考音频的文字内容,不要含有英文双引号"

可用的命令行参数:

模型相关参数

-s SoVITS模型路径, 默认模型无需填写,自训练模型在 SoVITS_weights 目录下

-g GPT模型路径, 默认模型无需填写,自训练模型在 GPT_weights 目录下

参考音频相关参数

-dr 默认参考音频路径,如果在根目录下,直接填写带后缀名字,否则加上 路径/名字

-dt 默认参考音频文本,音频的文字内容,以英文双引号括起来

-dl 默认参考音频内容的语种, "zh"或"en"或"ja"

设备和地址相关参数

-d 推理设备, "cuda","cpu","mps" 只有配置好了cuda环境才可指定cuda,只有Apple CPU上才可指定mps

-a 绑定地址, 默认"127.0.0.1"

-p 绑定端口, 默认9880

不常用参数,新手可忽略不必设置

-fp 使用全精度

-hp 使用半精度

-hb cnhubert路径

-b bert路径

API调用示例:

调用地址url: http://你指定的ip:指定的端口,默认是 http://127.0.0.1:9880

调用时不指定参考音频

启动 api2.py 时必须指定默认参考音频,才可在调用api时不指定,否则将报错:

GET方式调用,可直接浏览器中打开:

http://127.0.0.1:9880?text=亲爱的朋友你好啊,希望你的每一天都充满快乐。&text_language=zh

POST方式调用,以json格式传参:

json 复制代码
{
    "text": "先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。",
    "text_language": "zh"
}

手动指定当次所使用的参考音频:

GET方式:

http://127.0.0.1:9880?refer_wav_path=wavs/5.wav&prompt_text=为什么御弟哥哥,甘愿守孤灯。&prompt_language=zh&text=亲爱的朋友你好啊,希望你的每一天都充满快乐。&text_language=zh

POST方式:

json 复制代码
{
    "refer_wav_path": "wavs/5.wav",
    "prompt_text": "为什么御弟哥哥,甘愿守孤灯。",
    "prompt_language": "zh",
    "text": "亲爱的朋友你好啊,希望你的每一天都充满快乐。",
    "text_language": "zh"
}

Api调用返回信息:

成功时: 返回 wav 音频流,可直接播放或保存到 wav文件中,http 状态码 200

失败时: 返回包含错误信息的 json, http 状态码 400

css 复制代码
{"code": 400, "message": "未指定参考音频且接口无预设"}

问题:想切换模型怎么办

api2.py和官方原版api.py 一样都不支持动态模型切换,也不建议这样做,因为动态启动加载模型很慢,而且在失败时也不方便处理。

解决方法是: 一个模型起一个api服务器,绑定不同的端口,在启动 api2.py 时,指定当前服务所要使用的模型和绑定的端口。

比如起2个服务,一个使用默认模型,绑定 9880 端口,一个绑定自己训练的模型,绑定 9881 端口,命令如下

默认模型 9880 端口 : http://127.0.0.1:9880

.\runtime\python api2.py -dr "5.wav" -dt "今天好开心" -dl zh

自己训练的模型 : http://127.0.0.1:9881

.\runtime\python api2.py -p 9881 -s "SoVITS_weights/mymode-e200.pth" -g "GPT_weights/mymode-e200.ckpt" -dr "wavs/10.wav" -dt "御弟哥哥,为什么甘愿守孤灯" -dl zh

小技巧

中英混合的句子如何取得更好的训练效果:

英文单词前后要留有空格,不要直接和汉字连在一起,因为英文是靠空格区分的,如果连在一起,可能无法正确识别。

此api2.py 兼容视频翻译配音软件的 GPT-SoVITS 声音合成功能

相关推荐
玄同7653 分钟前
Git常用命令指南
大数据·git·elasticsearch·gitee·github·团队开发·远程工作
一个处女座的程序猿34 分钟前
AI之Agent之VibeCoding:《Vibe Coding Kills Open Source》翻译与解读
人工智能·开源·vibecoding·氛围编程
吠品1 小时前
命令行揭示SSL证书真相
https·github·ssl
、BeYourself1 小时前
解决git@github.com: Permission denied (publickey)
github
一只大侠的侠2 小时前
React Native开源鸿蒙跨平台训练营 Day16自定义 useForm 高性能验证
flutter·开源·harmonyos
IvorySQL2 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
一只大侠的侠3 小时前
Flutter开源鸿蒙跨平台训练营 Day11从零开发商品详情页面
flutter·开源·harmonyos
一只大侠的侠3 小时前
React Native开源鸿蒙跨平台训练营 Day18自定义useForm表单管理实战实现
flutter·开源·harmonyos
一只大侠的侠3 小时前
React Native开源鸿蒙跨平台训练营 Day20自定义 useValidator 实现高性能表单验证
flutter·开源·harmonyos
十步杀一人_千里不留行3 小时前
Git提交前ESLint校验实践(Husky + lint-staged)
git·github