TTS:基于深度学习的文本转语音生成库项目

🐸💬 - a deep learning toolkit for Text-to-Speech, battle-tested in research and production

分支80Tags98
文件最后提交记录最后更新时间
2 年前
2 年前
2 年前
2 年前
5 年前
2 年前
2 年前
2 年前
2 年前
6 年前
3 年前
2 年前
3 年前
3 年前
3 年前
4 年前
5 年前
5 年前
2 年前
2 年前
8 年前
4 年前
2 年前
2 年前
5 年前
2 年前
4 年前
2 年前
5 年前
2 年前
4 年前
3 年前
3 年前

🐸 Coqui.ai 最新动态

  • 📣 TTSv2 现已推出,支持16种语言,并在整体性能上有所提升。
  • 📣 TTS微调代码已发布,查看 示例食谱
  • 📣 TTS 现可实现低于200毫秒延迟的流式传输。
  • 📣 我们推出生产级的多语言TTS模型XTTS,能说13种语言,博客文章演示文档
  • 📣 🐶Bark 已上线,可用于不受限制的语音克隆推断。文档
  • 📣 您现在可以使用大约1100个Fairseq模型与-Coqui TTS一起使用。
  • 📣 Coqui TTS 现在支持更快推理的 🐢Tortoise。文档

青蛙TTS是高级文本转语音生成的库。

🚀 超过1100种语言的预训练模型。

🛠️ 用于训练新模型和以任何语言微调现有模型的工具。

📚 数据集分析和编目的实用程序。


Discord聊天徽章 许可证徽章 PyPI版本徽章 贡献者准则徽章 下载量徽章 DOI徽章

GitHub Actions 文本测试徽章 GitHub Actions TTS 测试徽章 GitHub Actions 音频合成器测试徽章 GitHub Actions 辅助测试徽章 GitHub Actions 数据测试徽章 GitHub Actions Docker 测试徽章 GitHub Actions 推理测试徽章 GitHub Actions 样式检查徽章 GitHub Actions ZOO 测试0徽章 GitHub Actions ZOO 测试1徽章 GitHub Actions ZOO 测试2徽章 文档徽章


💬 提问与讨论平台

请使用我们的专用渠道提出问题和进行讨论。公开分享的帮助对更多人更有价值。

类型 平台
🚨 bug 报告 [GitHub 问题追踪器]
🎁 功能请求及建议 [GitHub 问题追踪器]
👩‍💻 使用问题 [GitHub 讨论区]
🗯 一般性讨论 [GitHub 讨论区] 或 Discord

🔗 链接与资源

类型 链接
💼 文档 ReadTheDocs
💾 安装 TTS/README.md
👩‍💻 贡献指南 CONTRIBUTING.md
📌 路线图 主要开发计划
🚀 发布的模型 TTS 发布实验模型
📰 论文 TTS 论文

🥇 TTS 性能

带下划线的"TTS*"和"Judy*"是内部-Coqui TTS模型,未开源。它们展示的是潜力。前缀为点(.Jofish .Abe 和 .Janice)的模型是真实的人声。

功能特色

  • 针对Text2Speech任务的高性能深度学习模型。
    • 文本到频谱模型(Tacotron、Tacotron2、Glow-TTS、SpeedySpeech)。
    • 用于高效计算说话人嵌入的说话人编码器。
    • 语音合成器模型(MelGAN、Multiband-MelGAN、GAN-TTS、ParallelWaveGAN、WaveGrad、WaveRNN)
  • 快速且高效的模型训练。
  • 终端和Tensorboard上的详细训练日志。
  • 支持多说话人TTS。
  • 效率高、灵活轻便但功能完备的Trainer API
  • 发布并可立即使用的模型。
  • 工具用于整理Text2Speech数据集。
  • 使用和测试模型的实用程序。
  • 模块化(但不过于复杂)的代码基础,方便实现新想法。

模型实现

音谱模型

端到端模型

注意力方法

发音人编码器

合成器

语音转换

您也可以帮助我们实现更多模型。

