SenseVoice(爱芯 NPU 版)
FunASR SenseVoiceSmall 在爱芯 NPU 上的部署包,支持 AX650N / AX630C / AX620Q 三芯。 官方模型仓库:https://github.com/FunAudioLLM/SenseVoice
特性
- 语音识别(ASR):中文 / 英文 / 粤语 / 日语 / 韩语,自动语种识别
- 语音情感识别(SER)+ 声学事件分类(AEC)
- 自动标点(ITN/非流式)
- 流式识别(增量输出,带时间戳)
- 纯 NPU 推理(ax_engine),Python 与 C++ 双 SDK
支持平台与模型
| 芯片 | 模型目录 | 非流式 | 流式 | 工具链 |
|---|---|---|---|---|
| AX650N | sensevoice_ax650/ |
✅ | ✅ | Pulsar2 7.0 |
| AX630C | sensevoice_ax630c/ |
✅ | ✅ | Pulsar2 7.0(AX620E NPU2 full-core) |
| AX620Q(AXera Pi Zero) | sensevoice_ax620q/ |
✅ | ✅ | Pulsar2 7.0(AX620E NPU2,与 AX630C 同 NPU) |
每个模型目录内包含:sensevoice.axmodel、streaming_sensevoice.axmodel(流式)、
am.mvn、tokens.txt、chn_jpn_yue_eng_ko_spectok.bpe.model。
快速开始
1. 下载模型(三芯预编译)
./download_models.sh # 下载 models/sensevoice_ax650|ax630c|ax620q
2. 安装 Python 环境
sudo apt-get install libsndfile-dev
cd python
pip install -r requirements.txt
安装 NPU Python API(pyaxengine,0.1.3rc2 测试通过):
pip install https://github.com/AXERA-TECH/pyaxengine/releases/download/0.1.3.rc2/axengine-0.1.3-py3-none-any.whl
Python 示例
非流式识别(三芯)
cd python
# AX650N
python3 main.py -i ../example/zh.mp3 --chip ax650
# AX630C
python3 main.py -i ../example/zh.mp3 --chip ax630c
# AX620Q(AXera Pi Zero)
python3 main.py -i ../example/zh.mp3 --chip ax620q
示例输出(AX650N):
RTF: 0.04386647134764582 Latency: 0.2463541030883789s Total length: 5.616s
ASR result: 开饭时间早上九点至下午五点
英文:
python3 main.py -i ../example/en.mp3 --chip ax650
RTF: 0.036785734138361184 Latency: 0.2639744281768799s Total length: 7.176s
ASR result: the tribal chieftain called for the boy and presented him with fifty pieces of gold
流式识别(三芯)
cd python
python3 main.py -i ../example/zh.mp3 --chip ax650 --streaming
python3 main.py -i ../example/zh.mp3 --chip ax630c --streaming
python3 main.py -i ../example/zh.mp3 --chip ax620q --streaming
示例输出(增量带时间戳):
{'timestamps': [540], 'text': '开'}
{'timestamps': [540, 780, 1080], 'text': '开放时'}
{'timestamps': [540, 780, 1080, 1260, 1740], 'text': '开放时间早'}
{'timestamps': [540, 780, 1080, 1260, 1740, 1920, 2340], 'text': '开放时间早上9'}
{'timestamps': [540, 780, 1080, 1260, 1740, 1920, 2340, 2640], 'text': '开放时间早上9点'}
{'timestamps': [540, 780, 1080, 1260, 1740, 1920, 2340, 2640, 3060], 'text': '开放时间早上9点至'}
{'timestamps': [540, 780, 1080, 1260, 1740, 1920, 2340, 2640, 3060, 3780, 4020], 'text': '开放时间早上9点至下午'}
{'timestamps': [540, 780, 1080, 1260, 1740, 1920, 2340, 2640, 3060, 3780, 4020, 4440, 4620], 'text': '开放时间早上9点至下午五点'}
RTF: 0.03678379235444246
参数说明
| 参数 | 说明 | 默认值 |
|---|---|---|
--input/-i |
输入音频文件(wav/mp3) | 必填 |
--language/-l |
识别语言:auto / zh / en / yue / ja / ko | auto |
--chip/-c |
目标芯片:ax650 / ax630c / ax620q | ax650 |
--streaming |
流式识别 | 关 |
Gradio Demo
cd python
python3 gradio_demo.py
C++ 示例
预编译产物:cpp/ax650/、cpp/ax630c/、cpp/ax620q/(各自包含 test_sensevoice、asr_server、libax_asr_api.a、头文件)。
模型目录需为 models/sensevoice_ax*(内含 sensevoice/ 子目录,download_models.sh 下载的即为此结构)。
非流式识别(三芯)
# AX650N
./cpp/ax650/test_sensevoice -a example/zh.mp3 -t sensevoice -p models/sensevoice_ax650
# AX630C
./cpp/ax630c/test_sensevoice -a example/zh.mp3 -t sensevoice -p models/sensevoice_ax630c
# AX620Q(AXera Pi Zero,arm uclibc)
export LD_LIBRARY_PATH=/opt/lib:$LD_LIBRARY_PATH
./cpp/ax620q/test_sensevoice -a example/zh.mp3 -t sensevoice -p models/sensevoice_ax620q
示例输出(AX630C,wav 输入):
Init asr: sensevoice success, take 0.6930seconds
Result: 开饭时间早上9点至下午5点。
RTF(0.60 / 5.62) = 0.1072
流式识别(三芯)
# 命令行演示:-s 流式模式(100ms 步长喂音频,打印增量结果)
./cpp/ax650/test_sensevoice -a example/zh.mp3 -t sensevoice -p models/sensevoice_ax650 -s
./cpp/ax630c/test_sensevoice -a example/zh.mp3 -t sensevoice -p models/sensevoice_ax630c -s
./cpp/ax620q/test_sensevoice -a example/zh.mp3 -t sensevoice -p models/sensevoice_ax620q -s
示例输出(AX630C):
[ 5.30s] 开放时间早上嗯九点至下
[ 5.40s] 开放时间早上嗯九点至下
[ 5.50s] 开放时间早上嗯九点至下
[ 5.60s] 开放时间早上嗯九点至下
[FINAL] 开放时间早上嗯九点至下午五点
RTF(0.43 / 5.62) = 0.0759
库 API(增量识别):
AX_ASR_StreamInit(handle); // 初始化流式状态
AX_ASR_StreamFeed(handle, pcm, n, 16000); // 喂音频(float [-1,1],16k)
AX_ASR_StreamResult(handle, &text); // 获取当前增量结果
AX_ASR_StreamFinish(handle); // 喂完后收尾刷新
ASR 服务(asr_server)
./cpp/ax650/asr_server
C++ 源码
源码在 Github main 分支
(SenseVoice LFR 前端修复与 AX620Q 构建修复已合入 main,PR #10)。
流式专用模型的增量缓存等改动见 ml-inory/sensevoice.axera
的 cpp/ax_asr_api_streaming.patch。
性能参考(实测)
RTF = 推理耗时 / 音频时长。非流式每次推理对应 256 帧 chunk(2.56 s 音频);流式每 10 帧推一次(对应 0.1 s 音频)。
数据为 ax_run_model 纯 NPU 实测(warmup=3, repeat=20):
| 芯片 | 模式 | 7.0 RTF | 5.0 原版 RTF | 7.0 延迟/次 |
|---|---|---|---|---|
| AX650N | 非流式 | 0.014 | 0.021 | ~35 ms |
| AX650N | 流式 | 0.11 | 0.13 | ~11 ms |
| AX630C | 非流式 | 0.088 | 0.17 | ~224 ms |
| AX630C | 流式 | 0.41 | 0.49 | ~41 ms |
| AX620Q | 非流式 | 0.088* | — | ~224 ms* |
| AX620Q | 流式 | 0.41* | — | ~41 ms* |
端到端示例(zh.mp3,5.62 s,C++,AX630C 板):非流式 RTF 0.107;流式(增量)RTF 0.076。
测量说明:AX650N 测于 AX650N 板;AX630C / AX620Q 测于 AX630C 板(两者为同一 NPU2 满核模型; AX620Q 因频率与 DDR 带宽较低,实机延迟会比上表 AX630C 板实测略高,待真实 AX620Q 板补充)。
模型版本说明
- 非流式:AX650 / AX630C / AX620Q 均为 Pulsar2 7.0 编译(INT8 + smooth quant; AX630C / AX620Q 使用同一 AX620E/NPU2 full-core 模型,可在 AX630C 板直接运行,较 5.0 原版快约 2 倍)
- 流式:三芯均为 Pulsar2 7.0 编译
- 支持从源码复现:导出 ONNX、校准与三芯编译脚本见
ml-inory/sensevoice.axera(
model_convert/)
准确率
WER(Word-Error-Rate):2.0%
复现:
./download_datasets.sh
cd python
python test_wer.py -d aishell -g datasets/ground_truth.txt --language zh
技术讨论
- GitHub Issues(
AXERA-TECH/SenseVoice/ml-inory/sensevoice.axera) - QQ 群:139953715
- Downloads last month
- 23
Model tree for AXERA-TECH/SenseVoice
Base model
FunAudioLLM/SenseVoiceSmall