当前位置: 首页 > news >正文

轻松实现文字转语音 - Coqui TTS部署实践

废话不多说,咱们直接开始吧!

环境安装

1、创建python虚拟环境

conda create --name env_coqui python=3.10
conda activate env_coqui

2、安装tts

pip install TTS

3、查看模型列表

tts --list_models
(env_coqui) PS D:\work\ai\tts\Coqui> tts --list_models

Name format: type/language/dataset/model
1: tts_models/multilingual/multi-dataset/xtts_v2
2: tts_models/multilingual/multi-dataset/xtts_v1.1
3: tts_models/multilingual/multi-dataset/your_tts
4: tts_models/multilingual/multi-dataset/bark
5: tts_models/bg/cv/vits
6: tts_models/cs/cv/vits
7: tts_models/da/cv/vits
8: tts_models/et/cv/vits
9: tts_models/ga/cv/vits
10: tts_models/en/ek1/tacotron2
11: tts_models/en/ljspeech/tacotron2-DDC
12: tts_models/en/ljspeech/tacotron2-DDC_ph
13: tts_models/en/ljspeech/glow-tts
14: tts_models/en/ljspeech/speedy-speech
15: tts_models/en/ljspeech/tacotron2-DCA
16: tts_models/en/ljspeech/vits
17: tts_models/en/ljspeech/vits–neon
18: tts_models/en/ljspeech/fast_pitch
19: tts_models/en/ljspeech/overflow
20: tts_models/en/ljspeech/neural_hmm
21: tts_models/en/vctk/vits

测试预训练模型

选择一个预训练模型(例如 tts_models/en/ljspeech/tacotron2-DDC),并测试其效果:

tts --text "Hello, this is a test of Coqui TTS." --model_name tts_models/en/ljspeech/tacotron2-DDC --vocoder_name vocoder_models/universal/libri-tts/wavegrad --out_path output.wav

上述命令运行完成后,在当前目录下生成了output.wav文件,点击可以播放。

写一个web页面

为了方便使用,我们使用flask框架做一个简单的web应用。

一段简单的python代码:

tts_demo.py
from flask import Flask, request, send_file, render_template
from TTS.api import TTS
import os
import torchapp = Flask(__name__)
# 修复 TTS 模型和 vocoder 的设置方式
from TTS.utils.radam import RAdam
from collections import defaultdict
with torch.serialization.safe_globals([RAdam, defaultdict, dict]):tts = TTS(model_name="tts_models/zh-CN/baker/tacotron2-DDC-GST")@app.route("/", methods=["GET"])
def index():return render_template("index.html")@app.route("/synthesize", methods=["POST"])
def synthesize():text = request.json.get("text")output_path = "output.wav"tts.tts_to_file(text=text, file_path=output_path)return send_file(output_path, mimetype="audio/wav")if __name__ == "__main__":app.run(host="0.0.0.0", port=5000)

一个无比简洁优雅的web页面~

