liumaolin
commited on
Commit
·
710072a
1
Parent(s):
3eb6daa
Update README.md: clarify usage details, add dynamic speaker management, and refine documentation for consistency and completeness.
Browse files
README.md
CHANGED
|
@@ -63,16 +63,16 @@ VoiceDialogue 是一个基于 Python 的完整语音对话系统,实现了端
|
|
| 63 |
- **自定义系统提示词** - 可在代码中配置 AI 助手的行为风格
|
| 64 |
|
| 65 |
### 🎭 语音合成
|
| 66 |
-
|
| 67 |
|
| 68 |
#### GPT-SoVITs 技术(中文角色)
|
| 69 |
基于 GPT-SoVITs 的中文语音合成,支持以下角色:
|
| 70 |
-
- **罗翔** - 法学教授风格,具有幽默风趣和深入浅出的讲解风格
|
| 71 |
-
- **马保国** - 太极大师风格,带有标志性的口音和语调特色
|
| 72 |
-
- **沈逸** - 学者风格,具有理性分析风格和富有磁性的嗓音
|
| 73 |
-
- **杨幂** - 明星风格,拥有清甜动人的声线和自然流畅的表达方式
|
| 74 |
-
- **周杰伦** - 歌手风格,具有标志性的说话风格和音乐气质
|
| 75 |
-
- **马云** - 企业家风格,富有激情的演讲风格和商业洞察表达方式
|
| 76 |
|
| 77 |
#### Kokoro TTS 技术(英文角色)
|
| 78 |
基于 Kokoro TTS 的英文语音合成,支持以下角色:
|
|
@@ -82,8 +82,8 @@ VoiceDialogue 是一个基于 Python 的完整语音对话系统,实现了端
|
|
| 82 |
|
| 83 |
#### 技术特点
|
| 84 |
- **智能引擎选择** - 系统根据内容语言自动选择最适合的TTS引擎
|
|
|
|
| 85 |
- **高质量合成** - 采用先进的神经网络技术,生成自然流畅的语音
|
| 86 |
-
- **多角色支持** - 提供多样化的音色选择,满足不同场景需求
|
| 87 |
- **可扩展架构** - 模块化设计,方便添加更多语音角色和TTS引擎
|
| 88 |
|
| 89 |
### ⚙️ 服务模式
|
|
@@ -150,11 +150,14 @@ sudo apt update && sudo apt install ffmpeg
|
|
| 150 |
直接在终端进行实时语音对话。
|
| 151 |
|
| 152 |
```bash
|
| 153 |
-
# 启动语音对话系统 (
|
| 154 |
python src/VoiceDialogue/main.py
|
| 155 |
|
| 156 |
# 指定语言和角色
|
| 157 |
-
python src/VoiceDialogue/main.py --language en --speaker
|
|
|
|
|
|
|
|
|
|
| 158 |
```
|
| 159 |
|
| 160 |
**首次运行说明**:
|
|
@@ -170,10 +173,15 @@ python src/VoiceDialogue/main.py --language en --speaker "Yang Mi"
|
|
| 170 |
# 启动 API 服务器
|
| 171 |
python src/VoiceDialogue/main.py --mode api
|
| 172 |
|
| 173 |
-
#
|
| 174 |
-
python src/VoiceDialogue/main.py --mode api --port 9000
|
| 175 |
```
|
|
|
|
|
|
|
| 176 |
- API 文档地址: `http://localhost:8000/docs`
|
|
|
|
|
|
|
|
|
|
| 177 |
|
| 178 |
## ⚙️ 配置选项
|
| 179 |
|
|
@@ -185,12 +193,12 @@ python src/VoiceDialogue/main.py --mode api --port 9000
|
|
| 185 |
|---|---|---|---|---|
|
| 186 |
| `--mode` | `-m` | `cli`, `api` | `cli` | 设置运行模式 |
|
| 187 |
| `--language`| `-l` | `zh`, `en` | `zh` | (CLI模式) 设置用户语言 |
|
| 188 |
-
| `--speaker` | `-s` | (
|
| 189 |
| `--host` | | IP地址 | `0.0.0.0` | (API模式) 服务器主机 |
|
| 190 |
| `--port` | `-p` | 端口号 | `8000` | (API模式) 服务器端口 |
|
| 191 |
| `--reload`| | 无 | `False` | (API模式) 启用热重载 |
|
| 192 |
|
| 193 |
-
|
| 194 |
- 中文角色:`罗翔`, `马保国`, `沈逸`, `杨幂`, `周杰伦`, `马云`
|
| 195 |
- 英文角色:`Heart`, `Bella`, `Nicole`
|
| 196 |
|
|
@@ -199,37 +207,19 @@ python src/VoiceDialogue/main.py --mode api --port 9000
|
|
| 199 |
#### 大语言模型 (LLM)
|
| 200 |
|
| 201 |
- **模型路径和参数**: LLM 的模型和推理参数目前在代码中硬编码,方便快速启动。
|
| 202 |
-
-
|
| 203 |
-
- **自定义**: 你可以修改 `LLMResponseGenerator`
|
| 204 |
-
|
| 205 |
-
```python
|
| 206 |
-
# src/VoiceDialogue/services/text/text_generator.py
|
| 207 |
-
# ...
|
| 208 |
-
class LLMResponseGenerator(BaseThread):
|
| 209 |
-
# ...
|
| 210 |
-
def run(self):
|
| 211 |
-
# 修改这里的模型路径
|
| 212 |
-
model_path = paths.MODELS_PATH / 'llm' / 'Qwen2.5-14B-Instruct.Q4_0.gguf'
|
| 213 |
-
# 修改这里的推理参数
|
| 214 |
-
model_params = {
|
| 215 |
-
'streaming': True,
|
| 216 |
-
'n_gpu_layers': -1,
|
| 217 |
-
'n_batch': 512,
|
| 218 |
-
# ...
|
| 219 |
-
}
|
| 220 |
-
# ...
|
| 221 |
-
```
|
| 222 |
|
| 223 |
#### 语音识别 (ASR)
|
| 224 |
|
| 225 |
-
- **引擎自动选择**: 系统会根据 `--language` 参数自动选择最合适的 ASR
|
| 226 |
-
- **模型配置**: ASR 模型的具体配置位于 `src/VoiceDialogue/services/speech/
|
| 227 |
|
| 228 |
#### 系统提示词 (System Prompt)
|
| 229 |
|
| 230 |
- **功能**: 定义 AI 角色的行为和说话风格。
|
| 231 |
-
- **文件位置**: `src/VoiceDialogue/services/text/
|
| 232 |
-
- **自定义**:
|
| 233 |
|
| 234 |
## 📁 项目结构
|
| 235 |
|
|
@@ -237,32 +227,39 @@ class LLMResponseGenerator(BaseThread):
|
|
| 237 |
VoiceDialogue/
|
| 238 |
├── src/
|
| 239 |
│ └── VoiceDialogue/
|
|
|
|
| 240 |
│ ├── api/ # Web API 模块 (FastAPI)
|
| 241 |
│ │ ├── app.py # FastAPI 应用实例
|
| 242 |
│ │ ├── server.py # uvicorn 服务器
|
| 243 |
-
│ │
|
|
|
|
|
|
|
|
|
|
| 244 |
│ ├── config/ # 配置管理
|
| 245 |
-
│ │
|
| 246 |
-
│
|
|
|
|
| 247 |
│ ├── models/ # 数据模型和任务
|
| 248 |
│ │ ├── language_model.py # 语言模型定义
|
| 249 |
│ │ └── voice_task.py # 语音任务定义
|
| 250 |
│ ├── services/ # 服务模块
|
| 251 |
│ │ ├── audio/ # 音频处理服务
|
| 252 |
-
│ │ │ ├──
|
| 253 |
-
│ │ │ ├──
|
| 254 |
-
│ │ │ ├──
|
| 255 |
-
│ │ │ └──
|
| 256 |
│ │ ├── speech/ # 语音识别服务
|
| 257 |
-
│ │ │ ├──
|
| 258 |
-
│ │ │ ├──
|
| 259 |
-
│ │ │ └──
|
| 260 |
│ │ └── text/ # 文本生成服务
|
| 261 |
-
│ │
|
| 262 |
-
│
|
| 263 |
-
|
| 264 |
-
│
|
| 265 |
-
├──
|
|
|
|
|
|
|
| 266 |
├── requirements.txt # Python 依赖
|
| 267 |
└── README.md # 项目说明文档
|
| 268 |
```
|
|
@@ -306,9 +303,9 @@ pip install -U huggingface_hub
|
|
| 306 |
|
| 307 |
### 3. 内存不足错误 (OOM)
|
| 308 |
- **问题**: `CUDA out of memory` 或 RAM 不足。
|
| 309 |
-
- **解决方案**: LLM 是主要的内存消耗者。你可以通过修改 `src/VoiceDialogue/services/text/
|
| 310 |
-
- **更换模型**:
|
| 311 |
-
- **减少批处理大小**:
|
| 312 |
- **减少上下文长度**: 减小 `n_ctx` 的值(如 `1024`)。
|
| 313 |
|
| 314 |
### 4. 依赖包冲突
|
|
@@ -320,6 +317,10 @@ conda env remove -n voicedialogue
|
|
| 320 |
# ... 重新执行安装步骤 ...
|
| 321 |
```
|
| 322 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 323 |
## 📄 许可证
|
| 324 |
|
| 325 |
本项目采用 MIT 许可证开源。
|
|
|
|
| 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 的英文语音合成,支持以下角色:
|
|
|
|
| 82 |
|
| 83 |
#### 技术特点
|
| 84 |
- **智能引擎选择** - 系统根据内容语言自动选择最适合的TTS引擎
|
| 85 |
+
- **动态说话人管理** - 支持运行时动态加载和切换说话人
|
| 86 |
- **高质量合成** - 采用先进的神经网络技术,生成自然流畅的语音
|
|
|
|
| 87 |
- **可扩展架构** - 模块化设计,方便添加更多语音角色和TTS引擎
|
| 88 |
|
| 89 |
### ⚙️ 服务模式
|
|
|
|
| 150 |
直接在终端进行实时语音对话。
|
| 151 |
|
| 152 |
```bash
|
| 153 |
+
# 启动语音对话系统 (默认使用中文,沈逸角色)
|
| 154 |
python src/VoiceDialogue/main.py
|
| 155 |
|
| 156 |
# 指定语言和角色
|
| 157 |
+
python src/VoiceDialogue/main.py --language en --speaker Heart
|
| 158 |
+
|
| 159 |
+
# 查看所有可用角色
|
| 160 |
+
python src/VoiceDialogue/main.py --help
|
| 161 |
```
|
| 162 |
|
| 163 |
**首次运行说明**:
|
|
|
|
| 173 |
# 启动 API 服务器
|
| 174 |
python src/VoiceDialogue/main.py --mode api
|
| 175 |
|
| 176 |
+
# 指定不同端口和启用热重载
|
| 177 |
+
python src/VoiceDialogue/main.py --mode api --port 9000 --reload
|
| 178 |
```
|
| 179 |
+
|
| 180 |
+
**API 服务特性**:
|
| 181 |
- API 文档地址: `http://localhost:8000/docs`
|
| 182 |
+
- 支持 TTS 模型管理(查看、加载、删除)
|
| 183 |
+
- 实时模型状态监控
|
| 184 |
+
- RESTful API 设计
|
| 185 |
|
| 186 |
## ⚙️ 配置选项
|
| 187 |
|
|
|
|
| 193 |
|---|---|---|---|---|
|
| 194 |
| `--mode` | `-m` | `cli`, `api` | `cli` | 设置运行模式 |
|
| 195 |
| `--language`| `-l` | `zh`, `en` | `zh` | (CLI模式) 设置用户语言 |
|
| 196 |
+
| `--speaker` | `-s` | (动态获取) | `沈逸` | (CLI模式) 设置TTS语音角色 |
|
| 197 |
| `--host` | | IP地址 | `0.0.0.0` | (API模式) 服务器主机 |
|
| 198 |
| `--port` | `-p` | 端口号 | `8000` | (API模式) 服务器端口 |
|
| 199 |
| `--reload`| | 无 | `False` | (API模式) 启用热重载 |
|
| 200 |
|
| 201 |
+
**支持的说话人角色**(动态加载):
|
| 202 |
- 中文角色:`罗翔`, `马保国`, `沈逸`, `杨幂`, `周杰伦`, `马云`
|
| 203 |
- 英文角色:`Heart`, `Bella`, `Nicole`
|
| 204 |
|
|
|
|
| 207 |
#### 大语言模型 (LLM)
|
| 208 |
|
| 209 |
- **模型路径和参数**: LLM 的模型和推理参数目前在代码中硬编码,方便快速启动。
|
| 210 |
+
- **文件���置**: `src/VoiceDialogue/services/text/generator.py`
|
| 211 |
+
- **自定义**: 你可以修改 `LLMResponseGenerator` 类中的配置。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 212 |
|
| 213 |
#### 语音识别 (ASR)
|
| 214 |
|
| 215 |
+
- **引擎自动选择**: 系统会根据 `--language` 参数自动选择最合适的 ASR 引擎。
|
| 216 |
+
- **模型配置**: ASR 模型的具体配置位于 `src/VoiceDialogue/services/speech/recognizers/manager.py`。
|
| 217 |
|
| 218 |
#### 系统提示词 (System Prompt)
|
| 219 |
|
| 220 |
- **功能**: 定义 AI 角色的行为和说话风格。
|
| 221 |
+
- **文件位置**: `src/VoiceDialogue/services/text/generator.py`
|
| 222 |
+
- **自定义**: 你可以修改系统提示词变量的值。
|
| 223 |
|
| 224 |
## 📁 项目结构
|
| 225 |
|
|
|
|
| 227 |
VoiceDialogue/
|
| 228 |
├── src/
|
| 229 |
│ └── VoiceDialogue/
|
| 230 |
+
│ ├── main.py # 主程序入口
|
| 231 |
│ ├── api/ # Web API 模块 (FastAPI)
|
| 232 |
│ │ ├── app.py # FastAPI 应用实例
|
| 233 |
│ │ ├── server.py # uvicorn 服务器
|
| 234 |
+
│ │ ├── core/ # 核心配置
|
| 235 |
+
│ │ ├── routes/ # API 路由
|
| 236 |
+
│ │ ├── schemas/ # 数据模型
|
| 237 |
+
│ │ └── middleware/ # 中间件
|
| 238 |
│ ├── config/ # 配置管理
|
| 239 |
+
│ │ └── paths.py # 路径配置
|
| 240 |
+
│ ├── core/ # 核心模块
|
| 241 |
+
│ │ └── constants.py # 全局常量和队列
|
| 242 |
│ ├── models/ # 数据模型和任务
|
| 243 |
│ │ ├── language_model.py # 语言模型定义
|
| 244 |
│ │ └── voice_task.py # 语音任务定义
|
| 245 |
│ ├── services/ # 服务模块
|
| 246 |
│ │ ├── audio/ # 音频处理服务
|
| 247 |
+
│ │ │ ├── capture.py # 回声消除音频捕获
|
| 248 |
+
│ │ │ ├── player.py # 音频播放
|
| 249 |
+
│ │ │ ├── generator.py # TTS 音频生成器
|
| 250 |
+
│ │ │ └── generators/ # TTS 引擎管理
|
| 251 |
│ │ ├── speech/ # 语音识别服务
|
| 252 |
+
│ │ │ ├── monitor.py # 语音状态监控
|
| 253 |
+
│ │ │ ├── recognizer.py # ASR 识别服务
|
| 254 |
+
│ │ │ └── recognizers/ # ASR 引擎管理
|
| 255 |
│ │ └── text/ # 文本生成服务
|
| 256 |
+
│ │ └── generator.py # LLM 文本生成
|
| 257 |
+
│ └── utils/ # 工具函数
|
| 258 |
+
├── third_party/ # 第三方库
|
| 259 |
+
│ └── moyoyo_tts/ # GPT-SoVITs TTS 引擎
|
| 260 |
+
├── tests/ # 测试文件
|
| 261 |
+
├── docs/ # 文档目录 (空)
|
| 262 |
+
├── assets/ # 资源文件
|
| 263 |
├── requirements.txt # Python 依赖
|
| 264 |
└── README.md # 项目说明文档
|
| 265 |
```
|
|
|
|
| 303 |
|
| 304 |
### 3. 内存不足错误 (OOM)
|
| 305 |
- **问题**: `CUDA out of memory` 或 RAM 不足。
|
| 306 |
+
- **解决方案**: LLM 是主要的内存消耗者。你可以通过修改 `src/VoiceDialogue/services/text/generator.py` 来降低资源消耗:
|
| 307 |
+
- **更换模型**: 将模型路径指向一个更小的模型(如 7B Q4 量化模型)。
|
| 308 |
+
- **减少批处理大小**: 减小模型参数中的 `n_batch` 值(如 `256`)。
|
| 309 |
- **减少上下文长度**: 减小 `n_ctx` 的值(如 `1024`)。
|
| 310 |
|
| 311 |
### 4. 依赖包冲突
|
|
|
|
| 317 |
# ... 重新执行安装步骤 ...
|
| 318 |
```
|
| 319 |
|
| 320 |
+
### 5. 说话人角色不存在
|
| 321 |
+
- **问题**: 指定的说话人不在支持列表中。
|
| 322 |
+
- **解决方案**: 使用 `python src/VoiceDialogue/main.py --help` 查看所有可用的说话人角色。
|
| 323 |
+
|
| 324 |
## 📄 许可证
|
| 325 |
|
| 326 |
本项目采用 MIT 许可证开源。
|