SenseVoiceASR-QNN 项目文档
项目简介
SenseVoiceASR-QNN 是一个基于高通QNN SDK 2.37.0.250724版本的手动编译语音识别项目,该项目将SenseVoice预编译的QNN ONNX模型使用HTP后端进行部署,实现了高效的语音识别功能。项目支持实时语音检测和识别,适用于边缘计算和嵌入式设备场景。
功能特点
- QNN加速: 基于高通QNN SDK 2.37.0.250724版本编译,支持HTP后端加速
- 多语言支持: 支持中文(zh)、英文(en)、粤语(yue)、日语(ja)、韩语(ko)等多种语言
- 实时语音检测: 集成VAD(语音活动检测)功能,能够实时检测语音段
- 流式处理: 支持实时音频流处理,适用于对话场景
- 文本规范化: 支持带ITN(withitn)和不带ITN(woitn)的文本规范化选项
- 高性能: 使用量化模型,在边缘设备上实现低延迟推理
环境要求
硬件要求
- 支持高通HTP加速的处理器
- 音频输入设备
软件要求
- 操作系统
PRETTY_NAME="Ubuntu 22.04.2 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.2 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
- Python 3.10+
- 高通QNN SDK 2.37.0.250724
- 手动编译的onnxruntime-qnn
依赖库
项目依赖的主要Python库如下(完整列表见req.info文件):
onnxruntime-qnn==1.22.1
funasr==1.2.6
librosa==0.11.0
sounddevice==0.5.2
numpy==1.26.4
torch==2.8.0
torchaudio==2.8.0
transformers==4.55.0
sentencepiece==0.2.1
项目结构
SenseVoiceASR-QNN/
├── configs/ # 配置文件目录
│ └── cfg.ini # VAD参数配置
├── models/ # 模型文件目录
│ ├── ASR/ # ASR模型
│ │ └── sensevoice-small-qnn-onnx/
│ │ ├── quant_model/ # 量化模型
│ │ ├── config.yaml # 模型配置
│ │ ├── am.mvn # CMVN参数
│ │ └── chn_jpn_yue_eng_ko_spectok.bpe.model
│ └── VAD/ # VAD模型
│ └── fsmn-vad/
├── funasr_onnx/ # FunASR ONNX实现
├── model_utils/ # 模型工具
├── model_infos/ # 模型信息
├── logs/ # 日志文件
├── run.py # 主程序入口
└── req.info # 依赖库列表
安装步骤
1. 环境准备
# 安装Python依赖
pip install -r req.info
# 设置QNN SDK环境变量, 编辑~/.bashrc, 添加如下内容
source /opt/qcom/qairt/2.37.0.250724/bin/envsetup.sh
export ADSP_LIBRARY_PATH=/usr/lib/rfsa/adsp:/opt/qcom/qairt/2.37.0.250724/lib/aarch64-oe-linux-gcc11.2
export QAIRT_SDK_ROOT=/opt/qcom/qairt/2.37.0.250724
2. 模型准备
确保以下模型文件存在:
- ASR模型: ./models/ASR/sensevoice-small-qnn-onnx/quant_model/model.onnx
- VAD模型: ./models/VAD/fsmn-vad/
3. 配置文件
编辑configs/cfg.ini文件,调整VAD参数:
[VAD_PARAMS]
decibel_thres=-100 # 分贝阈值
speech_noise_thres=0.6 # 噪声阈值
max_end_silence_time=800 # 最大结束静默时间
max_start_silence_time=3000 # 最大开始静默时间
speech_2_noise_ratio=1.0 # 语音与噪声比
speech_noise_thresh_low=-0.1 # 低噪声阈值
speech_noise_thresh_high=0.3 # 高噪声阈值
使用方法
1. 实时语音识别
运行主程序进行实时语音识别:
python run.py
程序将:
1.初始化音频设备
2.加载ASR和VAD模型
3.开始实时语音检测
4.对检测到的语音段进行识别
5.输出识别结果
2. 音频文件识别
使用SenseVoiceASR类识别音频文件:
from run import SenseVoiceASR
import logging
# 初始化模型
logger = logging.getLogger(__name__)
asr_model = SenseVoiceASR(logger, "./models/ASR/sensevoice-small-qnn-onnx/")
# 识别音频文件
result = asr_model.recognize_wav_file("test.wav", language="zh", textnorm="woitn")
print(f"识别结果: {result}")
3. 编程接口
SenseVoiceASR类
主要方法:
- init(logger, model_dir, device=“qnn”, provider_options=[{}]): 初始化模型
- recognize_wav_file(wav_path, language=“auto”, textnorm=“woitn”): 识别音频文件
- recognize_wav(waveform, language=“auto”, textnorm=“woitn”): 识别音频数据
- infer(feats, feats_len, language=“auto”, textnorm=“woitn”): 特征推理
支持的语言选项
- auto: 自动检测语言
- zh: 中文
- en: 英文
- yue: 粤语
- ja: 日语
- ko: 韩语
- nospeech: 无语音
文本规范化选项
- withitn: 带ITN(逆文本规范化)
- woitn: 不带ITN
模型信息
ASR模型
- 模型名称: SenseVoice Small
- 输入形状: [1, 300, 560]
- 输出形状: [1, 304, 25055]
- 特征维度: 560
- 序列长度: 300
- 词汇表大小: 25055
- 量化: INT8量化
输入输出
输入:
- speech: [1, 300, 560] - 音频特征
- speech_lengths: [1] - 特征长度
- language: [1] - 语言ID
- textnorm: [1] - 文本规范化ID
输出:
- ctc_logits: [1, 304, 25055] - CTC输出
- encoder_out_lens: [1] - 编码器输出长度
VAD模型
- 模型: FSMN-VAD
- 版本: v2.0.4
- 设备: CPU
性能优化
1. QNN加速
项目使用高通QNN SDK进行加速:
provider_options = [
{
'backend_path': f'{os.environ["QNN_SDK_ROOT"]}/lib/aarch64-oe-linux-gcc11.2/libQnnHtp.so',
}
]
asr_model = SenseVoiceASR(logger, model_path, device="qnn", provider_options=provider_options)
2. 音频处理优化
- 重采样: 自动将音频重采样到16kHz
- 特征提取: 使用FBank特征 + LFR + CMVN
- 流式处理: 支持实时音频流处理
运行日志
程序运行日志保存在logs/run.log文件中,包含:
- 设备信息
- 模型加载状态
- 语音检测结果
- ASR识别结果
- 错误信息
2025-09-08 07:24:52,094 - __main__ - INFO - 静态模型加载成功: models/ASR/sensevoice-small-qnn-onnx/quant_model/model.onnx
2025-09-08 07:24:52,094 - __main__ - INFO - 模型输入形状: [batch_size, seq_len, feat_dim] = [1, 300, 560]
2025-09-08 07:24:52,125 - __main__ - INFO - ▶开始语音检测...
2025-09-08 07:25:03,446 - __main__ - INFO - ASR Result: 喂你好
运行结果

故障排除
常见问题
1. QNN SDK路径错误
export QNN_SDK_ROOT=/opt/qcom/qairt/2.37.0.250724
2. 音频设备不可用
- 检查音频设备连接
- 确认设备权限
3. 模型文件缺失
- 确认模型文件路径正确
- 检查模型文件完整性
调试模式
启用详细日志:
import logging
logging.basicConfig(level=logging.DEBUG)
贡献
本项目需付费使用,欢迎在公众号“CrazyNET”留言
联系方式
- 公众号:“CrazyNET”
- 邮箱:1145570610@qq.com
源码获取
公众号回复“sensevoice-qnn”
6381

被折叠的 条评论
为什么被折叠?



