让AI帮你说话--GPT-SoVITS教程

有时候我们在录制视频的时候,由于周边环境嘈杂或者录音设备问题需要后期配音,这样就比较麻烦。一个比较直观的想法就是能不能将写好的视频脚本直接转换成我们的声音,让AI帮我们完成配音呢?在语音合成领域已经有很多这类工作了,最近网上了解到一个效果比较好的项目GPT-SoVITS,尝试了一下,趟了一些坑,记录一下操作过程。
首先附上大佬的仓库和教程:

  1. GitHub链接
  2. 视频教程

下载代码和创建环境

电脑配置

Windows11
CUDA 12.1
显卡RTX 4070
Anaconda

下载代码

git clone https://github.com/RVC-Boss/GPT-SoVITS.git

创建环境

conda create -n gpt-sovits python=3.9
conda activate gpt-sovits
Windows
pip install -r requirements.txt
conda install ffmpeg
#下载以下两个文件到GPT-SoVITS项目根目录
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/ffmpeg.exe
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/ffprobe.exe

下载模型

1、在GPT_SoVITS\pretrained_models打开终端输入:

git clone https://huggingface.co/lj1995/GPT-SoVITS

如果不成功,先尝试下面语句,然后再次clone代码:

git lfs install

如果还不成功,需要确认网络是否能连外网。
下载完模型后,将模型文件拷到GPT_SoVITS\pretrained_models目录下:
SoVITS模型
2、到modelscope下载以下模型:

git clone https://www.modelscope.cn/iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch.git
​git clone https://www.modelscope.cn/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch.git
​git clone https://www.modelscope.cn/iic/punc_ct-transformer_zh-cn-common-vocab272727-pytorch.git

将以上模型文件放到tools/damo_asr/models目录下:
ASR模型

如果训练的音频数据有杂音的话,还需要下载UVR5模型对音频先进行去噪处理,放到tools/uvr5/uvr5_weights目录下:
git clone https://huggingface.co/lj1995/VoiceConversionWebUI

运行demo

配置好环境和模型后,在终端输入:

python webui.py

如果报以下错误,说明装的Torch不是CUDA版本的,需要重装对应的CUDA版本的pytorch。

AssertionError: Torch not compiled with CUDA enabled

运行起来后界面如下:
WebUI界面

微调和推理模型

处理数据

下载的原始模型一般就可以用来推理转换声音了,但是如果想要转换的声音更真实,本地又有GPU的话,可以进一步尝试微调模型,进一步提升转换声音的真实性。

  1. 首先我们要收集一段我们自己的录音作为微调数据集,最好将格式保存为wav格式。

  2. 然后将音频进行切分和标注,这里就用webUI工具进行处理,在音频自动切分输入路径中填入我们保存得wav格式音频文件路径,其余参数根据需要调整,点击开始语音切割,切割完成后的文件保存在output/slicer_opt文件夹中。
    切分音频

  3. 切分完后需要对语音进行识别成中文文本,执行下面的中文批量离线ASR工具,填写批量ASR输入文件夹路径为上一步的子音频输出目录。
    生成音频对应文本

若出现以下报错:

KeyError: 'funasr-pipeline is not in the pipelines registry group auto-speech-recognition. Please make sure the correct version of ModelScope library is used.'

说明funasr版本有问题,需要修改一下tools\damo_asr\cmd-asr.py为:

path_asr='tools/damo_asr/models/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch'
path_vad='tools/damo_asr/models/speech_fsmn_vad_zh-cn-16k-common-pytorch'
path_punc='tools/damo_asr/models/punc_ct-transformer_zh-cn-common-vocab272727-pytorch'
path_asr=path_asr if os.path.exists(path_asr)else "damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch"
path_vad=path_vad if os.path.exists(path_vad)else "damo/speech_fsmn_vad_zh-cn-16k-common-pytorch"
path_punc=path_punc if os.path.exists(path_punc)else "damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch"
# 注释掉这块代码
# inference_pipeline = pipeline(
#     task=Tasks.auto_speech_recognition,
#     model=path_asr,
#     vad_model=path_vad,
#     punc_model=path_punc,
# )
model = AutoModel(model=path_asr,
                  vad_model=path_vad,
                  punc_model=path_punc,
                  #spk_model="damo/speech_campplus_sv_zh-cn_16k-common",
                  #spk_model_revision="v2.0.0"
                  )
opt=[]
for name in os.listdir(dir):
    try:
        # 这里也注释
        # text = inference_pipeline(audio_in="%s/%s"%(dir,name))["text"]

        text = model.generate(input="%s/%s"%(dir,name),
                     batch_size_s=300, 
                     hotword='魔搭')
        print(f"asr text:{text}")
        opt.append("%s/%s|%s|ZH|%s"%(dir,name,opt_name,text))
    except:
        print(traceback.format_exc())
