Loading...

文章背景图

Coqui TTS 语音合成库本地部署与实战指南

2024-02-10
0
- 字
- 分钟
|

Coqui TTS 语音合成库本地部署与实战指南

Coqui TTS Logo

一、项目介绍

Coqui TTS(🐸TTS)是一个面向高级文本转语音(Text-to-Speech)生成的 Python 库。它内置了大量预训练模型,支持 1100 多种语言的语音合成,并提供训练新模型、微调已有模型、数据集分析与整理的完整工具链。

库的能力覆盖:文本到频谱模型(Tacotron、Tacotron2、Glow-TTS、SpeedySpeech、FastSpeech 等)、端到端模型(VITS、XTTS、YourTTS、Tortoise、Bark)、声码器(MelGAN、HiFi-GAN、WaveRNN 等)以及声码器级别的声音转换。其中 XTTS 支持多语言声音克隆——给一段参考音频,就能用目标声音朗读指定文本。

在语音合成这个方向上,开源方案长期缺少一个"既全又好用"的库。Coqui TTS 的出现填补了这个空白:它把常见模型架构都收进来,统一在一套 Python API 下,让研究者不必为每种模型单独找实现。无论你想快速试听一段语音,还是想训练自己的模型,都能在同一套工具链里完成。

TTS 性能对比

它既可以通过 PyPI 一行命令安装后直接合成语音,也可以从源码克隆后训练自己的模型,还提供 Docker 镜像与 HTTP 服务器,方便集成到应用中。

作为一个研究与工程兼顾的项目,Coqui TTS 在设计上刻意区分了"使用预训练模型"与"训练新模型"两条路径。普通用户只需要 pip install TTS 就能调用现成的多语言模型;而研究者或有特殊音色需求的团队,可以从源码安装后使用其内置的训练器,在自己标注的语音数据集上从头训练,或在已有模型基础上微调。这种分层设计让它既能服务快速验证,也能支撑深度定制,是它在开源语音合成领域被广泛采用的原因。

在模型形态上,库内同时保留了两代技术路线:较早的两阶段模型先由文本预测梅尔频谱,再由声码器把频谱还原为波形;较新的端到端模型(如 VITS、XTTS)则把文本编码与波形生成合并在一个网络里,直接输出波形,省去了声码器拼接带来的额外损耗。理解这个区别,有助于在"合成速度"与"自然度"之间做权衡——两阶段模型更快但音色略机械,端到端模型更自然但显存占用更大。

语音合成能做什么

现代 TTS 已经从"机械播报"发展到"接近真人朗读"。Coqui TTS 这类深度学习方案的典型应用场景包括:为有声书与播客批量配音、为视频旁白自动生成语音、为无障碍应用提供屏幕朗读、为客服机器人输出自然语音、以及声音克隆——只需要一段几秒的参考录音,就能让模型用该音色朗读任意文本。对于中文内容创作者,XTTS 等多语言模型支持中文(zh-cn)合成,可以直接生成中文语音而不必单独训练中文模型。

与商业 TTS API 相比,本地部署开源 TTS 的优势在于:无需按字符付费、可离线运行、可针对自己的语料微调音色、隐私数据不出本机。代价是需要一定的 GPU 资源,且合成质量与自然度仍逊于头部商业方案。对实验者与中小团队来说,这是一个性价比很高的起点。

说明:原 coqui-ai/TTS 仓库最后一次提交停留在 2024 年初,项目后续维护转移到了新组织。本文命令与模型名以该仓库 README 为准,新版本请参考官方文档与社区迁移说明。

二、官方信息

项目 信息
仓库地址 coqui-ai/TTS
官方文档 tts.readthedocs.io
开源协议 MPL-2.0
主语言 Python
PyPI 包 TTS
Docker 端口 5002
最近更新 2024-02-10

模型输出示例

三、项目结构与核心特性

TTS/
├── TTS/
│   ├── bin/            # 训练与合成可执行脚本
│   ├── tts/            # 文本转频谱模型
│   ├── speaker_encoder/ # 声码编码器
│   └── vocoder/        # 声码器模型
├── notebooks/          # Jupyter 评估与分析笔记
└── utils/              # 通用工具

核心特性:

  • 预训练模型开箱即用:覆盖英语、德语、中文等多语言,支持单说话人与多说话人模型。
  • 声音克隆:XTTS、YourTTS 等模型支持传入 speaker_wav 参考音频克隆音色。
  • 声音转换:FreeVC 等模型可把源音频音色换成目标音色。
  • 完整训练工具链:Trainer API 轻量灵活,支持多说话人 TTS 训练与 Tensorboard 日志。
  • HTTP 服务器:server.py 提供 Web 界面与 API,默认端口 5002。
  • CLI 工具:tts 命令行可列出模型、合成语音、指定声码器。

