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 服务器)

安装步骤

  1. 克隆仓库:

    git clone https://github.com/Lex-au/Orpheus-FastAPI.git
    cd Orpheus-FastAPI
    
  2. 创建 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
    
  3. 安装 PyTorch 并支持 CUDA:

    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
    
  4. 安装其他依赖项:

    pip3 install -r requirements.txt
    
  5. 设置所需的目录:

    # 创建输出和静态文件目录
    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 集成,为你的聊天机器人添加高质量的语音功能:

  1. 启动 Orpheus-FASTAPI 服务器。
  2. 在 OpenWebUI 中,转到管理面板 > 设置 > 音频。
  3. 将 TTS 从 Web API 更改为 OpenAI。
  4. 将 APIBASE URL 设置为你的服务器地址(例如,http://localhost:5005/v1)。
  5. API 密钥可以设置为 “not-needed”。
  6. 将 TTS 声音设置为可用声音之一:taraleahjessleodanmiazaczoe
  7. 将 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 模型所需的最优位置编码。

对于扩展音频生成(书籍、长篇叙述),你可能需要增加令牌限制:

  1. 在 .env 文件(或通过网页 UI)中将 ORPHEUS_MAX_TOKENS 设置为 32768 或更高。
  2. 将 ORPHEUS_API_TIMEOUT 增加到 1800 以允许更长的处理时间。
  3. 在你的 llama.cpp 参数中使用相同的值(如果你使用的是 llama.cpp)。

结论

Orpheus-FASTAPI 是一个功能强大且灵活的文本转语音服务器,适用于各种应用场景。无论你是开发智能助手、教育工具,还是内容创作平台,Orpheus-FASTAPI 都能提供高质量的语音合成服务。通过简单的安装和配置,你可以快速将其集成到你的项目中,并利用其丰富的功能和优化的性能来提升用户体验。

通过不断的技术创新和优化,Orpheus-FASTAPI 不仅满足了当前的需求,还为未来的扩展和改进奠定了坚实的基础。无论你是开发者、研究人员,还是对 TTS 技术感兴趣的爱好者,Orpheus-FASTAPI 都值得你深入探索和使用。

– www.xugj520.cn –