前段时间在外网爆火的语音合成模型 IndexTTS2 开源了。
7月份的时候,IndexTTS2 还在筹备未发布,就在外网疯狂讨论起来了。
演示效果 Demo 传播出去了,外网网友看到就说这玩意是目前最逼真、最具有表现力的文本转语音模型。
9 月 8 日,B 站正式开源 IndexTTS2 的推理代码与模型权重。这个会表演的语音合成模型和大家见面了。
01
IndexTTS2,效果有点牛。
很多语音合成工具,生成的声音虽然清晰但有点机械,或者想调整语速、情绪时会发现很难控制。
IndexTTS2 在这方面做出了很大的突破。
你只需要提供一段很短的声音样本(比如 3-5 秒),它就能模仿那个人的音色,读出任何你想要的文字,而且还能带上不同的情绪。
先看看效果。
案例一:你给翻译翻译翻译,什么是他妈的惊喜?
02
模型创新点
① 精确控制语音时长
看了上面这些 Demo,可以发现 IndexTTS2 很创新的一点是可以精确控制语音时长,这是很多传统 TTS 模型做不到的。
比如你要给视频配音,需要某句话在 2 秒内说完,IndexTTS2 可以做到。
下面这三段音频都是基于 只有当科技为本地社群创造价值的时候,才真正有意义 这句话生成的 3 段不同语速的音频。
这对于影视剧配音、游戏对话等需要音画同步的场景非常实用。只有当科技为本地社群创造价值的时候,才真正有意义。
② 声音和情绪是分开调节
你可以用一个人的音色,同时赋予它另一种情绪。
比如用你朋友的声音读一段话,但让它听起来很开心、悲伤甚至害怕,而不需要你朋友真的那样表演一遍。
比如下面这个音频,表现出恐惧、开心、沮丧、惊讶等情绪,都是可以控制的。
③ 情绪控制方式很灵活
你可以直接录一段情绪参考音频,让它模仿那种语气。
在官方测试中,它的表现超过了当前很多同类模型,尤其是在语音清晰度、说话人相似度和情绪表达准确性上。
03
实现原理
IndexTTS2是一个级联式模型,包含三个核心模块,将文本到语音的任务分步完成。
上面就是 IndexTTS2 模型的架构图了,其中:
Text-to-Semantic (T2S) 模块:比较的核心模块,基于自回归模型。可以把输入的文本转换为包含内容的语义 Token。
借助这个模块实现融合音色、情感及时长控制。
Semantic-to-Mel (S2M) 模块:非自回归模型。负责将语义 Token 转换为梅尔频谱图。提升高情感语音的清晰度
Vocoder 模块:使用现成的高质量声码器 BigVGANv2。能够将上个模块输出的梅尔频谱图转换为音频波形。保障合成语音的自然度与保真度。
04
如何使用
下面教你如何一步步的在自己电脑部署 IndexTTS2,首先确保你的电脑已安装 Python、Git 和 CUDA。
如果你不清楚这是啥玩意,建议你不要往下看了,直接搜搜网上有没有别人部署好的,公开的服务。
第一步:下载代码和模型
① 克隆代码库:
git clone https://github.com/index-tts/index-tts.git
cd index-tts
② 启用 Git LFS,用于下载大模型文件:
git lfs install
git lfs pull
③ 下载预训练模型:
# 使用 Hugging Face CLI:
hf download IndexTeam/IndexTTS-2 --local-dir=checkpoints
#使用 ModelScope:
modelscope download --model IndexTeam/IndexTTS-2 --local_dir checkpoints
第二步:使用 uv 安装依赖
#①安装 uv :
pip install -U uv
#②使用 uv 创建虚拟环境并安装所有依赖 :
uv sync --all-extras
#③如果下载慢,可以使用国内镜像,例如:
uv sync --all-extras --default-index "https://mirrors.aliyun.com/pypi/simple"
第三步:选择方式运行
① 通过 Web UI 界面,最简单直观,启动 Web 服务:uv run webui.py
打开浏览器:访问 http://127.0.0.1:7860,即可在网页上上传音频、输入文本并进行合成。
② 通过 Python API,适合开发者集成到代码中,按以下模式调用:
# 导入库
from indextts.infer_v2 import IndexTTS2
# 初始化模型
tts = IndexTTS2(
cfg_path="checkpoints/config.yaml",
model_dir="checkpoints",
use_fp16=False, # 设为 True 可减少显存占用,轻微影响质量
use_deepspeed=False # 可尝试开启以加速推理
)
# 执行语音合成
text = "你要合成的文本内容"
tts.infer(
spk_audio_prompt='examples/voice_01.wav', # 说话人音色提示音频
text=text, # 要合成的文本
output_path="gen.wav", # 输出文件路径
# 以下为可选参数(用于情感控制):
# emo_audio_prompt="path/to/emo.wav", # 情感提示音频
# emo_vector=[0, 0, 0, 0, 0, 0, 0.45, 0], # 直接指定情感向量
# use_emo_text=True, # 使用文本本身的情感
# emo_text="你吓死我了!", # 或指定另一段文本来引导情感
verbose=True
)
使用 uv run 来运行脚本,以确保环境正确:
PYTHONPATH="$PYTHONPATH:." uv run your_script.py
IndexTTS2 不是一个普通的TTS工具,它更像是一个声音演员。你可以指定谁来说、用什么情绪说、说多快,甚至控制每一句话的时长。
是一个挺屌的 GitHub 开源项目。
开源地址:https://github.com/index-tts/index-tts
05
点击下方卡片,关注我
这个公众号历史发布过很多有趣的开源项目,如果你懒得翻文章一个个找,你直接关注微信公众号:逛逛 GitHub ,后台对话聊天就行了:
没有评论:
发表评论