这几个入口覆盖了不同使用场景:偶尔合成一段用 CLI,集成进应用用 Python API,给团队共享用 HTTP 服务器。同一份底层模型,三种调用方式,按需选择即可。

四、环境与版本要求

组件 版本要求 说明
Python >= 3.9, < 3.12 官方测试于 Ubuntu 18.04
PyTorch 与 TTS 版本匹配 推理与训练均需要
GPU(可选) CUDA 兼容显卡 训练与实时合成建议,CPU 也可推理
系统依赖(Ubuntu) libsndfile 等 音频处理库

Windows 用户可参考社区整理的 CUDA 安装指南。仅做推理时,PyPI 安装通常会带上所需依赖。

Python 版本这里要特别注意:官方明确支持范围是大于等于 3.9 且小于 3.12,意味着 3.12 及以上可能装不上或跑不通。很多人默认用最新 Python,结果卡在依赖编译上。建议建环境时直接指定 3.10 或 3.11,省去折腾。GPU 方面,有显卡体验会好很多,但纯 CPU 也能跑通小模型,只是合成速度慢。

五、本地部署步骤

1. 创建虚拟环境

python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install --upgrade pip

2. 安装 TTS(仅推理)

pip install TTS

3. 从源码安装(用于训练)

git clone https://github.com/coqui-ai/TTS
cd TTS
pip install -e .[all,dev,notebooks]

Ubuntu/Debian 用户也可以用项目自带 Makefile:

make system-deps   # 安装系统依赖
make install

4. 验证安装并列出模型

tts --list_models

该命令会打印所有可用的预训练模型(tts_models/... 与 vocoder_models/...)。

第一次运行时这个列表可能很长,不必逐条读完。建议先从中挑一个英文单说话人模型(如 tts_models/en/ljspeech/ 开头的)跑通流程,确认合成与播放都没问题,再根据需要去找中文或声音克隆模型。列表里模型名的三段结构(语言/数据集/模型类型)本身就是一张选型表,照着这个结构挑,比凭感觉选更稳。

5. 命令行合成语音

tts --text "Hello, welcome to Coqui TTS." \
    --model_name "tts_models/en/ljspeech/glow-tts" \
    --out_path output.wav

播放 output.wav 即可听到合成语音。

6. (可选)Docker 方式

docker run --rm -it -p 5002:5002 --entrypoint /bin/bash ghcr.io/coqui-ai/tts-cpu
# 容器内列出模型
python3 TTS/server/server.py --list_models
# 启动服务器
python3 TTS/server/server.py --model_name tts_models/en/vctk/vits

随后在浏览器访问 http://localhost:5002/ 即可使用 Web 界面。

TTS CLI 演示

第一次跑通建议先用默认预训练模型合成一句短文本,确认音频能正常输出,再尝试声音克隆或训练自己的模型。把简单路径走通,复杂功能才好调试。

六、API 用法与示例

1. Python 合成(多说话人多语言模型)

import torch
from TTS.api import TTS

device = "cuda" if torch.cuda.is_available() else "cpu"

# 列出所有可用模型
print(TTS().list_models())

# 初始化 XTTS v2(多语言声音克隆模型)
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to(device)

# 合成到文件:必须传入 speaker_wav 与 language
tts.tts_to_file(
    text="Hello world!",
    speaker_wav="my/cloning/audio.wav",
    language="en",
    file_path="output.wav"
)

逐行说明:

  • TTS("...").to(device):加载预训练模型并搬到 GPU/CPU。
  • speaker_wav:用于克隆音色的参考音频路径。
  • language:目标语言代码(如 en、zh-cn)。

这段代码和命令行做的是同一件事,只是放到 Python 里方便批量处理。当你要对几十段文本循环合成时,写成 Python 脚本比反复敲命令更高效,也更容易加日志、加重试、加错误处理。首次加载模型会占用较多显存,如果同时开了其他模型服务,注意显存占用。

如何选择合适的模型

TTS 仓库里的模型按"语言/数据集/模型名"三层命名。如果只是想快速听效果,用 LJSpeech 的英文单说话人模型最省事;如果要做多语言声音克隆,选 tts_models/multilingual/multi-dataset/xtts_v2;如果要在德语等小语种上跑,选对应语言的预训练模型。--list_models 输出的每一行都标注了模型类型(tts_models 或 vocoder_models)、语言、数据集与名称,按这个结构去挑即可。声码器(vocoder)决定最终波形质量,默认情况下 TTS 会自动配一个,但你也可以用 --vocoder_name 指定更高质量的声码器。

2. 单说话人模型

tts = TTS(model_name="tts_models/de/thorsten/tacotron2-DDC",
          progress_bar=False).to(device)
