CAMPPlus 说话人声纹(Speaker Embedding)模型在 Axera 上的部署demo。
- Python 推理(axengine)
- C++ 推理
- 模型转换(导出 → 对分验证 → 真实音频校准 → Pulsar2 量化)
- AX650N
- 声纹识别
- 说话人聚类(可选)
- 模型:CAM++(
iic/speech_campplus_sv_zh_en_16k-common_advancedv1.0.0, 中英文大语料训练,feat_dim=80,embedding_size=192) - 输入:80 维 kaldi FBank 特征
feature [1,360,80](16 kHz 音频,mean_nor) - 输出:说话人 embedding
[1,192]
量化后的 campplus.axmodel(约 10.5 MB)与预编译的 C++ 可执行文件发布在
HuggingFace 仓库:campplus.AXERA。
campplus.AXERA/
|-- model_convert/ # 模型转换(导出 + 校准 + 量化)
| |-- campplus/
| | |-- export_campplus.py # ① 导出 onnx(onnxsim/onnxslim + 对分验证)
| | |-- cam_config.json # ③ pulsar2 量化配置(U16 + SmoothQuant)
| | |-- compile.sh # 一键量化编译
| | `-- speakerlab/ # CAMPPlus 模型定义与 FBank 特征
| `-- README.md
|-- python/ # Python 板端推理(axengine)
| |-- campplus_sdk/ # 声纹 SDK(inference + clustering)
| |-- example.py # 验证 / 提取 / 聚类 demo
| `-- requirements.txt
|-- cpp/ # C++ 板端推理源码
| |-- campplus_ax.cpp # 主程序(验证 / 提取两种模式)
| |-- src/ # engine_wrapper、wav_reader
| |-- third_party/ # kaldi-native-fbank + kissfft(源码包)
| |-- build_ax650.sh # 交叉编译
| |-- download_toolchains.sh# gcc 交叉编译器 + BSP SDK 下载
| `-- README.md
|-- requirements.txt # 转换依赖
`-- LICENSE
参考 model_convert/README.md:导出 ONNX
(onnxsim/onnxslim + torch/ONNX 对分 cosine ≥ 0.99)→ 真实音频 FBank 校准 →
pulsar2 build 量化。
# 创建虚拟环境(python3.10 验证)
conda create -n campplus python=3.10
conda activate campplus
# 下载模型
mkdir -p models && cd models
wget https://huggingface.co/AXERA-TECH/campplus.AXERA/resolve/main/models/campplus.axmodel
cd ..
# 安装 axengine(https://github.com/AXERA-TECH/pyaxengine/releases/latest)
pip install axengine-x.x.x-py3-none-any.whl
pip install -r python/requirements.txt
# 1:1 说话人验证
python3 python/example.py --models-dir models --wav1 a.wav --wav2 b.wav
# 声纹提取 + 说话人聚类
python3 python/example.py --models-dir models --audio meeting.wav --diarize本地交叉编译(产物 cpp/bin/campplus_ax650):
# 下载工具链(gcc 交叉编译器 + AX650 BSP SDK)
bash cpp/download_toolchains.sh
# 交叉编译
bash cpp/build_ax650.sh将整个工程目录拷贝到板端后,在板端工程根目录下执行(板端自带运行库, 无需编译环境):
export LD_LIBRARY_PATH=/soc/lib:${LD_LIBRARY_PATH:-}
# 1:1 说话人验证
./cpp/bin/campplus_ax650 --models-dir models --wav1 a.wav --wav2 b.wav
# 声纹提取(1.5s/0.75s 滑窗,保存 float32 [N,192])
./cpp/bin/campplus_ax650 --models-dir models --audio meeting.wav --output meeting.embed.bin或直接下载 HuggingFace 仓库中已编译好的 bin/campplus_ax650。
| 指标 | 数值 |
|---|---|
| NPU 单次推理([1,360,80] → [1,192]) | 2.559 ms(ax_run_model 实测) |
| C++ 端到端(fbank + NPU) | 28.2 ms/chunk |
| Python 端到端(torchaudio fbank + axengine) | 72.1 ms/chunk |
| 推理路径 | 耗时 | RTF |
|---|---|---|
| C++ | 2.620 s | 0.037 |
| Python | 6.71 s | 0.095 |
RTF = 推理耗时 / 音频时长(不含模型加载,RTF < 1.0 即可实时)
- 3D-Speaker
- 3D-Speaker-MT.axera
- campplus.AXERA(模型 + 预编译二进制)
- Magnetar — AXERA 模型部署 agent 工具
- GitHub issues
- QQ 群: 139953715