安装

青蛙TTS已在Ubuntu 18.04上测试,需要 Python >= 3.9, < 3.12

如果您仅对使用发布的青蛙TTS模型合成语音感兴趣,从PyPI安装是最简单的方法。

pip install TTS

如果您打算编写代码或训练模型,请克隆青蛙TTS并本地安装。

git clone https://github.com/coqui-ai/TTS
pip install -e .[all,dev,notebooks]  # 选择相关的附加选项

如果您在Ubuntu(Debian)系统中,可以运行以下命令进行安装。

$ make system-deps  # 适用于Ubuntu (Debian)。如果您的操作系统不同,请告诉我们。
$ make install

如果您在Windows系统上,👑@GuyPaddock 编写了安装说明 在这里

Docker镜像

您还可以不安装就尝试TTS,使用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 # 开启服务器

然后您可以在此处享受TTS服务器 http://[::1]:5002/ 有关Docker镜像(如GPU支持)的更多信息请参见 这里

使用青蛙TTS合成语音

🐍 Python API

运行多发音人和多语言模型

import torch
from TTS.api import TTS

# 获取设备
device = "cuda" if torch.cuda.is_available() else "cpu"

# 列出可用的青蛙TTS模型
print(TTS().list_models())

# 初始化TTS
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to(device)

# 运行TTS
# ❗ 因为此模型是多语言声音克隆模型,所以我们需要设置目标speaker_wav和language
# 文本转语音,返回振幅值序列
wav = tts.tts(text="Hello world!", speaker_wav="my/cloning/audio.wav", language="en")
# 文本转语音到文件
tts.tts_to_file(text="Hello world!", speaker_wav="my/cloning/audio.wav", language="en", file_path="output.wav")

运行单发音人模型

# 用目标模型名初始化TTS
tts = TTS(model_name="tts_models/de/thorsten/tacotron2-DDC", progress_bar=False).to(device)

# 运行TTS
tts.tts_to_file(text="Ich bin eine Testnachricht.", file_path=OUTPUT_PATH)

# 示例:用YourTTS模型英语、法语和葡萄牙语的声音克隆
tts = TTS(model_name="tts_models/multilingual/multi-dataset/your_tts", progress_bar=False).to(device)
tts.tts_to_file("This is voice cloning.", speaker_wav="my/cloning/audio.wav", language="en", file_path="output.wav")
tts.tts_to_file("C'est le clonage de la voix.", speaker_wav="my/cloning/audio.wav", language="fr-fr", file_path="output.wav")
tts.tts_to_file("Isso é clonagem de voz.", speaker_wav="my/cloning/audio.wav", language="pt-br", file_path="output.wav")

示例语音转换

source_wav中的声音转换为target_wav中的声音

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")

示例与语音转换模型一起的声音克隆

这样,您就可以利用青蛙TTS中的任何模型克隆声音。

tts = TTS("tts_models/de/thorsten/tacotron2-DDC")
tts.tts_with_vc_to_file(
    "Wie sage ich auf Italienisch, dass ich dich liebe?",
    speaker_wav="target/speaker.wav",
    file_path="output.wav"
)

使用Fairseq模型进行约1100种语言的文本转语音示例 🤯

对于Fairseq模型,请使用如下名称格式:tts_models/<lang-iso_code>/fairseq/vits。 您可以在此处找到语言ISO代码, 并了解Fairseq模型的详情 这里

# 带有实时语音转换的TTS
api = TTS("tts_models/deu/fairseq/vits")
api.tts_with_vc_to_file(
    "Wie sage ich auf Italienisch, dass ich dich liebe?",
    speaker_wav="target/speaker.wav",
    file_path="output.wav"
)

命令行 tts

在命令行中合成语音。

你可以使用训练好的模型,或者从提供的列表中选择一个模型。

如果不指定模型,则会使用基于LJSpeech的英文模型。

