mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-22 07:03:53 +08:00
Delete docs/sherpa-paraformer-guide.md
This commit is contained in:
@@ -1,268 +0,0 @@
|
||||
# Sherpa-ONNX Paraformer 模型使用指南
|
||||
|
||||
本文档介绍如何在小智 ESP32 服务器中使用 Paraformer 模型进行中文语音识别。Paraformer 有多个版本,本指南重点介绍适合低性能设备(如 RK3566)的小尺寸版本。
|
||||
|
||||
## 为什么选择 Paraformer?
|
||||
|
||||
Paraformer 是阿里达摩院开发的语音识别模型系列,支持多种语言和尺寸。对于性能较低的设备(如 RK3566),我们推荐使用中文小尺寸版本:
|
||||
|
||||
- **多种尺寸可选**:从 78MB 的小模型到 600MB+ 的大模型
|
||||
- **速度快**:优化的模型结构,推理速度快
|
||||
- **资源占用灵活**:可根据设备性能选择合适的版本
|
||||
|
||||
## Paraformer 模型特点
|
||||
|
||||
- **多语言支持**:除中文外,还有英文、日文等版本
|
||||
- **支持 INT8 量化**:通过量化技术减小模型体积
|
||||
- **CPU 友好**:即使在纯 CPU 环境下也能高效运行
|
||||
- **低延迟**:适合实时对话场景
|
||||
|
||||
**注意**:本指南主要介绍中文版本(paraformer-zh 系列),这是小智 ESP32 项目的主要使用场景。
|
||||
|
||||
## 如何找到合适的模型
|
||||
|
||||
### 模型来源渠道
|
||||
|
||||
1. **GitHub Releases(推荐)**
|
||||
- [Sherpa-ONNX 官方发布页](https://github.com/k2-fsa/sherpa-onnx/releases/tag/asr-models)
|
||||
- 优点:模型经过验证,格式标准,下载稳定
|
||||
- 缺点:需要科学上网
|
||||
|
||||
2. **ModelScope(阿里巴巴)**
|
||||
- [ModelScope 搜索](https://modelscope.cn/models?name=sherpa-onnx&page=1)
|
||||
- 优点:国内访问快,无需科学上网
|
||||
- 缺点:部分模型格式不标准,需要仔细筛选
|
||||
|
||||
3. **HuggingFace**
|
||||
- [HuggingFace 搜索](https://huggingface.co/models?search=sherpa-onnx)
|
||||
- 优点:模型丰富,社区活跃
|
||||
- 缺点:需要科学上网,下载速度慢
|
||||
|
||||
### 判断模型是否可用
|
||||
|
||||
**必须满足以下条件**:
|
||||
|
||||
1. **文件格式要求**
|
||||
```
|
||||
模型目录/
|
||||
├── model.int8.onnx # INT8 量化的 ONNX 模型(必需)
|
||||
├── tokens.txt # 词汇表文件(必需)
|
||||
└── README.md # 说明文档(可选)
|
||||
```
|
||||
|
||||
2. **模型类型识别**
|
||||
- 文件名包含 `paraformer`:使用 `model_type: paraformer`
|
||||
- 文件名包含 `sense-voice`:使用 `model_type: sense_voice`
|
||||
- 不确定时查看 README 或模型说明
|
||||
|
||||
3. **验证方法**
|
||||
```bash
|
||||
# 下载后解压查看文件
|
||||
tar -tf downloaded-model.tar.bz2 | grep -E "(model\.int8\.onnx|tokens\.txt)"
|
||||
|
||||
# 如果两个文件都存在,模型可用
|
||||
```
|
||||
|
||||
### 搜索技巧
|
||||
|
||||
1. **GitHub 搜索关键词**
|
||||
- `sherpa-onnx-paraformer-zh`(中文 Paraformer)
|
||||
- `sherpa-onnx-sense-voice`(多语言 SenseVoice)
|
||||
|
||||
2. **ModelScope 搜索**
|
||||
- 搜索 `sherpa-onnx`
|
||||
- 筛选作者 `pengzhendong`(经过验证的模型)
|
||||
|
||||
3. **识别不可用的模型**
|
||||
- ❌ 只有 `.pt` 或 `.pth` 文件(PyTorch 格式)
|
||||
- ❌ 只有 `.bin` 文件(未转换的二进制)
|
||||
- ❌ 缺少 `tokens.txt`
|
||||
- ✅ 包含 `model.int8.onnx` 和 `tokens.txt`
|
||||
|
||||
## 模型下载
|
||||
|
||||
### 推荐的 Paraformer 模型
|
||||
|
||||
#### 1. Paraformer-zh-small(推荐)
|
||||
- **大小**:约 78MB
|
||||
- **适用场景**:低性能设备,纯中文场景
|
||||
- **下载地址**:
|
||||
```bash
|
||||
# GitHub 官方下载
|
||||
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-paraformer-zh-small-2024-03-09.tar.bz2
|
||||
|
||||
# 国内镜像加速
|
||||
wget https://ghproxy.com/https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-paraformer-zh-small-2024-03-09.tar.bz2
|
||||
|
||||
# 解压
|
||||
mkdir -p models
|
||||
tar -xf sherpa-onnx-paraformer-zh-small-2024-03-09.tar.bz2 -C models/
|
||||
```
|
||||
|
||||
#### 2. Paraformer-zh(标准版)
|
||||
- **大小**:约 230MB
|
||||
- **适用场景**:性能充足时,追求更高准确度
|
||||
- **下载地址**:
|
||||
```bash
|
||||
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-paraformer-zh-2023-09-14.tar.bz2
|
||||
```
|
||||
|
||||
### 其他可用的 Paraformer 模型
|
||||
|
||||
在 [Sherpa-ONNX Releases](https://github.com/k2-fsa/sherpa-onnx/releases/tag/asr-models) 页面可找到:
|
||||
- **中文版本**:搜索 "paraformer-zh"
|
||||
- **英文版本**:搜索 "paraformer-en"
|
||||
- **多语言版本**:搜索 "paraformer-trilingual"(中英日)
|
||||
|
||||
## 配置方法
|
||||
|
||||
在 `config.yaml` 中配置对应的 ASR 模块:
|
||||
|
||||
### 1. 在 config.yaml 中添加 Paraformer 配置
|
||||
|
||||
```yaml
|
||||
ASR:
|
||||
SherpaParaformerASR:
|
||||
type: sherpa_onnx_local
|
||||
model_dir: models/sherpa-onnx-paraformer-zh-small-2024-03-09
|
||||
output_dir: tmp/
|
||||
model_type: paraformer # 必须指定为 paraformer
|
||||
```
|
||||
|
||||
### 2. 在 .config.yaml 中启用
|
||||
|
||||
```yaml
|
||||
selected_module:
|
||||
ASR: SherpaParaformerASR # 使用 Paraformer 模型
|
||||
```
|
||||
|
||||
## Paraformer 不同版本对比
|
||||
|
||||
| 版本 | 模型大小 | 内存占用 | 推理速度 | 准确度 | 推荐场景 |
|
||||
| ------------------- | -------- | -------- | -------- | ------ | ---------- |
|
||||
| paraformer-zh-small | ~78MB | ~200MB | 快 | 良好 | 低性能设备 |
|
||||
| paraformer-zh | ~230MB | ~500MB | 中等 | 优秀 | 标准设备 |
|
||||
| paraformer-zh-large | ~600MB | ~1.2GB | 较慢 | 最佳 | 高性能设备 |
|
||||
|
||||
## 实测性能数据
|
||||
|
||||
### RK3566 设备实测(2GB 内存)
|
||||
|
||||
使用 **paraformer-zh-small** 模型的实际表现:
|
||||
|
||||
| 测试项目 | 数据 |
|
||||
|---------|------|
|
||||
| 模型加载时间 | ~3秒 |
|
||||
| 30字中文识别 | **~0.5秒** |
|
||||
| 60字中文识别 | ~0.8秒 |
|
||||
| 内存占用(空闲) | ~180MB |
|
||||
| 内存占用(识别中) | ~220MB |
|
||||
| CPU 占用(识别时) | **四核瞬时跑满** |
|
||||
|
||||
**测试环境**:
|
||||
- 设备:RK3566 开发板
|
||||
- 内存:2GB DDR4
|
||||
- 系统:Debian 11
|
||||
- Python:3.9
|
||||
|
||||
**性能优势**:
|
||||
- ✅ 0.5秒完成30字识别,响应迅速
|
||||
- ✅ 内存占用低,2GB 设备运行流畅
|
||||
- ✅ 虽然识别瞬间 CPU 跑满,但持续时间短,不影响整体体验
|
||||
|
||||
**性能特点**:
|
||||
- 识别过程中 CPU 四核会瞬时跑满(纯 CPU 推理)
|
||||
- 由于识别速度快(0.5秒),CPU 高负载时间很短
|
||||
- 对比 SenseVoice(894MB)在同设备上需要 2-3 秒,Paraformer-small(78MB)提升了 **4-6 倍**的识别速度
|
||||
|
||||
## 常见问题
|
||||
|
||||
### 1. 模型文件缺失错误
|
||||
|
||||
如果看到 "模型文件下载失败" 错误,请手动下载模型文件并确保以下文件存在:
|
||||
- `model.int8.onnx` - 量化后的 ONNX 模型文件
|
||||
- `tokens.txt` - 词汇表文件
|
||||
|
||||
### 2. RK3566 NPU 加速
|
||||
|
||||
目前 Sherpa-ONNX 暂不支持 RK3566 NPU 加速(正在努力攻克中),但 INT8 量化模型已经能在 CPU 上高效运行。
|
||||
|
||||
### 3. 模型选择建议
|
||||
|
||||
- **RK3566 等嵌入式设备**:使用 paraformer-zh-small
|
||||
- **树莓派、迷你主机**:使用 paraformer-zh
|
||||
- **性能充足的设备**:使用 paraformer-zh-large
|
||||
- **需要极致性能**:考虑使用在线 ASR 服务(如豆包、阿里云)
|
||||
|
||||
### 4. 下载失败处理
|
||||
|
||||
**GitHub 下载慢或失败**:
|
||||
- 使用代理工具
|
||||
- 使用 GitHub 加速服务
|
||||
- 从 ModelScope 下载同名模型
|
||||
|
||||
**ModelScope 下载失败**:
|
||||
- 检查网络连接
|
||||
- 使用手动下载方式
|
||||
- 尝试其他模型源
|
||||
|
||||
### 5. 模型版本更新
|
||||
|
||||
定期检查新版本:
|
||||
```bash
|
||||
# 查看最新的 Paraformer 模型
|
||||
curl -s https://api.github.com/repos/k2-fsa/sherpa-onnx/releases | grep paraformer-zh
|
||||
```
|
||||
|
||||
## 实战示例
|
||||
|
||||
### 快速测试模型是否可用
|
||||
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
# test_model.py - 测试下载的模型是否可用
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
def check_model(model_dir):
|
||||
"""检查模型文件是否完整"""
|
||||
required_files = ['model.int8.onnx', 'tokens.txt']
|
||||
missing = []
|
||||
|
||||
for file in required_files:
|
||||
path = os.path.join(model_dir, file)
|
||||
if not os.path.exists(path):
|
||||
missing.append(file)
|
||||
else:
|
||||
size = os.path.getsize(path) / 1024 / 1024 # MB
|
||||
print(f"✓ {file}: {size:.1f} MB")
|
||||
|
||||
if missing:
|
||||
print(f"✗ 缺少文件: {', '.join(missing)}")
|
||||
return False
|
||||
|
||||
# 检查模型类型
|
||||
if 'paraformer' in model_dir.lower():
|
||||
print("→ 模型类型: paraformer")
|
||||
elif 'sense-voice' in model_dir.lower():
|
||||
print("→ 模型类型: sense_voice")
|
||||
else:
|
||||
print("→ 模型类型: 未知(默认使用 sense_voice)")
|
||||
|
||||
return True
|
||||
|
||||
if __name__ == "__main__":
|
||||
model_dir = sys.argv[1] if len(sys.argv) > 1 else "models/sherpa-onnx-paraformer-zh-small-2024-03-09"
|
||||
if check_model(model_dir):
|
||||
print(f"\n✅ 模型 {model_dir} 可以使用!")
|
||||
else:
|
||||
print(f"\n❌ 模型 {model_dir} 不完整,请重新下载!")
|
||||
```
|
||||
|
||||
## 参考链接
|
||||
|
||||
- [Sherpa-ONNX 官方仓库](https://github.com/k2-fsa/sherpa-onnx)
|
||||
- [Sherpa-ONNX 模型下载](https://github.com/k2-fsa/sherpa-onnx/releases/tag/asr-models)
|
||||
- [Paraformer 论文](https://arxiv.org/abs/2206.08317)
|
||||
- [k2-fsa 组织主页](https://github.com/k2-fsa)
|
||||
Reference in New Issue
Block a user