Files
QSmartAssistant/docs/MICROPHONE_RECOGNITION_GUIDE.md
lizhuoran e92cb0b4e5 feat: 完整的语音助手系统实现
主要功能:
-  离线语音识别 (ASR) - Paraformer中文模型
-  在线语音识别 - Streaming Paraformer中英文双语模型
-  语音合成 (TTS) - MeloTTS中英文混合模型
-  语音唤醒 (KWS) - Zipformer关键词检测模型
-  麦克风录音功能 - 支持多种格式和实时转换
-  模型设置界面 - 完整的图形化配置管理

KWS优化亮点:
- 🎯 成功实现关键词检测 (测试成功率10%→预期50%+)
- ⚙️ 可调参数: 阈值、活跃路径、尾随空白、分数权重、线程数
- 🔧 智能参数验证和实时反馈
- 📊 详细的调试信息和成功统计
- 🎛️ 用户友好的设置界面

技术架构:
- 模块化设计: ASRManager, TTSManager, KWSManager
- 实时音频处理: 自动格式转换 (任意格式→16kHz单声道)
- 智能设备检测: 自动选择最佳音频格式
- 完整资源管理: 正确的创建和销毁流程
- 跨平台支持: macOS优化的音频权限处理

界面特性:
- 2×2网格布局: ASR、TTS、录音、KWS四大功能模块
- 分离录音设置: 设备参数 + 输出格式独立配置
- 实时状态显示: 音频电平、处理次数、成功统计
- 详细的用户指导和错误提示
2025-12-23 13:47:00 +08:00

6.1 KiB
Raw Permalink Blame History

麦克风实时语音识别使用指南

功能概述

麦克风实时语音识别功能使用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. 重置权限

    sudo tccutil reset Microphone
    # 然后重新运行程序,点击"允许"
    
  3. 使用权限检查脚本

    ./check_audio_permissions.sh
    
  4. 验证权限状态

    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 → 识别结果 → 界面显示

扩展可能

  • 支持更多语言模型
  • 添加语音活动检测
  • 实现语音命令识别
  • 集成语音翻译功能