feat: 完整的语音助手系统实现
主要功能: - ✅ 离线语音识别 (ASR) - Paraformer中文模型 - ✅ 在线语音识别 - Streaming Paraformer中英文双语模型 - ✅ 语音合成 (TTS) - MeloTTS中英文混合模型 - ✅ 语音唤醒 (KWS) - Zipformer关键词检测模型 - ✅ 麦克风录音功能 - 支持多种格式和实时转换 - ✅ 模型设置界面 - 完整的图形化配置管理 KWS优化亮点: - 🎯 成功实现关键词检测 (测试成功率10%→预期50%+) - ⚙️ 可调参数: 阈值、活跃路径、尾随空白、分数权重、线程数 - 🔧 智能参数验证和实时反馈 - 📊 详细的调试信息和成功统计 - 🎛️ 用户友好的设置界面 技术架构: - 模块化设计: ASRManager, TTSManager, KWSManager - 实时音频处理: 自动格式转换 (任意格式→16kHz单声道) - 智能设备检测: 自动选择最佳音频格式 - 完整资源管理: 正确的创建和销毁流程 - 跨平台支持: macOS优化的音频权限处理 界面特性: - 2×2网格布局: ASR、TTS、录音、KWS四大功能模块 - 分离录音设置: 设备参数 + 输出格式独立配置 - 实时状态显示: 音频电平、处理次数、成功统计 - 详细的用户指导和错误提示
This commit is contained in:
237
docs/MICROPHONE_RECOGNITION_GUIDE.md
Normal file
237
docs/MICROPHONE_RECOGNITION_GUIDE.md
Normal file
@@ -0,0 +1,237 @@
|
||||
# 麦克风实时语音识别使用指南
|
||||
|
||||
## 功能概述
|
||||
|
||||
麦克风实时语音识别功能使用sherpa-onnx-streaming-paraformer-bilingual-zh-en模型,支持中英文双语实时识别。
|
||||
|
||||
## 模型要求
|
||||
|
||||
### 必需文件
|
||||
确保以下文件存在于 `~/.config/QSmartAssistant/Data/sherpa-onnx-streaming-paraformer-bilingual-zh-en/` 目录:
|
||||
|
||||
```
|
||||
sherpa-onnx-streaming-paraformer-bilingual-zh-en/
|
||||
├── encoder.int8.onnx # 编码器模型(推荐使用int8量化版本)
|
||||
├── decoder.int8.onnx # 解码器模型
|
||||
├── tokens.txt # 词汇表文件
|
||||
└── test_wavs/ # 测试音频文件(可选)
|
||||
```
|
||||
|
||||
### 模型特性
|
||||
- **双语支持**:同时支持中文和英文识别
|
||||
- **实时流式**:支持连续语音流处理
|
||||
- **端点检测**:自动检测语音开始和结束
|
||||
- **低延迟**:优化的流式处理架构
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 1. 启动识别
|
||||
1. 确保麦克风已连接并正常工作
|
||||
2. 点击 **"开始麦克风识别"** 按钮
|
||||
3. 看到状态变为 **"识别中..."** 表示已开始
|
||||
|
||||
### 2. 语音输入
|
||||
- **清晰发音**:保持正常语速,发音清晰
|
||||
- **适当距离**:距离麦克风20-50cm
|
||||
- **安静环境**:减少背景噪音干扰
|
||||
- **自然停顿**:句子间适当停顿,便于端点检测
|
||||
|
||||
### 3. 查看结果
|
||||
- **实时反馈**:状态栏显示当前识别内容
|
||||
- **分段结果**:检测到语音结束时显示完整句子
|
||||
- **最终结果**:停止识别时显示最后的识别内容
|
||||
|
||||
### 4. 停止识别
|
||||
点击 **"停止识别"** 按钮结束录音和识别
|
||||
|
||||
## 界面说明
|
||||
|
||||
### 按钮状态
|
||||
- **开始麦克风识别**(红色):可以开始识别
|
||||
- **识别中...**(灰色):正在进行识别,不可点击
|
||||
- **停止识别**(灰色):结束当前识别会话
|
||||
|
||||
### 状态显示
|
||||
- **状态栏**:显示当前识别状态和实时结果
|
||||
- **识别结果区域**:显示分段识别结果
|
||||
- **最终结果**:停止时显示完整识别内容
|
||||
|
||||
## 技术参数
|
||||
|
||||
### 音频格式
|
||||
- **采样率**:16000 Hz
|
||||
- **声道数**:单声道(Mono)
|
||||
- **位深度**:16位
|
||||
- **格式**:PCM
|
||||
|
||||
### 识别参数
|
||||
- **特征维度**:80维梅尔频谱
|
||||
- **解码方法**:贪婪搜索(Greedy Search)
|
||||
- **最大活跃路径**:4条
|
||||
- **处理间隔**:100毫秒
|
||||
|
||||
### 端点检测
|
||||
- **规则1最小尾随静音**:2.4秒
|
||||
- **规则2最小尾随静音**:1.2秒
|
||||
- **规则3最小语音长度**:20.0秒
|
||||
|
||||
## 支持的语言
|
||||
|
||||
### 中文识别
|
||||
- **普通话**:标准普通话识别效果最佳
|
||||
- **常用词汇**:日常对话、技术术语
|
||||
- **数字识别**:支持中文数字表达
|
||||
|
||||
### 英文识别
|
||||
- **美式英语**:主要训练数据
|
||||
- **技术词汇**:编程、科技相关术语
|
||||
- **混合语音**:中英文混合表达
|
||||
|
||||
## 使用技巧
|
||||
|
||||
### 获得最佳识别效果
|
||||
1. **环境准备**
|
||||
- 选择安静的环境
|
||||
- 关闭风扇、空调等噪音源
|
||||
- 使用质量较好的麦克风
|
||||
|
||||
2. **发音技巧**
|
||||
- 保持正常语速,不要过快或过慢
|
||||
- 发音清晰,避免含糊不清
|
||||
- 句子间适当停顿
|
||||
|
||||
3. **内容建议**
|
||||
- 使用常见词汇和表达
|
||||
- 避免过于专业的术语
|
||||
- 中英文切换时稍作停顿
|
||||
|
||||
### 常见问题解决
|
||||
|
||||
#### 识别准确率低
|
||||
- 检查麦克风音量设置
|
||||
- 减少背景噪音
|
||||
- 调整与麦克风的距离
|
||||
- 确保发音清晰
|
||||
|
||||
#### 无法启动识别
|
||||
- 检查麦克风权限设置
|
||||
- 确认音频设备正常工作
|
||||
- 验证模型文件完整性
|
||||
- 重启应用程序
|
||||
|
||||
#### 识别延迟较高
|
||||
- 关闭其他占用CPU的程序
|
||||
- 检查系统资源使用情况
|
||||
- 考虑使用更快的存储设备
|
||||
|
||||
## 性能优化
|
||||
|
||||
### 系统要求
|
||||
- **CPU**:推荐4核心以上
|
||||
- **内存**:至少4GB可用内存
|
||||
- **存储**:SSD存储提升加载速度
|
||||
- **音频**:支持16kHz采样率的音频设备
|
||||
|
||||
### 优化建议
|
||||
1. **模型选择**:使用int8量化模型减少内存占用
|
||||
2. **线程数量**:根据CPU核心数调整线程数
|
||||
3. **缓冲设置**:适当调整音频缓冲区大小
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 麦克风权限问题(macOS常见)
|
||||
|
||||
**症状:**
|
||||
- 提示"Kiro想访问麦克风"但功能不工作
|
||||
- 音频源状态一直显示`IdleState`
|
||||
- 控制台显示"音频源状态异常"
|
||||
|
||||
**解决步骤:**
|
||||
1. **手动授权权限**
|
||||
```
|
||||
系统设置 → 隐私与安全性 → 麦克风
|
||||
添加qt_speech_simple程序并开启权限
|
||||
```
|
||||
|
||||
2. **重置权限**
|
||||
```bash
|
||||
sudo tccutil reset Microphone
|
||||
# 然后重新运行程序,点击"允许"
|
||||
```
|
||||
|
||||
3. **使用权限检查脚本**
|
||||
```bash
|
||||
./check_audio_permissions.sh
|
||||
```
|
||||
|
||||
4. **验证权限状态**
|
||||
```bash
|
||||
sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db \
|
||||
"SELECT client, auth_value FROM access WHERE service='kTCCServiceMicrophone';"
|
||||
```
|
||||
|
||||
**详细解决方案请参考:** `docs/MICROPHONE_PERMISSION_FIX.md`
|
||||
|
||||
### 模型加载失败
|
||||
```
|
||||
检查步骤:
|
||||
1. 确认模型文件路径正确
|
||||
2. 验证文件完整性(大小、权限)
|
||||
3. 检查磁盘空间是否充足
|
||||
4. 查看控制台错误信息
|
||||
```
|
||||
|
||||
### 音频设备问题
|
||||
```
|
||||
解决方法:
|
||||
1. 检查系统音频设置
|
||||
2. 确认麦克风权限(重点!)
|
||||
3. 测试其他音频应用
|
||||
4. 重新插拔音频设备
|
||||
5. 重启音频服务:sudo killall coreaudiod
|
||||
```
|
||||
|
||||
### 识别结果异常
|
||||
```
|
||||
可能原因:
|
||||
1. 音频质量问题
|
||||
2. 模型版本不匹配
|
||||
3. 配置参数错误
|
||||
4. 系统资源不足
|
||||
5. 权限未正确授予
|
||||
```
|
||||
|
||||
### Qt音频源状态问题
|
||||
```
|
||||
状态说明:
|
||||
- ActiveState: 正常录音状态
|
||||
- IdleState: 空闲状态(通常是权限问题)
|
||||
- StoppedState: 已停止状态
|
||||
- SuspendedState: 暂停状态
|
||||
|
||||
解决IdleState问题:
|
||||
1. 检查麦克风权限
|
||||
2. 重启音频服务
|
||||
3. 使用不同的音频格式
|
||||
4. 检查设备占用情况
|
||||
```
|
||||
|
||||
## 开发说明
|
||||
|
||||
### 关键组件
|
||||
- **ASRManager**:管理在线识别器
|
||||
- **SpeechTestMainWindow**:处理音频输入和界面更新
|
||||
- **QAudioSource**:音频数据采集
|
||||
- **QTimer**:定时处理音频数据
|
||||
|
||||
### 数据流程
|
||||
```
|
||||
麦克风 → QAudioSource → 音频数据 → 格式转换 →
|
||||
sherpa-onnx → 识别结果 → 界面显示
|
||||
```
|
||||
|
||||
### 扩展可能
|
||||
- 支持更多语言模型
|
||||
- 添加语音活动检测
|
||||
- 实现语音命令识别
|
||||
- 集成语音翻译功能
|
||||
Reference in New Issue
Block a user