SenseVoice / README.md
inoryQwQ's picture
Upload README.md with huggingface_hub
6ef7cf8 verified
|
Raw
History Blame Contribute Delete
7.97 kB
metadata
license: mit
language:
  - zh
  - en
  - yue
  - ja
  - ko
pipeline_tag: automatic-speech-recognition
base_model:
  - FunAudioLLM/SenseVoiceSmall

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.axmodelstreaming_sensevoice.axmodel(流式)、 am.mvntokens.txtchn_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

DEMO_Gradio

C++ 示例

预编译产物:cpp/ax650/cpp/ax630c/cpp/ax620q/(各自包含 test_sensevoiceasr_serverlibax_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.axeracpp/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.axeramodel_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