liumaolin
commited on
Commit
·
1858ba9
1
Parent(s):
28762c8
Document API usage, system architecture, configuration, and troubleshooting
Browse files- Add `docs/api-guide.md` for API usage and endpoints details.
- Create `docs/architecture.md` to explain the system's data flow and multi-threaded design.
- Add `docs/configuration.md` covering CLI/API parameters, LLM, ASR, and TTS customization.
- Add `docs/contributing.md` with community contribution guidelines.
- Add `docs/features.md` highlighting core functionalities like real-time audio processing, LLM, and TTS.
- Add `docs/project-structure.md` for a detailed directory layout.
- Create `docs/troubleshooting.md` for common issue fixes and optimization tips.
- Update README to condense features while linking to the new documentation.
- README.md +37 -358
- docs/api-guide.md +49 -0
- docs/architecture.md +32 -0
- docs/configuration.md +66 -0
- docs/contributing.md +19 -0
- docs/features.md +47 -0
- docs/project-structure.md +58 -0
- docs/troubleshooting.md +87 -0
README.md
CHANGED
|
@@ -30,407 +30,86 @@ library_name: transformers
|
|
| 30 |
|
| 31 |
一个集成了语音识别(ASR)、大语言模型(LLM)和文本转语音(TTS)的实时语音对话系统
|
| 32 |
|
| 33 |
-
[快速开始](#-快速开始) • [
|
| 34 |
|
| 35 |
</div>
|
| 36 |
|
| 37 |
## 🎯 项目简介
|
| 38 |
|
| 39 |
-
VoiceDialogue 是一个基于 Python
|
| 40 |
|
| 41 |
-
- 🎤
|
| 42 |
-
- 🤖
|
| 43 |
-
- 🔊
|
| 44 |
-
- 🌐 **Web API
|
| 45 |
-
-
|
| 46 |
-
- ⚡ **低延迟处理** - 优化的音频流处理管道,实现流畅对话体验
|
| 47 |
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
### 🎵 音频处理
|
| 51 |
-
- **回声消除音频捕获** - 自动消除回声干扰,提升语音质量
|
| 52 |
-
- **语音活动检测(VAD)** - 智能检测用户说话状态,自动开始/停止录制
|
| 53 |
-
- **实时音频流处理** - 低延迟音频播放和处理
|
| 54 |
-
|
| 55 |
-
### 🗣️ 语音识别
|
| 56 |
-
- **智能语音识别引擎** - 中文使用FunASR高精度识别,其他语言使用Whisper模型
|
| 57 |
-
- **自动语言切换** - 根据启动参数自动选择最优识别引擎
|
| 58 |
-
- **实时转录处理** - 流式语音转文本处理,降低响应延迟
|
| 59 |
-
|
| 60 |
-
### 🧠 语言模型
|
| 61 |
-
- **Qwen2.5 (14B)** - 内置阿里巴巴开源的中文优化模型
|
| 62 |
-
- **LangChain 集成** - 方便扩展和支持更多语言模型
|
| 63 |
-
- **自定义系统提示词** - 可在代码中配置 AI 助手的行为风格
|
| 64 |
-
|
| 65 |
-
### 🎭 语音合成
|
| 66 |
-
项目集成了两种先进的语音合成技术,支持动态说话人管理:
|
| 67 |
-
|
| 68 |
-
#### GPT-SoVITs 技术(中文角色)
|
| 69 |
-
基于 GPT-SoVITs 的中文语音合成,支持以下角色:
|
| 70 |
-
- **罗翔** (Luo Xiang) - 法学教授风格,具有幽默风趣和深入浅出的讲解风格
|
| 71 |
-
- **马保国** (Ma Baoguo) - 太极大师风格,带有标志性的口音和语调特色
|
| 72 |
-
- **沈逸** (Shen Yi) - 学者风格,具有理性分析风格和富有磁性的嗓音
|
| 73 |
-
- **杨幂** (Yang Mi) - 明星风格,拥有清甜动人的声线和自然流畅的表达方式
|
| 74 |
-
- **周杰伦** (Zhou Jielun) - 歌手风格,具有标志性的说话风格和音乐气质
|
| 75 |
-
- **马云** (Ma Yun) - 企业家风格,富有激情的演讲风格和商业洞察表达方式
|
| 76 |
-
|
| 77 |
-
#### Kokoro TTS 技术(英文角色)
|
| 78 |
-
基于 Kokoro TTS 的英文语音合成,支持以下角色:
|
| 79 |
-
- **Heart** - 温暖亲切的英语女性语音,声音富有感情色彩
|
| 80 |
-
- **Bella** - 优质的英语女性语音,具有清晰自然的发音和良好的表现力
|
| 81 |
-
- **Nicole** - 高质量的英语女性语音,发音清晰准确,语调自然流畅
|
| 82 |
-
|
| 83 |
-
#### 技术特点
|
| 84 |
-
- **智能引擎选择** - 系统根据内容语言自动选择最适合的TTS引擎
|
| 85 |
-
- **动态说话人管理** - 支持运行时动态加载和切换说话人
|
| 86 |
-
- **高质量合成** - 采用先进的神经网络技术,生成自然流畅的语音
|
| 87 |
-
- **可扩展架构** - 模块化设计,方便添加更多语音角色和TTS引擎
|
| 88 |
-
|
| 89 |
-
### ⚙️ 服务模式
|
| 90 |
-
- **命令行模式 (CLI)** - 在终端中直接运行,提供实时语音交互体验
|
| 91 |
-
- **API 服务模式** - 启动一个 FastAPI Web 服务器,提供 HTTP 接口进行交互
|
| 92 |
|
| 93 |
## 🚀 快速开始
|
| 94 |
|
| 95 |
-
###
|
| 96 |
-
|
| 97 |
-
- **操作系统**: macOS 14+ (推荐)
|
| 98 |
-
- **Python 版本**: 3.9 或更高版本
|
| 99 |
-
- **内存要求**: 至少 16GB RAM (推荐 32GB 用于大模型)
|
| 100 |
-
- **存储空间**: 至少 20GB 可用空间 (用于模型文件)
|
| 101 |
-
|
| 102 |
-
### 快速安装
|
| 103 |
|
| 104 |
```bash
|
| 105 |
-
#
|
| 106 |
git clone https://huggingface.co/MoYoYoTech/VoiceDialogue
|
| 107 |
cd VoiceDialogue
|
| 108 |
|
| 109 |
-
#
|
| 110 |
pip install uv
|
| 111 |
uv venv
|
| 112 |
source .venv/bin/activate
|
| 113 |
|
| 114 |
-
# 3. 安装依赖
|
| 115 |
WHISPER_COREML=1 CMAKE_ARGS="-DGGML_METAL=on" uv sync
|
| 116 |
|
| 117 |
-
#
|
| 118 |
-
|
|
|
|
|
|
|
|
|
|
| 119 |
|
| 120 |
-
# 5. 启动系统
|
| 121 |
-
python main.py
|
| 122 |
-
```
|
| 123 |
|
| 124 |
-
|
|
|
|
|
|
|
| 125 |
|
| 126 |
-
|
| 127 |
|
| 128 |
-
|
| 129 |
|
| 130 |
-
|
| 131 |
|
| 132 |
```bash
|
| 133 |
-
#
|
| 134 |
python main.py
|
| 135 |
-
# 或使用 uv
|
| 136 |
-
uv run main.py
|
| 137 |
|
| 138 |
-
#
|
| 139 |
python main.py --language en --speaker Heart
|
| 140 |
-
|
| 141 |
-
# 查看所有可用参数
|
| 142 |
-
python main.py --help
|
| 143 |
```
|
| 144 |
|
| 145 |
-
|
| 146 |
-
- 看到 "服务启动成功" 提示后即可开始说话
|
| 147 |
-
- 系统会自动检测语音活动并进行识别和回复
|
| 148 |
-
|
| 149 |
-
#### 2. API 服务模式
|
| 150 |
-
|
| 151 |
-
启动一个 Web 服务器,通过 HTTP 请求进行交互。
|
| 152 |
|
| 153 |
```bash
|
| 154 |
# 启动 API 服务器
|
| 155 |
python main.py --mode api
|
| 156 |
-
# 或使用 uv
|
| 157 |
-
uv run main.py --mode api
|
| 158 |
-
|
| 159 |
-
# 指定不同端口和启用热重载
|
| 160 |
-
python main.py --mode api --port 9000 --reload
|
| 161 |
-
```
|
| 162 |
-
|
| 163 |
-
**API 服务特性**:
|
| 164 |
-
- API 文档地址: `http://localhost:8000/docs`
|
| 165 |
-
- 支持 TTS 模型管理(查看、加载、删除)
|
| 166 |
-
- 实时模型状态监控
|
| 167 |
-
- RESTful API 设计
|
| 168 |
-
|
| 169 |
-
#### 3. 桌面应用模式 (Electron)
|
| 170 |
-
提供图形界面的桌面应用程序。
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
## ⚙️ 配置选项
|
| 174 |
-
|
| 175 |
-
### 启动参数
|
| 176 |
-
|
| 177 |
-
通过 `main.py` 的命令行参数可以方便地进行配置:
|
| 178 |
-
|
| 179 |
-
| 参数 | 缩写 | 可选值 | 默认值 | 描述 |
|
| 180 |
-
|---|---|---|---|---|
|
| 181 |
-
| `--mode` | `-m` | `cli`, `api` | `cli` | 设置运行模式 |
|
| 182 |
-
| `--language`| `-l` | `zh`, `en` | `zh` | (CLI模式) 设置用户语言 |
|
| 183 |
-
| `--speaker` | `-s` | (动态获取) | `沈逸` | (CLI模式) 设置TTS语音角色 |
|
| 184 |
-
| `--host` | | IP地址 | `0.0.0.0` | (API模式) 服务器主机 |
|
| 185 |
-
| `--port` | `-p` | 端口号 | `8000` | (API模式) 服务器端口 |
|
| 186 |
-
| `--reload`| | 无 | `False` | (API模式) 启用热重载 |
|
| 187 |
-
|
| 188 |
-
**支持的说话人角色**(动态加载):
|
| 189 |
-
- **中文角色**:`罗翔`, `马保国`, `沈逸`, `杨幂`, `周杰伦`, `马云`
|
| 190 |
-
- **英文角色**:`Heart`, `Bella`, `Nicole`
|
| 191 |
-
|
| 192 |
-
### 高级配置
|
| 193 |
-
|
| 194 |
-
#### 大语言模型 (LLM)
|
| 195 |
-
|
| 196 |
-
- **模型路径和参数**: LLM 的模型和推理参数目前在代码中硬编码,方便快速启动。
|
| 197 |
-
- **文件位置**: `src/VoiceDialogue/services/text/generator.py`
|
| 198 |
-
- **自定义**: 你可以修改 `LLMResponseGenerator` 类中的配置。
|
| 199 |
-
|
| 200 |
-
#### 语音识别 (ASR)
|
| 201 |
-
|
| 202 |
-
- **引擎自动选择**: 系统会根据 `--language` 参数自动选择最合适的 ASR 引擎。
|
| 203 |
-
- **模型配置**: ASR 模型的具体配置位于 `src/VoiceDialogue/services/speech/recognizers/manager.py`。
|
| 204 |
-
|
| 205 |
-
#### 系统提示词 (System Prompt)
|
| 206 |
-
|
| 207 |
-
- **功能**: 定义 AI 角色的行为和说话风格。
|
| 208 |
-
- **文件位置**: `src/VoiceDialogue/services/text/generator.py`
|
| 209 |
-
- **自定义**: 你可以修改系统提示词变量的值。
|
| 210 |
-
|
| 211 |
-
### 构建完整应用
|
| 212 |
-
项目提供了完整的构建脚本,可以一键构建包含Python后端和Electron前端的完整应用:
|
| 213 |
-
|
| 214 |
-
1. 首先,激活当前 Python 环境
|
| 215 |
-
|
| 216 |
-
```bash
|
| 217 |
-
source .venv/bin/activate
|
| 218 |
-
# 或使用 conda
|
| 219 |
-
conda activate voicedialogue
|
| 220 |
-
```
|
| 221 |
-
|
| 222 |
-
2. 使用构建脚本
|
| 223 |
-
|
| 224 |
-
```bash
|
| 225 |
-
# 使用构建脚本(推荐)
|
| 226 |
-
bash scripts/build.sh
|
| 227 |
-
|
| 228 |
-
# 或分别构建
|
| 229 |
-
bash scripts/build-python.sh # 构建Python后端
|
| 230 |
-
bash scripts/build-electron.sh # 构建Electron前端
|
| 231 |
-
|
| 232 |
-
# 清理构建产物
|
| 233 |
-
bash scripts/clean.sh
|
| 234 |
-
```
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
## 📁 项目结构
|
| 238 |
-
|
| 239 |
-
```text
|
| 240 |
-
VoiceDialogue/
|
| 241 |
-
├── src/
|
| 242 |
-
│ └── voice_dialogue/ # 主要源代码目录
|
| 243 |
-
│ ├── __init__.py # 包初始化文件
|
| 244 |
-
│ ├── cli/ # 命令行界面模块
|
| 245 |
-
│ │ └── args.py # 命令行参数解析
|
| 246 |
-
│ ├── api/ # Web API 模块 (FastAPI)
|
| 247 |
-
│ │ ├── app.py # FastAPI 应用实例
|
| 248 |
-
│ │ ├── server.py # uvicorn 服务器
|
| 249 |
-
│ │ ├── core/ # API 核心配置
|
| 250 |
-
│ │ ├── routes/ # API 路由
|
| 251 |
-
│ │ ├── schemas/ # 数据模型
|
| 252 |
-
│ │ ├── dependencies/ # API 依赖项
|
| 253 |
-
│ │ └── middleware/ # 中间件
|
| 254 |
-
│ ├── config/ # 配置管理
|
| 255 |
-
│ │ ├── paths.py # 路径配置
|
| 256 |
-
│ │ └── speaker_config.py # 说话人配置
|
| 257 |
-
│ ├── core/ # 核心模块
|
| 258 |
-
│ │ ├── constants.py # 全局常量和队列
|
| 259 |
-
│ │ └── launcher.py # 系统启动器
|
| 260 |
-
│ ├── models/ # 数据模型和任务
|
| 261 |
-
│ ├── services/ # 服务模块
|
| 262 |
-
│ │ ├── audio/ # 音频处理服务
|
| 263 |
-
│ │ ├── speech/ # 语音识别服务
|
| 264 |
-
│ │ └── text/ # 文本生成服务
|
| 265 |
-
│ └── utils/ # 工具函数
|
| 266 |
-
├── electron-app/ # Electron 桌面应用
|
| 267 |
-
│ ├── main.js # Electron 主进程
|
| 268 |
-
│ ├── preload.js # 预加载脚本
|
| 269 |
-
│ ├── loading.html # 加载页面
|
| 270 |
-
│ ├── utils.js # 工具函数
|
| 271 |
-
│ ├── package.json # Electron 依赖配置
|
| 272 |
-
│ ├── assets/ # Electron 资源文件
|
| 273 |
-
│ ├── build/ # 构建配置
|
| 274 |
-
│ └── python-dist/ # Python 分发包
|
| 275 |
-
├── scripts/ # 构建和部署脚本
|
| 276 |
-
│ ├── build.sh # 主构建脚本
|
| 277 |
-
│ ├── build-python.sh # Python 打包脚本
|
| 278 |
-
│ ├── build-electron.sh # Electron 打包脚本
|
| 279 |
-
│ └── clean.sh # 清理脚本
|
| 280 |
-
├── third_party/ # 第三方库
|
| 281 |
-
│ ├── moyoyo_tts/ # GPT-SoVITs TTS 引擎
|
| 282 |
-
│ └── AECAudioRecorder/ # 回声消除音频录制器
|
| 283 |
-
├── assets/ # 资源文件
|
| 284 |
-
├── dist/ # 分发包输出目录
|
| 285 |
-
├── build/ # 构建临时文件
|
| 286 |
-
├── tests/ # 测试文件
|
| 287 |
-
├── docs/ # 文档目录
|
| 288 |
-
├── main.py # 项目启动入口
|
| 289 |
-
├── pyproject.toml # 项目配置文件 (uv)
|
| 290 |
-
├── requirements.txt # Python 依赖
|
| 291 |
-
├── uv.lock # uv 锁定文件
|
| 292 |
-
├── .python-version # Python 版本配置
|
| 293 |
-
└── README.md # 项目说明文档
|
| 294 |
-
```
|
| 295 |
-
|
| 296 |
-
## 🔧 系统架构
|
| 297 |
-
|
| 298 |
-
### 数据流程图 (CLI 模式)
|
| 299 |
-
```
|
| 300 |
-
用户语音输入 → 回声消除 → 语音活动检测 → 语音转录 (ASR) → LLM生成回复 → TTS合成 → 音频输出
|
| 301 |
-
↑ ↓
|
| 302 |
-
└─────────────────────────────── 实时语音交互循环 ────────────────────────────────┘
|
| 303 |
```
|
|
|
|
| 304 |
|
|
|
|
| 305 |
|
| 306 |
-
|
| 307 |
-
|
| 308 |
-
|
| 309 |
-
|
| 310 |
-
|
| 311 |
-
|
| 312 |
-
|
| 313 |
-
|
| 314 |
-
| **TTSAudioGenerator** | 语音合成 | GPT-SoVITs / Kokoro TTS 文本转语音 |
|
| 315 |
-
| **AudioStreamPlayer** | 音频流播放 | 实时音频输出播放 |
|
| 316 |
-
| **FastAPI App** | API服务 | 提供HTTP接口,封装核心服务 |
|
| 317 |
-
|
| 318 |
-
### 多线程架构
|
| 319 |
-
|
| 320 |
-
系统采用多线程设计,各组件通过队列进行通信:
|
| 321 |
-
|
| 322 |
-
- **音频采集线程**: 持续捕获音频数据
|
| 323 |
-
- **语音监测线程**: 检测用户语音活动
|
| 324 |
-
- **ASR线程**: 语音识别处理
|
| 325 |
-
- **LLM线程**: 文本生成处理
|
| 326 |
-
- **TTS线程**: 语音合成处理
|
| 327 |
-
- **音频播放线程**: 音频输出播放
|
| 328 |
-
|
| 329 |
-
## 🛠️ 故障排除
|
| 330 |
-
|
| 331 |
-
### 1. 模型下载失败
|
| 332 |
-
- **问题**: 网络连接超时或模型下载失败。
|
| 333 |
-
- **解决方案**: 设置 Hugging Face 镜像。
|
| 334 |
-
```bash
|
| 335 |
-
export HF_ENDPOINT=https://hf-mirror.com
|
| 336 |
-
pip install -U huggingface_hub
|
| 337 |
-
```
|
| 338 |
-
|
| 339 |
-
### 2. 音频设备问题
|
| 340 |
-
- **问题**: 找不到音频设备或权限被拒绝。
|
| 341 |
-
- **macOS 解决方案**: 系统设置 → 隐私与安全性 → 麦克风 → 启用你的终端应用 (如 iTerm, Terminal)。
|
| 342 |
-
- **Linux 解决方案**: `sudo usermod -a -G audio $USER`,然后重新登录。
|
| 343 |
-
|
| 344 |
-
### 3. 内存不足错误 (OOM)
|
| 345 |
-
- **问题**: `CUDA out of memory` 或 RAM 不足。
|
| 346 |
-
- **解决方案**: LLM 是主要的内存消耗者。你可以通过修改 `src/VoiceDialogue/services/text/generator.py` 来降低资源消耗:
|
| 347 |
-
- **更换模型**: 将模型路径指向一个更小的模型(如 7B Q4 量化模型)。
|
| 348 |
-
- **减少批处理大小**: 减小模型参数中的 `n_batch` 值(如 `256`)。
|
| 349 |
-
- **减少上下文长度**: 减小 `n_ctx` 的值(如 `1024`)。
|
| 350 |
-
|
| 351 |
-
### 4. 依赖包冲突
|
| 352 |
-
- **问题**: 包版本冲突或导入错误。
|
| 353 |
-
- **解决方案**: 强烈建议在虚拟环境中安装。如果遇到问题,尝试重建虚拟环境。
|
| 354 |
-
```bash
|
| 355 |
-
# 使用 conda
|
| 356 |
-
conda deactivate
|
| 357 |
-
conda env remove -n voicedialogue
|
| 358 |
-
|
| 359 |
-
# 使用 uv
|
| 360 |
-
rm -rf .venv
|
| 361 |
-
uv venv
|
| 362 |
-
```
|
| 363 |
-
|
| 364 |
-
### 5. 说话人角色不存在
|
| 365 |
-
- **问题**: 指定的说话人不在支持列表中。
|
| 366 |
-
- **解决方案**: 使用 `python src/VoiceDialogue/main.py --help` 查看所有可用的说话人角色。
|
| 367 |
-
|
| 368 |
-
### 6. FFmpeg 相关错误
|
| 369 |
-
- **问题**: 音频处理失败或编解码错误。
|
| 370 |
-
- **解决方案**: 确保正确安装 FFmpeg:
|
| 371 |
-
```bash
|
| 372 |
-
# 检查 FFmpeg 安装
|
| 373 |
-
ffmpeg -version
|
| 374 |
-
|
| 375 |
-
# 重新安装 FFmpeg
|
| 376 |
-
# macOS
|
| 377 |
-
brew reinstall ffmpeg
|
| 378 |
-
|
| 379 |
-
```
|
| 380 |
-
|
| 381 |
-
### 7. Python 版本兼容性
|
| 382 |
-
- **问题**: Python 版本过低导致的兼容性问题。
|
| 383 |
-
- **解决方案**: 确保使用 Python 3.11+ 版本:
|
| 384 |
-
```bash
|
| 385 |
-
python --version
|
| 386 |
-
# 如果版本过低,请升级或使用虚拟环境
|
| 387 |
-
```
|
| 388 |
-
|
| 389 |
-
### 8. 桌面应用相关问题
|
| 390 |
-
- **问题**: Electron 应用启动失败或功能异常。
|
| 391 |
-
- **解决方案**:
|
| 392 |
-
- 确保 Node.js 版本 >= 16
|
| 393 |
-
- 重新安装依赖:`cd electron-app && npm install`
|
| 394 |
-
- 检查 Python 后端是否正常运行
|
| 395 |
-
|
| 396 |
-
### 9. 构建打包问题
|
| 397 |
-
- **问题**: 使用构建脚本失败。
|
| 398 |
-
- **解决方案**:
|
| 399 |
-
- 确保有执行权限:`chmod +x scripts/*.sh`
|
| 400 |
-
- 检查所有依赖是否安装完成
|
| 401 |
-
- 查看具体错误日志进行调试
|
| 402 |
-
|
| 403 |
-
|
| 404 |
-
## 📊 性能优化建议
|
| 405 |
-
|
| 406 |
-
### 硬件优化
|
| 407 |
-
- **内存**: 推荐 32GB RAM 以获得最佳性能
|
| 408 |
-
- **存储**: 使用 SSD 硬盘可显著提升模型加载速度
|
| 409 |
-
- **CPU**: 多核处理器有助于多线程处理
|
| 410 |
-
|
| 411 |
-
### 软件优化
|
| 412 |
-
- **模型选择**: 根据硬件配置选择合适大小的模型
|
| 413 |
-
- **批处理优化**: 调整 LLM 的 `n_batch` 参数
|
| 414 |
-
- **音频缓冲**: 根据延迟要求调整音频缓冲区大小
|
| 415 |
|
| 416 |
## 📄 许可证
|
| 417 |
|
| 418 |
本项目采用 MIT 许可证开源。
|
| 419 |
|
| 420 |
-
##
|
| 421 |
-
|
| 422 |
-
欢迎提交 Pull Request 和 Issue!
|
| 423 |
-
|
| 424 |
-
1. Fork 本仓库
|
| 425 |
-
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
|
| 426 |
-
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
|
| 427 |
-
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
| 428 |
-
5. 开启 Pull Request
|
| 429 |
-
|
| 430 |
-
---
|
| 431 |
-
|
| 432 |
-
<div align="center">
|
| 433 |
-
|
| 434 |
-
**如果这个项目对您有帮助,请给我们一个 ⭐️!**
|
| 435 |
|
| 436 |
-
|
|
|
|
| 30 |
|
| 31 |
一个集成了语音识别(ASR)、大语言模型(LLM)和文本转语音(TTS)的实时语音对话系统
|
| 32 |
|
| 33 |
+
[快速开始](#-快速开始) • [文档导航](#-文档导航) • [贡献指南](docs/contributing.md)
|
| 34 |
|
| 35 |
</div>
|
| 36 |
|
| 37 |
## 🎯 项目简介
|
| 38 |
|
| 39 |
+
VoiceDialogue 是一个基于 Python 的完整语音对话系统,实现了端到端的语音交互体验。系统采用模块化设计,具备实时、高精度、多角色的特点。
|
| 40 |
|
| 41 |
+
- 🎤 **实时语音识别**: 高精度中英文语音转录
|
| 42 |
+
- 🤖 **智能对话生成**: 集成 Qwen2.5 等大语言模型
|
| 43 |
+
- 🔊 **高质量语音合成**: 支持多角色、多风格的语音输出
|
| 44 |
+
- 🌐 **Web API 服务**: 提供 HTTP 接口,方便集成
|
| 45 |
+
- ⚡ **低延迟处理**: 优化的音频流处理管道
|
|
|
|
| 46 |
|
| 47 |
+
> 想要了解更多?请查看 [功能特性详解](docs/features.md)。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
|
| 49 |
## 🚀 快速开始
|
| 50 |
|
| 51 |
+
### 1. 安装
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
|
| 53 |
```bash
|
| 54 |
+
# 克隆项目
|
| 55 |
git clone https://huggingface.co/MoYoYoTech/VoiceDialogue
|
| 56 |
cd VoiceDialogue
|
| 57 |
|
| 58 |
+
# 安装依赖 (推荐使用 uv)
|
| 59 |
pip install uv
|
| 60 |
uv venv
|
| 61 |
source .venv/bin/activate
|
| 62 |
|
|
|
|
| 63 |
WHISPER_COREML=1 CMAKE_ARGS="-DGGML_METAL=on" uv sync
|
| 64 |
|
| 65 |
+
# 安装额外的依赖
|
| 66 |
+
## 1. 安装 kokoro-onnx
|
| 67 |
+
uv pip install kokoro-onnx
|
| 68 |
+
## 2. 重新安装指定版本的 numpy
|
| 69 |
+
uv pip install numpy==1.26.4
|
| 70 |
|
|
|
|
|
|
|
|
|
|
| 71 |
|
| 72 |
+
# 安装音频工具 (macOS)
|
| 73 |
+
brew install ffmpeg
|
| 74 |
+
```
|
| 75 |
|
| 76 |
+
> 📖 **需要更详细的步骤?** 请查阅 **[安装指南](docs/installation.md)**,其中包含系统要求和常见问题。
|
| 77 |
|
| 78 |
+
### 2. 运行
|
| 79 |
|
| 80 |
+
#### 命令行模式 (CLI)
|
| 81 |
|
| 82 |
```bash
|
| 83 |
+
# 启动语音对话 (默认中文)
|
| 84 |
python main.py
|
|
|
|
|
|
|
| 85 |
|
| 86 |
+
# 启动并指定语言和角色
|
| 87 |
python main.py --language en --speaker Heart
|
|
|
|
|
|
|
|
|
|
| 88 |
```
|
| 89 |
|
| 90 |
+
#### API 服务模式
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 91 |
|
| 92 |
```bash
|
| 93 |
# 启动 API 服务器
|
| 94 |
python main.py --mode api
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 95 |
```
|
| 96 |
+
> 详细使用方法请参考 [配置指南](docs/configuration.md) 和 [API 服务指南](docs/api-guide.md)。
|
| 97 |
|
| 98 |
+
## 📚 文档导航
|
| 99 |
|
| 100 |
+
- 📖 **[安装指南](docs/installation.md)**: 详细的安装步骤和系统要求。
|
| 101 |
+
- ⚙️ **[配置指南](docs/configuration.md)**: 如何配置系统参数和高级选项。
|
| 102 |
+
- 🎭 **[功能特性](docs/features.md)**: 深入了解项目的所有功能。
|
| 103 |
+
- 🌐 **[API 指南](docs/api-guide.md)**: 如何使用和集成 API 服务。
|
| 104 |
+
- 🏗️ **[系统架构](docs/architecture.md)**: 了解系统的内部工作原理。
|
| 105 |
+
- 📁 **[项目结构](docs/project-structure.md)**: 浏览项目代码和文件组织。
|
| 106 |
+
- 🛠️ **[故障排除](docs/troubleshooting.md)**: 常见问题和解决方案。
|
| 107 |
+
- 🤝 **[贡献指南](docs/contributing.md)**: 如何为项目做出贡献。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 108 |
|
| 109 |
## 📄 许可证
|
| 110 |
|
| 111 |
本项目采用 MIT 许可证开源。
|
| 112 |
|
| 113 |
+
## 🙏 致谢
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 114 |
|
| 115 |
+
如果这个项目对您有帮助,请给我们一个 ⭐️!
|
docs/api-guide.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# API 服务指南
|
| 2 |
+
|
| 3 |
+
VoiceDialogue 支持通过 API 服务模式运行,启动一个 FastAPI Web 服务器,提供 HTTP 接口进行交互。
|
| 4 |
+
|
| 5 |
+
## 启动 API 服务
|
| 6 |
+
|
| 7 |
+
```bash
|
| 8 |
+
# 启动 API 服务器
|
| 9 |
+
python main.py --mode api
|
| 10 |
+
# 或使用 uv
|
| 11 |
+
uv run main.py --mode api
|
| 12 |
+
|
| 13 |
+
# 指定不同端口和启用热重载
|
| 14 |
+
python main.py --mode api --port 9000 --reload
|
| 15 |
+
```
|
| 16 |
+
|
| 17 |
+
## API 服务特性
|
| 18 |
+
|
| 19 |
+
- **API 文档地址**: 启动服务后,可在 `http://localhost:8000/docs` 查看交互式 API 文档 (Swagger UI)。
|
| 20 |
+
- **TTS 模型管理**: 支持通过 API 查看、加载、删除 TTS 模型。
|
| 21 |
+
- **实时模型状态监控**: 提供接口查询当前加载的模型和系统状态。
|
| 22 |
+
- **RESTful API 设计**: 采用标准的 RESTful 设计,方便与其他应用集成。
|
| 23 |
+
|
| 24 |
+
## 主要接口
|
| 25 |
+
|
| 26 |
+
### TTS模型管理
|
| 27 |
+
|
| 28 |
+
* `GET /api/v1/tts/models` - 获取所有可用的TTS模型列表
|
| 29 |
+
* `POST /api/v1/tts/models/load` - 加载指定的TTS模型
|
| 30 |
+
* `GET /api/v1/tts/models/{model_id}/status` - 查看模型下载和加载状态
|
| 31 |
+
* `DELETE /api/v1/tts/models/{model_id}` - 删除已下载的模型
|
| 32 |
+
|
| 33 |
+
### 语音识别管理
|
| 34 |
+
|
| 35 |
+
* `GET /api/v1/asr/languages` - 获取支持的识别语言列表
|
| 36 |
+
* `POST /api/v1/asr/instance/create` - 创建指定语言的ASR实例
|
| 37 |
+
|
| 38 |
+
### 系统控制
|
| 39 |
+
|
| 40 |
+
* `GET /api/v1/system/status` - 获取系统整体状态
|
| 41 |
+
* `POST /api/v1/system/start` - 启动语音对话系统
|
| 42 |
+
* `POST /api/v1/system/stop` - 停止语音对话系统
|
| 43 |
+
* `POST /api/v1/system/restart` - 重启语音对话系统
|
| 44 |
+
|
| 45 |
+
### 实时通信
|
| 46 |
+
|
| 47 |
+
* `WebSocket /api/v1/ws` - WebSocket连接,接收实时系统消息
|
| 48 |
+
|
| 49 |
+
更多详细信息请参考启动服务后的在线API文档。
|
docs/architecture.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 系统架构
|
| 2 |
+
|
| 3 |
+
## 数据流程图 (CLI 模式)
|
| 4 |
+
```
|
| 5 |
+
用户语音输入 → 回声消除 → 语音活动检测 → 语音转录 (ASR) → LLM生成回复 → TTS合成 → 音频输出
|
| 6 |
+
↑ ↓
|
| 7 |
+
└─────────────────────────────── 实时语音交互循环 ────────────────────────────────┘
|
| 8 |
+
```
|
| 9 |
+
|
| 10 |
+
## 核心组件说明
|
| 11 |
+
|
| 12 |
+
| 组件 | 功能描述 | 技术实现 |
|
| 13 |
+
|------|----------|----------|
|
| 14 |
+
| **EchoCancellingAudioCapture** | 回声消除音频捕获 | 实时音频流捕获与预处理 |
|
| 15 |
+
| **SpeechStateMonitor** | 语音活动检测 | VAD 算法检测用户说话状态 |
|
| 16 |
+
| **ASRWorker** | 语音识别转录 | FunASR / Whisper 模型推理 |
|
| 17 |
+
| **LLMResponseGenerator** | 智能文本生成 | Qwen2.5 (llama.cpp) 对话生成 |
|
| 18 |
+
| **TTSAudioGenerator** | 语音合成 | GPT-SoVITs / Kokoro TTS 文本转语音 |
|
| 19 |
+
| **AudioStreamPlayer** | 音频流播放 | 实时音频输出播放 |
|
| 20 |
+
| **FastAPI App** | API服务 | 提供HTTP接口,封装核心服务 |
|
| 21 |
+
|
| 22 |
+
## 多线程架构
|
| 23 |
+
|
| 24 |
+
系统采用多线程设计,各组件通过队列进行通信:
|
| 25 |
+
|
| 26 |
+
- **音频采集线程**: 持续捕获音频数据
|
| 27 |
+
- **语音监测线程**: 检测用户语音活动
|
| 28 |
+
- **ASR线程**: 语音识别处理
|
| 29 |
+
- **LLM线程**: 文本生成处理
|
| 30 |
+
- **TTS线程**: 语音合成处理
|
| 31 |
+
- **音频播放线程**: 音频输出播放
|
| 32 |
+
```
|
docs/configuration.md
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 配置指南
|
| 2 |
+
|
| 3 |
+
本文档介绍如何配置 VoiceDialogue 系统。
|
| 4 |
+
|
| 5 |
+
## 启动参数
|
| 6 |
+
|
| 7 |
+
通过 `main.py` 的命令行参数可以方便地进行配置:
|
| 8 |
+
|
| 9 |
+
| 参数 | 缩写 | 可选值 | 默认值 | 描述 |
|
| 10 |
+
|---|---|---|---|---|
|
| 11 |
+
| `--mode` | `-m` | `cli`, `api` | `cli` | 设置运行模式 |
|
| 12 |
+
| `--language`| `-l` | `zh`, `en` | `zh` | (CLI模式) 设置用户语言 |
|
| 13 |
+
| `--speaker` | `-s` | (动态获取) | `沈逸` | (CLI模式) 设置TTS语音角色 |
|
| 14 |
+
| `--host` | | IP地址 | `0.0.0.0` | (API模式) 服务器主机 |
|
| 15 |
+
| `--port` | `-p` | 端口号 | `8000` | (API模式) 服务器端口 |
|
| 16 |
+
| `--reload`| | 无 | `False` | (API模式) 启用热重载 |
|
| 17 |
+
|
| 18 |
+
**支持的说话人角色**(动态加载):
|
| 19 |
+
|
| 20 |
+
- **中文角色**:`罗翔`, `马保国`, `沈逸`, `杨幂`, `周杰伦`, `马云`
|
| 21 |
+
- **英文角色**:`Heart`, `Bella`, `Nicole`
|
| 22 |
+
|
| 23 |
+
## 高级配置
|
| 24 |
+
|
| 25 |
+
### 大语言模型 (LLM)
|
| 26 |
+
|
| 27 |
+
- **模型路径和参数**: LLM 的模型和推理参数目前在代码中硬编码,方便快速启动。
|
| 28 |
+
- **文件位置**: `src/VoiceDialogue/services/text/generator.py`
|
| 29 |
+
- **自定义**: 你可以修改 `LLMResponseGenerator` 类中的配置。
|
| 30 |
+
|
| 31 |
+
### 语音识别 (ASR)
|
| 32 |
+
|
| 33 |
+
- **引擎自动选择**: 系统会根据 `--language` 参数自动选择最合适的 ASR 引擎。
|
| 34 |
+
- **模型配置**: ASR 模型的具体配置位于 `src/VoiceDialogue/services/speech/recognizers/manager.py`。
|
| 35 |
+
|
| 36 |
+
### 系统提示词 (System Prompt)
|
| 37 |
+
|
| 38 |
+
- **功能**: 定义 AI 角色的行为和说话风格。
|
| 39 |
+
- **文件位置**: `src/VoiceDialogue/services/text/generator.py`
|
| 40 |
+
- **自定义**: 你可以修改系统提示词变量的值。
|
| 41 |
+
|
| 42 |
+
## 构建完整应用
|
| 43 |
+
|
| 44 |
+
项目提供了完整的构建脚本,可以一键构建包含Python后端和Electron前端的完整应用:
|
| 45 |
+
|
| 46 |
+
1. 首先,激活当前 Python 环境
|
| 47 |
+
|
| 48 |
+
```bash
|
| 49 |
+
source .venv/bin/activate
|
| 50 |
+
# 或使用 conda
|
| 51 |
+
conda activate voicedialogue
|
| 52 |
+
```
|
| 53 |
+
|
| 54 |
+
2. 使用构建脚本
|
| 55 |
+
|
| 56 |
+
```bash
|
| 57 |
+
# 使用构建脚本(推荐)
|
| 58 |
+
bash scripts/build.sh
|
| 59 |
+
|
| 60 |
+
# 或分别构建
|
| 61 |
+
bash scripts/build-python.sh # 构建Python后端
|
| 62 |
+
bash scripts/build-electron.sh # 构建Electron前端
|
| 63 |
+
|
| 64 |
+
# 清理构建产物
|
| 65 |
+
bash scripts/clean.sh
|
| 66 |
+
```
|
docs/contributing.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 贡献指南
|
| 2 |
+
|
| 3 |
+
我们非常欢迎社区的贡献!
|
| 4 |
+
|
| 5 |
+
## 贡献流程
|
| 6 |
+
|
| 7 |
+
1. Fork 本仓库
|
| 8 |
+
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
|
| 9 |
+
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
|
| 10 |
+
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
| 11 |
+
5. 开启 Pull Request
|
| 12 |
+
|
| 13 |
+
## 开发规范
|
| 14 |
+
- 请确保你的代码遵循项目现有的风格。
|
| 15 |
+
- 添加或修改功能时,请更新相关的文档。
|
| 16 |
+
- 提交前请确保所有测试都能通过。
|
| 17 |
+
|
| 18 |
+
## 问题反馈
|
| 19 |
+
如果你发现了 Bug 或者有功能建议,欢迎通过 [Issues](https://huggingface.co/MoYoYoTech/VoiceDialogue/issues) 提交。
|
docs/features.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 功能特性
|
| 2 |
+
|
| 3 |
+
VoiceDialogue 系统集成了多项先进技术,提供端到端的语音交互体验。
|
| 4 |
+
|
| 5 |
+
## 🎵 音频处理
|
| 6 |
+
- **回声消除音频捕获** - 自动消除回声干扰,提升语音质量
|
| 7 |
+
- **语音活动检测(VAD)** - 智能检测用户说话状态,自动开始/停止录制
|
| 8 |
+
- **实时音频流处理** - 低延迟音频播放和处理
|
| 9 |
+
|
| 10 |
+
## 🗣️ 语音识别
|
| 11 |
+
- **智能语音识别引擎** - 中文使用FunASR高精度识别,其他语言使用Whisper模型
|
| 12 |
+
- **自动语言切换** - 根据启动参数自动选择最优识别引擎
|
| 13 |
+
- **实时转录处理** - 流式语音转文本处理,降低响应延迟
|
| 14 |
+
|
| 15 |
+
## 🧠 语言模型
|
| 16 |
+
- **Qwen2.5 (14B)** - 内置阿里巴巴开源的中文优化模型
|
| 17 |
+
- **LangChain 集成** - 方便扩展和支持更多语言模型
|
| 18 |
+
- **自定义系统提示词** - 可在代码中配置 AI 助手的行为风格
|
| 19 |
+
|
| 20 |
+
## 🎭 语音合成
|
| 21 |
+
项目集成了两种先进的语音合成技术,支持动态说话人管理:
|
| 22 |
+
|
| 23 |
+
#### GPT-SoVITs 技术(中文角色)
|
| 24 |
+
基于 GPT-SoVITs 的中文语音合成,支持以下角色:
|
| 25 |
+
- **罗翔** (Luo Xiang) - 法学教授风格,具有幽默风趣和深入浅出的讲解风格
|
| 26 |
+
- **马保国** (Ma Baoguo) - 太极大师风格,带有标志性的口音和语调特色
|
| 27 |
+
- **沈逸** (Shen Yi) - 学者风格,具有理性分析风格和富有磁性的嗓音
|
| 28 |
+
- **杨幂** (Yang Mi) - 明星风格,拥有清甜动人的声线和自然流畅的表达方式
|
| 29 |
+
- **周杰伦** (Zhou Jielun) - 歌手风格,具有标志性的说话风格和音乐气质
|
| 30 |
+
- **马云** (Ma Yun) - 企业家风格,富有激情的演讲风格和商业洞察表达方式
|
| 31 |
+
|
| 32 |
+
#### Kokoro TTS 技术(英文角色)
|
| 33 |
+
基于 Kokoro TTS 的英文语音合成,支持以下角色:
|
| 34 |
+
- **Heart** - 温暖亲切的英语女性语音,声音富有感情色彩
|
| 35 |
+
- **Bella** - 优质的英语女性语音,具有清晰自然的发音和良好的表现力
|
| 36 |
+
- **Nicole** - 高质量的英语女性语音,发音清晰准确,语调自然流畅
|
| 37 |
+
|
| 38 |
+
#### 技术特点
|
| 39 |
+
- **智能引擎选择** - 系统根据内容语言自动选择最适合的TTS引擎
|
| 40 |
+
- **动态说话人管理** - 支持运行时动态加载和切换说话人
|
| 41 |
+
- **高质量合成** - 采用先进的神经网络技术,生成自然流畅的语音
|
| 42 |
+
- **可扩展架构** - 模块化设计,方便添加更多语音角色和TTS引擎
|
| 43 |
+
|
| 44 |
+
## ⚙️ 服务模式
|
| 45 |
+
- **命令行模式 (CLI)** - 在终端中直接运行,提供实时语音交互体验
|
| 46 |
+
- **API 服务模式** - 启动一个 FastAPI Web 服务器,提供 HTTP 接口进行交互
|
| 47 |
+
- **桌面应用模式 (Electron)** - 提供图形界面的桌面应用程序。
|
docs/project-structure.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 项目结构
|
| 2 |
+
|
| 3 |
+
```text
|
| 4 |
+
VoiceDialogue/
|
| 5 |
+
├── src/
|
| 6 |
+
│ └── voice_dialogue/ # 主要源代码目录
|
| 7 |
+
│ ├── __init__.py # 包初始化文件
|
| 8 |
+
│ ├── cli/ # 命令行界面模块
|
| 9 |
+
│ │ └── args.py # 命令行参数解析
|
| 10 |
+
│ ├── api/ # Web API 模块 (FastAPI)
|
| 11 |
+
│ │ ├── app.py # FastAPI 应用实例
|
| 12 |
+
│ │ ├── server.py # uvicorn 服务器
|
| 13 |
+
│ │ ├── core/ # API 核心配置
|
| 14 |
+
│ │ ├── routes/ # API 路由
|
| 15 |
+
│ │ ├── schemas/ # 数据模型
|
| 16 |
+
│ │ ├── dependencies/ # API 依赖项
|
| 17 |
+
│ │ └── middleware/ # 中间件
|
| 18 |
+
│ ├── config/ # 配置管理
|
| 19 |
+
│ │ ├── paths.py # 路径配置
|
| 20 |
+
│ │ └── speaker_config.py # 说话人配置
|
| 21 |
+
│ ├── core/ # 核心模块
|
| 22 |
+
│ │ ├── constants.py # 全局常量和队列
|
| 23 |
+
│ │ └── launcher.py # 系统启动器
|
| 24 |
+
│ ├── models/ # 数据模型和任务
|
| 25 |
+
│ ├── services/ # 服务模块
|
| 26 |
+
│ │ ├── audio/ # 音频处理服务
|
| 27 |
+
│ │ ├── speech/ # 语音识别服务
|
| 28 |
+
│ │ └── text/ # 文本生成服务
|
| 29 |
+
│ └── utils/ # 工具函数
|
| 30 |
+
├── electron-app/ # Electron 桌面应用
|
| 31 |
+
│ ├── main.js # Electron 主进程
|
| 32 |
+
│ ├── preload.js # 预加载脚本
|
| 33 |
+
│ ├── loading.html # 加载页面
|
| 34 |
+
│ ├── utils.js # 工具函数
|
| 35 |
+
│ ├── package.json # Electron 依赖配置
|
| 36 |
+
│ ├── assets/ # Electron 资源文件
|
| 37 |
+
│ ├── build/ # 构建配置
|
| 38 |
+
│ └── python-dist/ # Python 分发包
|
| 39 |
+
├── scripts/ # 构建和部署脚本
|
| 40 |
+
│ ├── build.sh # 主构建脚本
|
| 41 |
+
│ ├── build-python.sh # Python 打包脚本
|
| 42 |
+
│ ├── build-electron.sh # Electron 打包脚本
|
| 43 |
+
│ └── clean.sh # 清理脚本
|
| 44 |
+
├── third_party/ # 第三方库
|
| 45 |
+
│ ├── moyoyo_tts/ # GPT-SoVITs TTS 引擎
|
| 46 |
+
│ └── AECAudioRecorder/ # 回声消除音频录制器
|
| 47 |
+
├── assets/ # 资源文件
|
| 48 |
+
├── dist/ # 分发包输出目录
|
| 49 |
+
├── build/ # 构建临时文件
|
| 50 |
+
├── tests/ # 测试文件
|
| 51 |
+
├── docs/ # 文档目录
|
| 52 |
+
├── main.py # 项目启动入口
|
| 53 |
+
├── pyproject.toml # 项目配置文件 (uv)
|
| 54 |
+
├── requirements.txt # Python 依赖
|
| 55 |
+
├── uv.lock # uv 锁定文件
|
| 56 |
+
├── .python-version # Python 版本配置
|
| 57 |
+
└── README.md # 项目说明文档
|
| 58 |
+
```
|
docs/troubleshooting.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 故障排除与性能优化
|
| 2 |
+
|
| 3 |
+
## 🛠️ 故障排除
|
| 4 |
+
|
| 5 |
+
### 1. 模型下载失败
|
| 6 |
+
- **问题**: 网络连接超时或模型下载失败。
|
| 7 |
+
- **解决方案**: 设置 Hugging Face 镜像。
|
| 8 |
+
```bash
|
| 9 |
+
export HF_ENDPOINT=https://hf-mirror.com
|
| 10 |
+
pip install -U huggingface_hub
|
| 11 |
+
```
|
| 12 |
+
|
| 13 |
+
### 2. 音频设备问题
|
| 14 |
+
- **问题**: 找不到音频设备或权限被拒绝。
|
| 15 |
+
- **macOS 解决方案**: 系统设置 → 隐私与安全性 → 麦克风 → 启用你的终端应用 (如 iTerm, Terminal)。
|
| 16 |
+
- **Linux 解决方案**: `sudo usermod -a -G audio $USER`,然后重新登录。
|
| 17 |
+
|
| 18 |
+
### 3. 内存不足错误 (OOM)
|
| 19 |
+
- **问题**: `CUDA out of memory` 或 RAM 不足。
|
| 20 |
+
- **解决方案**: LLM 是主要的内存消耗者。你可以通过修改 `src/VoiceDialogue/services/text/generator.py` 来降低资源消耗:
|
| 21 |
+
- **更换模型**: 将模型路径指向一个更小的模型(如 7B Q4 量化模型)。
|
| 22 |
+
- **减少批处理大小**: 减小模型参数中的 `n_batch` 值(如 `256`)。
|
| 23 |
+
- **减少上下文长度**: 减小 `n_ctx` 的值(如 `1024`)。
|
| 24 |
+
|
| 25 |
+
### 4. 依赖包冲突
|
| 26 |
+
- **问题**: 包版本冲突或导入错误。
|
| 27 |
+
- **解决方案**: 强烈建议在虚拟环境中安装。如果遇到问题,尝试重建虚拟环境。
|
| 28 |
+
```bash
|
| 29 |
+
# 使用 conda
|
| 30 |
+
conda deactivate
|
| 31 |
+
conda env remove -n voicedialogue
|
| 32 |
+
|
| 33 |
+
# 使用 uv
|
| 34 |
+
deactivate
|
| 35 |
+
rm -rf .venv
|
| 36 |
+
```
|
| 37 |
+
|
| 38 |
+
### 5. 说话人角色不存在
|
| 39 |
+
- **问题**: 指定的说话人不在支持列表中。
|
| 40 |
+
- **解决方案**: 使用 `python main.py --help` 查看所有可用的说话人角色。
|
| 41 |
+
|
| 42 |
+
### 6. FFmpeg 相关错误
|
| 43 |
+
- **问题**: 音频处理失败或编解码错误。
|
| 44 |
+
- **解决方案**: 确保正确安装 FFmpeg:
|
| 45 |
+
```bash
|
| 46 |
+
# 检查 FFmpeg 安装
|
| 47 |
+
ffmpeg -version
|
| 48 |
+
|
| 49 |
+
# 重新安装 FFmpeg
|
| 50 |
+
# macOS
|
| 51 |
+
brew reinstall ffmpeg
|
| 52 |
+
|
| 53 |
+
```
|
| 54 |
+
|
| 55 |
+
### 7. Python 版本兼容性
|
| 56 |
+
- **问题**: Python 版本过低导致的兼容性问题。
|
| 57 |
+
- **解决方案**: 确保使用 Python 3.9+ 版本:
|
| 58 |
+
```bash
|
| 59 |
+
python --version
|
| 60 |
+
# 如果版本过低,请升级或使用虚拟环境
|
| 61 |
+
```
|
| 62 |
+
|
| 63 |
+
### 8. 桌面应用相关问题
|
| 64 |
+
- **问题**: Electron 应用启动失败或功能异常。
|
| 65 |
+
- **解决方案**:
|
| 66 |
+
- 确保 Node.js 版本 >= 16
|
| 67 |
+
- 重新安装依赖:`cd electron-app && npm install`
|
| 68 |
+
- 检查 Python 后端是否正常运行
|
| 69 |
+
|
| 70 |
+
### 9. 构建打包问题
|
| 71 |
+
- **问题**: 使用构建脚本失败。
|
| 72 |
+
- **解决方案**:
|
| 73 |
+
- 确保有执行权限:`chmod +x scripts/*.sh`
|
| 74 |
+
- 检查所有依赖是否安装完成
|
| 75 |
+
- 查看具体错误日志进行调试
|
| 76 |
+
|
| 77 |
+
## 📊 性能优化建议
|
| 78 |
+
|
| 79 |
+
### 硬件优化
|
| 80 |
+
- **内存**: 推荐 32GB RAM 以获得最佳性能
|
| 81 |
+
- **存储**: 使用 SSD 硬盘可显著提升模型加载速度
|
| 82 |
+
- **CPU**: 多核处理器有助于多线程处理
|
| 83 |
+
|
| 84 |
+
### 软件优化
|
| 85 |
+
- **模型选择**: 根据硬件配置选择合适大小的模型
|
| 86 |
+
- **批处理优化**: 调整 LLM 的 `n_batch` 参数
|
| 87 |
+
- **音频缓冲**: 根据延迟要求调整音频缓冲区大小
|