python系列&deep_study系列:TTS语音合成部署服务器,可远程访问(全部代码和详细部署步骤)
TTS语音合成部署服务器,可远程访问(全部代码和详细部署步骤)
TTS语音合成部署服务器,可远程访问(全部代码和详细部署步骤)
TTS
(Text-to-Speech
,文本转语音)是一种将书面文本转换成口头语言输出的技术。用户输入文本,TTS系统
将这些文本“读”出来,通常是通过合成语音的形式。这种技术可以使计算机、智能手机、平板电脑和其他设备通过语音与用户交流。
TTS系统通常包括以下几个步骤:
-
文本预处理:将输入的文本转换成适合处理的格式,包括文本归一化(比如数字转换成文字)、去除无用字符、识别句子和词语边界等。
-
文本分析:对处理后的文本进行语法分析,确定词语的发音和句子的语调。这一步可能包括词性标注、句法分析等。
-
发音转换:根据文本分析的结果,将文本转换成发音符号或直接转换成语音波形。这可能涉及到查阅发音字典或应用语音合成算法。
-
语音合成:将发音转换成可听见的语音。这一步通常使用数字信号处理技术,可以通过不同的方法实现,如连接法(串联存储的语音片段)和参数法(实时生成语音波形)。
TTS技术有着广泛的应用和重要的社会意义:
-
辅助技术:对于视力障碍人士或阅读障碍者,TTS可以提供一个听觉上的阅读方式,使他们能够“阅读”电子书、网页、文档等。
-
教育:TTS可以帮助学习语言的人们更好地理解和发音新词汇,也可以作为教学辅助工具,为学生提供更多样的学习方式。
-
交互系统:在自动应答系统、虚拟助手、导航系统等应用中,TTS能够提供用户界面的语音输出,使得用户交互更加自然和便捷。
-
媒体和娱乐:TTS可以用于新闻阅读、播客、视频内容的语音旁白等,扩展内容的接触和消费方式。
随着技术的发展,TTS的自然度和可理解性在不断提高,使得它在我们日常生活中的应用越来越广泛
一、环境配置
pip install TTS
git clone https://github.com/coqui-ai/TTS
make system-deps
make install
https://huggingface.co/coqui/XTTS-v2
下载模型
from TTS.api import TTS
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2")
tts.to("cuda") # 如果你想要使用GPU
# generate speech by cloning a voice using default settings
tts.tts_to_file(text="It took me quite a long time to develop a voice, and now that I have it I'm not going to be silent.",
file_path="output.wav",
speaker_wav="5.wav",
language="en")
运行后会下载模型到指定目录,会一直下不下来,将上面文件夹复制过去即可。
成功后,会生成output.wav
二、服务器部署
from fastapi import FastAPI, HTTPException, Form
from fastapi.responses import FileResponse
import os
from TTS.api import TTS
app = FastAPI()
# 初始化TTS模型
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2")
tts.to("cuda") # 或者 tts.to("cpu"),取决于你的服务器配置
# 指定一个固定的speaker_wav文件路径
fixed_speaker_wav_path = "5.wav"
# 确保temp目录存在
temp_dir = "temp"
os.makedirs(temp_dir, exist_ok=True)
@app.post("/tts/")
async def create_audio(text: str = Form(...)):
# 生成安全的临时文件名
output_file_name = f"{os.urandom(8).hex()}.wav"
output_path = os.path.join(temp_dir, output_file_name)
try:
# 调用TTS模型生成语音,使用固定的speaker_wav文件
tts.tts_to_file(text=text,
file_path=output_path,
speaker_wav=fixed_speaker_wav_path,
language="zh-cn")
except Exception as e:
# 如果出现错误,返回错误信息
raise HTTPException(status_code=500, detail=str(e))
# 如果成功,返回生成的音频文件
return FileResponse(output_path)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8001)
问答:
问:博主在吗,我用postman提示 无法打开5.wav
“detail”: “Error opening ‘5.wav’: System error.”,请问怎么解决
答:将你的音频文件重命名为5.wav,或者代码替换它,音频文件最好5秒,不要太长