...

在转换完成后,会在目录 \GPT-SoVITS\output\asr_opt下生成slicer_opt.list文件,里面就是每段音频对应的文本。
4. 得到文本后,需要对文本进行打标矫正,将**\GPT-SoVITS\output\asr_opt\slicer_opt.list**路径填到 打标数据标注文件路径中,然后勾选开启打标webUI。
启动打标
然后在打标界面进行标注矫正
打标界面

在这个界面可以进一步拆分合并音频和修改文本,修改后需要点击Submit Text保存。
5. 接下来对得到的音频文件和文本标注文件进行格式化转换,切换到1-GPT-SoVITS-TTS页面,填写相应的实验名,文本标注文件和训练集音频文件,然后点击下面的一键三连等待转换完成即可。
转换成训练集格式

等到输出信息显示一键三连进程结束说明格式化数据集成功。

若中途报错 Resource cmudict not found.Please use the NLTK Downloader to obtain the resource,在命令行中尝试下面语句,下载弹出界面的东西即可

import nltk
nltk.download('cmudict')

微调模型

然后切换到1B-微调训练界面,设置相应的训练参数即可开始训练SoVITS和GPT。需要注意根据显卡显存调整batch size大小避免OOM。

开始分别训练SoVITS和GPT

训练成功后,SoVITS权重和GPT权重会分别保存到SoVITS_weightsGPT_weights文件夹下,然后我们就可以选择我们微调好的模型进行推理了。

推理模型

选择1C-推理界面,点击刷新模型路径,在GPT模型列表SoVITS模型列表中选择我们微调好的模型,然后勾选下面的 开启TTS推理WebUI,等待推理页面打开。

选择模型

打开后选择上传参考音频,这里我们可以选择我们之前分割的音频和其对应的标注文本。然后在输入要合成的文本,选择相应的合成语种,点击合成语音,几秒后即可合成对应的语音。若输入的文本过长,需要使用下方的切分工具先对文本进行切分。

推理合成语音界面

合成完成后,点击输出的语音即可试听和下载生成的语音。如果生成的效果不满意,可以重复多试几次。如果生成的效果实在不行,需要重新收集质量更好的自己的录音进行重新微调。
得到满意的模型之后,以后就可以将准备好的文字脚本直接转换成自己的声音,不用再专门录音去噪了,懒人福音~

最后,本文章仅为学习目的使用,请不要将方法应用于任何可能的非法用途。

项目地址:https://github.com/RVC-Boss/GPT-SoVITS

注:本软件以MIT协议开源, 作者不对软件具备任何控制力, 使用软件者、传播软件导出的声音者自负全责.如不认可该条款, 则不能使用或引用软件包内任何代码和文件. 详见根目录LICENSE.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/355535.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[足式机器人]Part3 机构运动学与动力学分析与建模 Ch01-2 完整定常系统——杆组RRR

本文仅供学习使用,总结很多本现有讲述运动学或动力学书籍后的总结,从矢量的角度进行分析,方法比较传统,但更易理解,并且现有的看似抽象方法,两者本质上并无不同。 2024年底本人学位论文发表后方可摘抄 若有帮助请引用 本文参考: 《空间机构的分析与综合(上册)》-张启先…

【程序员英语】【美语从头学】初级篇(入门)(笔记)Lesson10(电话会话Ⅱ)

《美语从头学初级入门篇》 注意:被 删除线 划掉的不一定不正确,只是不是标准答案。 文章目录 Lesson 10 Telephone Conversation Ⅱ 电话会话(二)会话A会话B笔记I would like to do(Id like to to do)我想…

0基础学习VR全景平台篇第139篇:如何用圆周率全景相机拍摄VR全景

新手入门 圆周率科技,成立于2012年,是中国最早投身嵌入式全景算法研发的团队之一,亦是全球市场占有率最大的全景算法供应商。相继推出一体化智能屏、支持一键高清全景直播的智慧全景相机--Pilot Era和Pilot One,为用户带来实时畅…

【智能家居入门之环境信息监测】(STM32、ONENET云平台、微信小程序、HTTP协议)

作为入门本篇只实现微信小程序接收下位机上传的数据,之后会持续发布如下项目:①可以实现微信小程序控制下位机动作,真正意义上的智能家居;②将网络通讯协议换成MQTT协议再实现上述功能,此时的服务器也不再是ONENET&…

电脑风扇控制温度软件 Macs Fan Control Pro 中文

Macs Fan Control Pro是一款专为Mac用户设计的风扇控制软件,旨在提供更精细的风扇转速控制和温度监控。这款软件通过实时监测Mac内部硬件的温度,自动或手动调整风扇的转速,以确保系统温度保持在理想范围内。 Macs Fan Control Pro提供了直观…

C#,广义斐波那契数(Generalised Fibonacci Numbers)的算法