tts.tts_to_file(text="Ich bin eine Testnachricht.", file_path="output.wav")

3. 声音转换

tts = TTS(model_name="voice_conversion_models/multilingual/vctk/freevc24",
          progress_bar=False).to("cuda")
tts.voice_conversion_to_file(
    source_wav="my/source.wav",
    target_wav="my/target.wav",
    file_path="output.wav"
)

4. CLI 常用参数

# 用指定声码器
tts --text "Hello" \
    --model_name "tts_models/en/ljspeech/glow-tts" \
    --vocoder_name "vocoder_models/en/ljspeech/univnet" \
    --out_path out.wav

# 多说话人模型选择说话人
tts --text "Hello." --model_name "tts_models/en/vctk/vits" \
    --speaker_idx p225 --out_path out.wav

# 查看模型信息
tts --model_info_by_name "tts_models/tr/common-voice/glow-tts"

合成效果调优要点

第一次合成出来的声音如果不自然,通常不是模型坏了,而是输入文本或参数的问题。注意几点:文本里的数字、缩写、标点会影响停顿与发音,必要时把"Dr."写成"Doctor";长句拆成短句合成后再拼接,比一次塞一大段更稳;声音克隆时参考音频要干净、无背景噪音、时长 6 到 10 秒足够,太长反而引入杂音;采样率与输出格式按下游播放需求选,一般 22050Hz 或 24000Hz 的 wav 即可。

如果要批量生成有声书,建议写一个 Python 脚本遍历章节文本,循环调用 tts_to_file,并把每段的耗时、字数、输出路径记到日志里,方便失败重试。CPU 环境下实时性差,可以先把整本书合成成 wav 文件离线播放,而不是追求流式低延迟。

开源 TTS 与商业方案的取舍

本地部署 Coqui TTS 的好处是零边际成本、可离线、可微调,但代价是要自己管 GPU、自己调参、效果上限不如头部商业 API。如果你的场景是一次性生成几十段配音,直接用商业 TTS API 可能更省事;如果是要做产品级声音克隆、需要隐私合规、或要针对特定语料微调音色,本地开源方案才值得投入。

技术上,TTS 系统分两阶段:文本到频谱(如 Tacotron、FastSpeech)再由声码器(如 HiFi-GAN)转波形。Coqui 把这两部分都模块化了,你可以换不同的声码器搭配同一个文本模型,在音质与速度间权衡。XTTS 这类端到端模型把两阶段合并,支持零样本声音克隆,但对参考音频质量更敏感。理解这个分工,有助于你在效果不佳时定位是文本模型的问题还是声码器的问题。

合成后多试听几次,调整语速与声码器参数,音质会有明显差别。

多换几个声码器对比,差别很直观。

逐步尝试更复杂的功能,过程会很顺畅。

七、常见问题 FAQ

下面整理了初次安装与合成语音时最常遇到的几个疑问,供快速排查参考。Python 版本不兼容、音频依赖缺失、端口被占用是三大坑,下面给出对应处理方式。

Q1:Python 3.12 能装吗?
官方 README 测试范围是 >=3.9, <3.12。Python 3.12 可能遇到依赖冲突,建议用 3.10 或 3.11。如果必须用 3.12,请以官方文档为准并关注社区issue。

Q2:第一次运行为什么下载很慢?
首次调用会从 Hub 下载预训练模型权重(几百 MB 起),请耐心等待。下载后会缓存到本地,二次运行无需重复下载。

Q3:CPU 上能跑吗?
能,但合成速度较慢。XTTS 等大模型在 CPU 上实时性较差,建议有 GPU 时使用 device="cuda"。

Q4:如何训练自己的中文声音模型?
从源码安装后,参考 TTS/bin/train_*.py 与 recipes/ 目录下的示例配方(如 LJSpeech)。需要准备标注好的语音数据集(wav + 文本对齐)。

Q5:HTTP 服务器默认端口是多少?
默认端口是 5002。Docker 启动时映射 -p 5002:5002,访问 http://localhost:5002/。端口冲突时可在启动命令中修改。

整体来看,Coqui TTS 是一个"既能快速试用、也能深度定制"的语音合成工具。新手从命令行一行合成开始,很快就能听到效果;有进阶需求的团队则可以顺着训练工具链微调音色、搭建本地服务。需要注意的是原仓库已停止活跃维护,生产环境使用前应确认社区迁移后的版本与兼容性,并关注许可证对商用音色克隆的约束。

以上就是 Coqui TTS 的本地部署与合成流程。注意 Python 版本区间,有显卡体验更佳,纯 CPU 也能跑通小模型。

八、相关链接

本文命令与版本要求对照仓库 README 整理,TTS 项目后续维护已迁移,模型可用性与 Python 版本支持请以官方文档为准。

评论交流

文章目录