templates/index.html
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>文字转语音</title><style>body {font-family: Arial, sans-serif;max-width: 800px;margin: 0 auto;padding: 20px;line-height: 1.6;}h1 {text-align: center;margin-bottom: 30px;color: #333;}.container {background-color: #f9f9f9;border-radius: 8px;padding: 20px;box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);}textarea {width: 100%;height: 150px;margin-bottom: 20px;padding: 10px;border: 1px solid #ddd;border-radius: 4px;resize: vertical;}button {background-color: #4CAF50;color: white;border: none;padding: 10px 20px;text-align: center;font-size: 16px;cursor: pointer;border-radius: 4px;}button:hover {background-color: #45a049;}.audio-container {margin-top: 20px;}</style>
</head>
<body><h1>文字转语音</h1><div class="container"><textarea id="textInput" placeholder="请输入要转换为语音的文字..."></textarea><button id="convertBtn">转换为语音</button><div class="audio-container"><audio id="audioOutput" controls style="display: none;"></audio></div></div><script>document.getElementById('convertBtn').addEventListener('click', async () => {const text = document.getElementById('textInput').value;if (!text) {alert('请输入文字内容!');return;}try {// 显示加载中状态document.getElementById('convertBtn').disabled = true;document.getElementById('convertBtn').textContent = '处理中...';// 发送请求到后端const response = await fetch('/synthesize', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({ text })});if (!response.ok) {throw new Error('转换失败');}// 获取音频blobconst blob = await response.blob();const audioUrl = URL.createObjectURL(blob);// 播放音频const audioElement = document.getElementById('audioOutput');audioElement.src = audioUrl;audioElement.style.display = 'block';audioElement.play();} catch (error) {alert('转换失败:' + error.message);} finally {// 恢复按钮状态document.getElementById('convertBtn').disabled = false;document.getElementById('convertBtn').textContent = '转换为语音';}});</script>
</body>
</html> 

运行程序:python demo.py
然后在浏览器输入访问地址:http://localhost:5000/,就可以将任意的文字转为语音啦!
在这里插入图片描述

当然如果需要特定的声音效果,我们可以进行自定义训练。例如用自己录制的声音去训练,就可以生成符自己的专属声音了!

总结,在数字人直播、视频配音、有声书、播客等场景,tts(text to speech)都有广泛的应用。我们需要选择符合我们的模型,并且可以通过自定义训练我们需要的声音。

Coqui TTS简介

Coqui TTS是一个开源的文本转语音(TTS)工具包,旨在提供高质量、灵活且易于使用的语音合成解决方案。它由 Mozilla 的 TTS 项目发展而来,并在社区的支持下不断改进和扩展。Coqui TTS 支持多种语言、模型架构和声码器,适用于从研究到生产的各种场景。

核心特点

1.多模型支持

  • Coqui TTS 提供了多种 TTS 模型架构的支持,包括但不限于:

  • Tacotron 2:经典的序列到序列模型。

  • FastPitch:基于 Transformer 的非自回归模型,适合实时应用。

  • VITS:端到端模型,结合变分推断和对抗学习,生成高质量语音。

  • YourTTS:支持多语言和个性化声音训练的模型。

  • 用户可以根据需求选择不同的模型以平衡音质和性能。

2.高质量声码器

  • Coqui TTS 集成了多种先进的声码器(Vocoder),用于将梅尔频谱图转换为音频波形:

  • HiFi-GAN:高保真生成对抗网络,音质接近真人水平。

  • WaveGrad:基于扩散模型的声码器,生成效果优秀。

  • WaveRNN:轻量级声码器,适合实时应用。

  • 声码器的选择直接影响最终音频的质量和生成速度。

3.多语言支持

  • Coqui TTS 支持多种语言的语音合成,包括但不限于英语、中文、西班牙语、法语等。
  • 特别是 YourTTS 和 XTTS 模型,能够通过少量数据快速适配新的语言或特定说话人。

4.开箱即用

  • Coqui TTS 提供了大量的预训练模型,用户无需训练即可直接使用这些模型进行语音合成。
  • 这些模型覆盖了多种语言、口音和声音风格,满足不同场景的需求。

5.灵活的训练框架

  • 如果需要定制化的声音(如特定说话人的声音),Coqui TTS 提供了完整的训练流程。
  • 支持从头训练或微调现有模型,只需准备相应的语音数据集。

6.易用性

  • 提供了命令行工具和 Python API,方便用户快速上手。
  • 文档齐全,社区活跃,适合初学者和开发者。

应用场景

1.数字人直播

  • 结合 Coqui TTS 和虚拟形象技术,实现数字人实时语音交互。
  • 可用于电商直播、教育、娱乐等领域。

2.语音助手

  • 为智能音箱、客服机器人等设备提供自然流畅的语音合成能力。

3.内容创作

  • 将文本内容(如电子书、文章)转换为语音,用于播客、有声读物等。

4.多语言支持

  • 在国际化项目中,使用 Coqui TTS 生成多种语言的语音,提升用户体验。

相关文章:

  • 鸿蒙NEXT开发键值型数据工具类(ArkTs)
  • 直线轴承在自动化机械设备中的应用
  • PHP连接MYSQL数据库
  • MCP协议 —— AI世界的“USB-C接口”
  • 本地生活服务信息分类信息系统
  • 10厘米分辨率遥感卫星升空:智慧农业与农业保险的变革与机遇——从SpaceX拼车任务看高精度遥感如何重塑农业未来
  • Redis面试——缓存淘汰和过期删除
  • 深度学习笔记39_Pytorch文本分类入门
  • element-plus添加暗黑模式
  • 【人工智能】DeepSeek 与 RAG 技术:构建知识增强型问答系统的实战
  • 【vLLM 学习】Aqlm 示例
  • 嵌入式ARM RISCV toolchain工具 梳理arm-none-eabi-gcc
  • PHP腾讯云人脸核身获取FaceId
  • 哪种电脑更稳定?Mac?Windows?还是云电脑? 实测解密
  • YOLOv8技术详解:革命性的目标检测算法
  • Spring lazy-init 懒加载的原理
  • Linux 日常运维命令大全
  • Tensorflow释放GPU资源
  • hadoop的三大结构及各自的作用
  • 使用Jasypt对配置文件内容加密
  • 世界读书日|阅读在上海
  • 供应商已“陷入困境”,美汽车行业致信特朗普政府
  • 几百元的工资优势已不能吸引人才流动,江苏多地探讨“抢人”高招
  • 电商平台全面取消“仅退款”:电商反内卷一大步,行业回归良性竞争
  • 中纪委驻中组部纪检监察组原组长李刚被捕
  • 云南巧家警方抓获一名网逃人员:带70余万现金“隐居”山洞,昼伏夜出