单一发音人模型

  • 列出可用模型:

    $ tts --list_models
    
  • 获取模型信息(适用于tts_modelsvocoder_models):

    • 通过名称查询: 模型_info_by_name 使用--list_models中列出的名称。

      $ tts --model_info_by_name "<模型类型>/<语言>/<数据集>/<模型名称>"
      

      示例:

      $ tts --model_info_by_name tts_models/tr/common-voice/glow-tts
      $ tts --model_info_by_name vocoder_models/en/ljspeech/hifigan_v2
      
    • 通过索引查询: 模型_query_idx 使用--list_models中的对应索引。

      $ tts --model_info_by_idx "<模型类型>/<模型查询索引>"
      

      示例:

      $ tts --model_info_by_idx tts_models/3
      
    • 通过全名获取信息:

      $ tts --model_info_by_name "<模型类型>/<语言>/<数据集>/<模型名称>"
      
  • 使用默认模型运行TTS:

    $ tts --text "TTS 文本" --out_path 输出路径/语音.wav
    
  • 将生成的TTS波形文件数据直接输出并播放:

    $ tts --text "TTS 文本" --pipe_out --out_path 输出路径/语音.wav | aplay
    
  • 使用默认的声码器模型运行TTS模型:

    $ tts --text "TTS 文本" --model_name "<模型类型>/<语言>/<数据集>/<模型名称>" --out_path 输出路径/语音.wav
    

    示例:

    $ tts --text "TTS 文本" --model_name "tts_models/en/ljspeech/glow-tts" --out_path 输出路径/语音.wav
    
  • 从列表中指定TTS和声码器模型运行:

    $ tts --text "TTS 文本" --model_name "<模型类型>/<语言>/<数据集>/<模型名称>" --vocoder_name "<模型类型>/<语言>/<数据集>/<模型名称>" --out_path 输出路径/语音.wav
    

    示例:

    $ tts --text "TTS 文本" --model_name "tts_models/en/ljspeech/glow-tts" --vocoder_name "vocoder_models/en/ljspeech/univnet" --out_path 输出路径/语音.wav
    
  • 运行自己的TTS模型(使用Griffin-Lim声码器):

    $ tts --text "TTS 文本" --model_path 路径/to/model.pth --config_path 路径/to/config.json --out_path 输出路径/语音.wav
    
  • 运行自定义的TTS和声码器模型:

    $ tts --text "TTS 文本" --model_path 路径/to/model.pth --config_path 路径/to/config.json --out_path 输出路径/语音.wav
        --vocoder_path 路径/to/vocoder.pth --vocoder_config_path 路径/to/vocoder_config.json
    

多发音人模型

  • 列出可用的发音人并选择一个 <speaker_id>

    $ tts --model_name "<语言>/<数据集>/<模型名称>"  --list_speaker_idxs
    
  • 使用目标发音人ID运行多发音人TTS模型:

    $ tts --text "TTS 文本." --out_path 输出路径/语音.wav --model_name "<语言>/<数据集>/<模型名称>"  --speaker_idx <发言者_id>
    
  • 运行自己的多发音人TTS模型:

    $ tts --text "TTS 文本" --out_path 输出路径/语音.wav --model_path 路径/to/model.pth --config_path 路径/to/config.json --speakers_file_path 路径/to/speaker.json --speaker_idx <speaker_id>
    

声音转换模型

$ tts --out_path 输出路径/语音.wav --model_name "<语言>/<数据集>/<模型名称>" --source_wav <发音人音频路径> --target_wav <参考音频路径>

目录结构

|- notebooks/       (用于模型评估、参数选择及数据分析的 Jupyter Notebook 文件夹。)
|- utils/           (通用工具。)
|- TTS
    |- bin/             (存放所有可执行程序的文件夹。)
      |- train*.py                  (训练你的目标模型。)
      |- ...
    |- tts/             (文本转语音模型)
        |- layers/          (模型层定义)
        |- models/          (模型定义)
        |- utils/           (模型特定的工具。)
    |- speaker_encoder/ (发音人编码器模型)
        |- (同上)
    |- vocoder/         (声码器模型)
        |- (同上)