广义斐波那契序列(generalized Fibonacci sequence)是斐波那契数的推广。由递推关系F₁F₂…Fm-10,Fₘ1,FmnFₙFn1…Fnm1,n≥1所产生的序列,称为m级广义斐波那契序列。 计算结果: 源代码: 1 文本格式 …

迅为新品全国产龙芯 3A6000 处理器板卡

龙芯 3A6000 处理器完全自主设计、性能优异,代表了我国自主桌面 CPU 设计领域的最新里程碑成果。龙芯 3A6000 处理器的推出,说明国产 CPU 在自主可控程度和产品性能上已双双达到新高度,也证明了国内有能力在自研 CPU 架构上做出一流的产品。 …

自动验证码解析器:CapSolver的Chrome扩展程序自动解析器

自动验证码解析器:CapSolver的Chrome扩展程序自动解析器 验证码是网站实施的一种安全措施,通常对用户构成挑战。然而,随着技术的进步,验证码解析器已经出现,以简化这一过程。在本文中,我们将探讨专为Googl…

trucksim三车队列仿真 matlab一直闪退问题

Trucksim2019 matlab版本2023a 基本框架应该都清楚 下图是主界面 overlay videos and polots with other runs 模块是 关联另一个车辆模型 核心是下图标红是核心 Number of vehicle codes 选择ALL 不要选

whatsapp相关(五)- frida监测网络请求

Frida监测 网络请求 本文主要记录下frida监测网络请求的过程. 1: 脚本 首先记录下脚本,代码如下: Java.perform(function () {var HttpURLConnection Java.use(java.net.HttpURLConnection);var URL Java.use(java.net.URL);var Proxy Java.use(java.net.Proxy);var ori…

VUE3动漫影视视频网站模板源码

文章目录 1.视频设计来源1.1 主界面1.2 动漫、电视剧、电影视频界面1.3 播放视频界面1.4 娱乐前线新闻界面1.5 关于我们界面 2.效果和源码2.1 动态效果2.2 源码结构 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/deta…

2024最值得入手的运动耳机有哪些?运动耳机品牌推荐

如果你在寻找一款实用、舒适且音质卓越的运动耳机,那么开放式耳机可能是理想的选择。开放式耳机设计稳固,佩戴舒适,音质自然真实。以下是我为大家精心挑选的几款适合运动佩戴的开放式耳机,它们不仅性能出色、耐用性强,…

Linux实验记录:使用LVM(逻辑卷管理器)

前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注: 硬盘分好区或者部署为RAID磁盘阵列…

如何在 VM 虚拟机中安装 Red Hat Enterprise Linux 9.3 操作系统保姆级教程(附链接)

一、VMware Workstation 虚拟机 先得安装 VM 虚拟机,没有的可以参考这篇文章安装 VM 虚拟机 如何在 VM 虚拟机中安装 Win10 操作系统保姆级教程(附链接)https://eclecticism.blog.csdn.net/article/details/135713915 二、Red Hat Linux 镜…

【机器学习】二分类模型评估方法大全

一、模型搭建 导入包、全局设置 import numpy as np import os %matplotlib inline import matplotlib import matplotlib.pyplot as plt plt.rcParams[axes.labelsize] 14 plt.rcParams[xtick.labelsize] 12 plt.rcParams[ytick.labelsize] 12 import warnings warnings.…

基于Java SSM框架实现学生就业服务平台系统项目【项目源码】

基于java的SSM框架实现学生就业服务平台系统演示 JSP技术介绍 JSP技术本身是一种脚本语言,但它的功能是十分强大的,因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时,它可以使显示逻辑和内容分开,这就极大的方便了学生…

leetcode 26.删除有序数组中的重复项(python版)

需求 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 , 返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &#x…

Windows下EDK2快速搭建(详细)过程总结附软件包地址

目录 简介一、软件包下载安装VS2019下载NASM安下载LLVM/CLANG下载IASL下载安装Python安装OpenSSL下载EDK2 二、设置环境变量新增python系统变量新增NASM系统变量 三、编译3.1 在edk2目录直接输入cmd3.2 在cmd目录输入:edksetup.bat3.3 打开edk2编译窗口3.4 确认编译…

【算法专题】动态规划综合篇

动态规划7.0 1. 最长公共子序列2. 不相交的线3. 不同的子序列4. 通配符匹配5. 正则表达式匹配6. 交错字符串7. 两个字符串的最小ASCII删除和8. 最长重复子数组 1. 最长公共子序列 题目链接 -> Leetcode -1143.最长公共子序列 Leetcode -1143.最长公共子序列 题目&#xf…

.ui文件相关

目录 ui类生成过程: 提问: 等以后自己熟练了用代码写这些样式内容,尽量用代码写,原因很简单: 用代码写的可以直接修改代码,但是在设计界面修改的东西,电脑没有QC这玩意,还真不好改…