Orpheus-FASTAPI:高性能文本转语音服务器的全面指南
在当今数字化时代,文本转语音(TTS)技术已经成为许多应用程序的核心组件,从智能助手到教育工具,再到内容创作。Orpheus-FASTAPI 是一个高性能的 TTS 服务器,它不仅提供了与 OpenAI 兼容的 API,还拥有多种声音选项、情感标签和现代化的网页界面。这个项目针对 RTX GPU 进行了优化,能够处理长音频,并支持情感表达。本文将深入探讨 Orpheus-FASTAPI 的功能、安装、使用方法以及其背后的技术细节。
什么是 Orpheus-FASTAPI?
Orpheus-FASTAPI 是一个基于 FastAPI 构建的高性能文本转语音服务器。它允许用户通过简单的 API 调用,将文本转换为自然流畅的语音。这个项目不仅支持多种声音选项,还允许通过情感标签添加表达效果,如笑声、叹息等。Orpheus-FASTAPI 的设计目标是提供高质量的语音合成,同时保持高性能和易用性。
核心功能
与 OpenAI 兼容的 API
Orpheus-FASTAPI 提供了一个与 OpenAI API 兼容的接口,这意味着你可以轻松地将它集成到现有的应用程序中,而无需修改大量代码。例如,你可以使用以下 curl 命令来生成语音:
curl http://localhost:5005/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"model": "orpheus",
"input": "Hello world! This is a test of the Orpheus TTS system.",
"voice": "tara",
"response_format": "wav",
"speed": 1.0
}' \
--output speech.wav
多种声音选项
Orpheus-FASTAPI 提供了 8 种不同的声音选项,每种声音都有其独特的特征。例如:
-
Tara:女性,会话式,清晰 -
Leah:女性,温暖,温和 -
Jess:女性,充满活力,年轻 -
Leo:男性,权威,深沉 -
Dan:男性,友好,随意 -
Mia:女性,专业,清晰表达 -
Zac:男性,热情,动态 -
Zoe:女性,平静,舒缓
你可以根据具体需求选择最合适的声音。
情感标签
Orpheus-FASTAPI 支持情感标签,允许你在文本中插入特定的标签来添加表达效果。例如:
-
<laugh>
:添加笑声 -
<sigh>
:添加叹息 -
<chuckle>
:添加轻笑 -
<cough>
:添加咳嗽声 -
<sniffle>
:添加抽泣声 -
<groan>
:添加呻吟声 -
<yawn>
:添加哈欠声 -
<gasp>
:添加喘气声
这些标签可以帮助你生成更具表现力的语音。例如:
"Well, that's interesting <laugh> I hadn't thought of that before."
长音频支持
Orpheus-FASTAPI 支持长音频生成,通过智能分批和交叉淡入淡出拼接技术,可以处理任意长度的文本。系统会自动检测较长的输入文本,并将其分割成合理的块进行独立处理,最后将音频片段组合在一起,确保输出的音频流畅自然。
技术细节
硬件优化
Orpheus-FASTAPI 针对不同的硬件配置进行了智能检测和优化:
-
高端 GPU 模式:适用于 16GB+ 显存、计算能力 8.0+ 或 12GB+ 显存且计算能力 7.0+ 的 GPU。这种模式使用高级并行处理,4 个工作线程,优化的批处理大小(32 个令牌),以及高吞吐量的并行文件 I/O。 -
标准 GPU 模式:适用于其他 CUDA 兼容的 GPU,提供高效的并行处理和 CUDA 加速。 -
CPU 模式:当没有 GPU 可用时,系统会切换到保守处理模式,使用 2 个工作线程,优化的内存使用和较小的批处理大小(16 个令牌)。
令牌处理优化
系统使用了一个上下文窗口大小为 49 个令牌(7²),并以 7 个令牌为一批进行处理。这种平方关系确保了令牌的完整处理,不会遗漏任何令牌,从而生成更干净的音频。
与外部推理服务器的集成
Orpheus-FASTAPI 需要连接到一个外部的 LLM 推理服务器。你可以选择以下几种服务器:
-
GPUStack:GPU 优化的 LLM 推理服务器,支持 LAN/WAN 张量分割并行化。 -
LM Studio:加载 GGUF 模型并启动本地服务器。 -
llama.cpp 服务器:使用适当的模型参数运行。 -
任何兼容的 OpenAI API 服务器。
环境变量配置
你可以通过环境变量或 .env
文件来配置系统。例如:
-
ORPHEUS_API_URL
:LLM 推理 API 的 URL。 -
ORPHEUS_API_TIMEOUT
:API 请求的超时时间(默认:120 秒)。 -
ORPHEUS_MAX_TOKENS
:生成的最大令牌数(默认:8192)。 -
ORPHEUS_TEMPERATURE
:生成的温度参数(默认:0.6)。 -
ORPHEUS_TOP_P
:Top-p 采样参数(默认:0.9)。 -
ORPHEUS_SAMPLE_RATE
:音频采样率(默认:24000 Hz)。 -
ORPHEUS_PORT
:Web 服务器端口(默认:5005)。 -
ORPHEUS_HOST
:Web 服务器主机(默认:0.0.0.0)。
安装和设置
前提条件
-
Python 3.8-3.11(不支持 Python 3.12,因为移除了 pkgutil.ImpImporter) -
CUDA 兼容的 GPU(推荐使用 RTX 系列以获得最佳性能) -
运行 Orpheus 模型的独立 LLM 推理服务器(例如 LM Studio 或 llama.cpp 服务器)
安装步骤
-
克隆仓库:
git clone https://github.com/Lex-au/Orpheus-FastAPI.git cd Orpheus-FastAPI
-
创建 Python 虚拟环境:
# 使用 venv(Python 内置的虚拟环境) python -m venv venv source venv/bin/activate # Windows 上使用:venv\Scripts\activate # 或者使用 conda conda create -n orpheus-tts python=3.10 conda activate orpheus-tts
-
安装 PyTorch 并支持 CUDA:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
-
安装其他依赖项:
pip3 install -r requirements.txt
-
设置所需的目录:
# 创建输出和静态文件目录 mkdir -p outputs static
启动服务器
运行 FastAPI 服务器:
python app.py
或者指定主机和端口:
uvicorn app:app --host 0.0.0.0 --port 5005 --reload
访问:
-
网页界面:http://localhost:5005/(或 http://127.0.0.1:5005/) -
API 文档:http://localhost:5005/docs(或 http://127.0.0.1:5005/docs)
API 使用方法
OpenAI 兼容端点
服务器在 /v1/audio/speech
提供了一个与 OpenAI 兼容的 API 端点:
curl http://localhost:5005/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"model": "orpheus",
"input": "Hello world! This is a test of the Orpheus TTS system.",
"voice": "tara",
"response_format": "wav",
"speed": 1.0
}' \
--output speech.wav
简单 API
此外,还提供了一个更简单的 /speak
端点:
curl -X POST http://localhost:5005/speak \
-H "Content-Type: application/json" \
-d '{
"text": "Hello world! This is a test.",
"voice": "tara"
}' \
-o output.wav
参数说明
-
input
(必需):要转换为语音的文本。 -
model
(可选):使用的模型(默认:”orpheus”)。 -
voice
(可选):使用的声音(默认:”tara”)。 -
response_format
(可选):输出格式(目前仅支持 “wav”)。 -
speed
(可选):速度因子(0.5 到 1.5,默认:1.0)。
与 OpenWebUI 的集成
你可以轻松地将 Orpheus-FASTAPI 与 OpenWebUI 集成,为你的聊天机器人添加高质量的语音功能:
-
启动 Orpheus-FASTAPI 服务器。 -
在 OpenWebUI 中,转到管理面板 > 设置 > 音频。 -
将 TTS 从 Web API 更改为 OpenAI。 -
将 APIBASE URL 设置为你的服务器地址(例如, http://localhost:5005/v1
)。 -
API 密钥可以设置为 “not-needed”。 -
将 TTS 声音设置为可用声音之一: tara
、leah
、jess
、leo
、dan
、mia
、zac
或zoe
。 -
将 TTS 模型设置为 tts-1
。
使用量化模型
Orpheus-FASTAPI 提供了多种量化模型选项,以提高性能:
-
Q2_K:2 位量化,超快推理。 -
Q4_K_M:4 位量化(混合),平衡质量和速度。 -
Q8_0:原始高质量的 8 位模型。
你可以根据硬件和需求选择合适的模型。较低位的模型(Q2_K、Q4_K_M)在高端 GPU 上提供约两倍的实时性能。
开发和扩展
项目组件
-
app.py:处理 HTTP 请求并提供网页界面的 FastAPI 服务器。 -
tts_engine/inference.py:处理令牌生成和 API 通信。 -
tts_engine/speechpipe.py:使用 SNAC 模型将令牌序列转换为音频。
添加新声音
要添加新声音,只需更新 tts_engine/inference.py
中的 AVAILABLE_VOICES
列表,并在 HTML 模板中添加相应的描述。
使用 llama.cpp
当你使用 llama.cpp 运行 Orpheus 模型时,可以使用以下参数来确保最佳性能:
./llama-server -m models/Modelname.gguf \
--ctx-size={{你的 ORPHEUS_MAX_TOKENS 从 .env}} \
--n-predict={{你的 ORPHEUS_MAX_TOKENS 从 .env}} \
--rope-scaling=linear
重要参数:
-
--ctx-size
:设置上下文窗口大小,应与你的 ORPHEUS_MAX_TOKENS 设置匹配。 -
--n-predict
:生成的最大令牌数,应与你的 ORPHEUS_MAX_TOKENS 设置匹配。 -
--rope-scaling=linear
:Orpheus 模型所需的最优位置编码。
对于扩展音频生成(书籍、长篇叙述),你可能需要增加令牌限制:
-
在 .env 文件(或通过网页 UI)中将 ORPHEUS_MAX_TOKENS 设置为 32768 或更高。 -
将 ORPHEUS_API_TIMEOUT 增加到 1800 以允许更长的处理时间。 -
在你的 llama.cpp 参数中使用相同的值(如果你使用的是 llama.cpp)。
结论
Orpheus-FASTAPI 是一个功能强大且灵活的文本转语音服务器,适用于各种应用场景。无论你是开发智能助手、教育工具,还是内容创作平台,Orpheus-FASTAPI 都能提供高质量的语音合成服务。通过简单的安装和配置,你可以快速将其集成到你的项目中,并利用其丰富的功能和优化的性能来提升用户体验。
通过不断的技术创新和优化,Orpheus-FASTAPI 不仅满足了当前的需求,还为未来的扩展和改进奠定了坚实的基础。无论你是开发者、研究人员,还是对 TTS 技术感兴趣的爱好者,Orpheus-FASTAPI 都值得你深入探索和使用。
– www.xugj520.cn –