C++ ASR API on Axera platforms
支持平台:
- AX650
- AX630C
- AX620Q
- AX8850
支持模型:
- Whisper-Tiny
- Whisper-Base
- Whisper-Small
- Whisper-Turbo
- Sensevoice
可从Release页面下载预编译库
使用示例:
#include "ax_asr_api.h"
AX_ASR_HANDLE handle = AX_ASR_Init(AX_WHISPER_TINY, "./models-ax650");
if (!handle) {
return -1;
}
char* result = NULL;
int ret = AX_ASR_RunFile(handle, "demo.wav", "zh", &result);
if (ret != AX_ASR_SUCCESS) {
AX_ASR_Uninit(handle);
return -1;
}
AX_ASR_Free(result);
AX_ASR_Uninit(handle);说明:
model_path传模型根目录,例如./models-ax650AX_ASR_RunFile支持wav和mp3- 返回字符串必须使用
AX_ASR_Free释放 - 同一个
AX_ASR_HANDLE不建议被多个线程并发调用
安装huggingface_hub
pip3 install -U huggingface_hub运行下载脚本:
bash download_models.sh目前在Ubuntu 22.04上编译成功,
需要安装CMake >= 3.13
sudo apt install cmake build-essential- AX650/AX630C(aarch64)
从此处获取aarch64交叉编译器
将其添加到PATH:
export PATH=$PATH:path of gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin- AX620Q(arm-uclibc-linux) 从此处获取
export PATH=$PATH:path of arm-AX620E-linux-uclibcgnueabihf/binbash download_bsp.sh- AX650
bash build_ax650.sh编译完成后的产物在install/ax650下
- AX630C
bash build_ax630c.sh编译完成后的产物在install/ax630c下
- AX620Q
bash build_ax620q.sh编译完成后的产物在install/ax620q下
- AX8850
bash build_ax8850_aarch64.sh编译完成后的产物在install/ax8850_aarch64下
暂不支持
- BUILD_TESTS 默认OFF
负责编译tests目录下的单元测试,可执行程序生成在install/ax650或install/ax630c下
bash build_ax650.sh -DBUILD_TESTS=ON- LOG_LEVEL_DEBUG 默认OFF
打印源码中的调试信息
bash build_ax650.sh -DLOG_LEVEL_DEBUG=ON- BUILD_SERVER 默认ON
编译asr_server
bash build_ax650.sh -DBUILD_SERVER=ON服务端默认提供以下接口:
POST /v1/audio/transcriptionsGET /v1/modelsGET /healthz
当 asr_server 启动时传入 --api_key your_token,客户端需要携带:
Authorization: Bearer your_token如果不传 --api_key,则不启用鉴权。
原生模型名:
sensevoicewhisper_tinywhisper_basewhisper_smallwhisper_turbo
兼容别名:
gpt-4o-transcribe->sensevoicegpt-4o-mini-transcribe->sensevoicewhisper-1->whisper_turbo
请求类型: multipart/form-data
请求字段:
| 字段 | 必填 | 说明 |
|---|---|---|
file |
是 | 音频文件,当前支持 .wav 和 .mp3 |
model |
是 | 见上面的模型名 |
language |
否 | sensevoice 默认 auto,whisper_* 默认 en |
response_format |
否 | json、text、verbose_json,默认 json |
语言说明:
sensevoice:auto、zh、en、yue、ja、kowhisper_*: 语言列表由对应模型配置文件决定,服务端会校验非法值
response_format 返回约定:
json:{"text":"..."}text: 纯文本响应verbose_json: 当前返回text、model、language、request_id
注意:
- 当前
verbose_json还不包含segments、时间戳或说话人信息 - 当前接口定位是“单文件同步转写”
curl http://127.0.0.1:8080/v1/audio/transcriptions \
-H "Authorization: Bearer your_token" \
-F file="@demo.wav" \
-F model="sensevoice" \
-F language="zh" \
-F response_format="json"成功响应:
{
"text": "甚至出现交易几乎停滞的情况"
}verbose_json 响应示例:
{
"language": "auto",
"model": "sensevoice",
"request_id": "axasr-1780307147723-0",
"text": "甚至出现交易几乎停滞的情况"
}错误响应示例:
{
"error": {
"message": "Unsupported language \"invalid_lang\" for model whisper_tiny.",
"type": "invalid_request_error",
"param": "language",
"code": 400
}
}常见状态码:
| 状态码 | 含义 |
|---|---|
200 |
成功 |
400 |
参数错误、文件格式错误、语言不支持 |
401 |
缺少或错误的 Bearer Token |
404 |
路径不存在或模型不可用 |
413 |
上传文件超过服务端限制 |
500 |
服务端内部错误 |
用于查询当前服务暴露的模型列表。
示例:
curl http://127.0.0.1:8080/v1/models \
-H "Authorization: Bearer your_token"用于健康检查,不要求鉴权。
示例响应:
{
"auth_enabled": true,
"status": "ok"
}仓库提供了更正式的 OpenAPI 3 描述文件:
说明:
- 该文件描述的是当前仓库已实现能力,不包含尚未支持的流式识别、时间戳、分段或说话人能力
verbose_json在当前实现中只返回text、model、language、request_id
如果本地安装了 Swagger UI、Redoc 或其它 OpenAPI 工具,可以直接加载 docs/openapi.yaml 查看。
头文件: include/ax_asr_api.h
动态库: lib/libax_asr_api.so
AX_ASR_HANDLE AX_ASR_Init(AX_ASR_TYPE_E asr_type, const char* model_path);
void AX_ASR_Uninit(AX_ASR_HANDLE handle);
int AX_ASR_RunFile(AX_ASR_HANDLE handle, const char* wav_file, const char* language, char** result);
int AX_ASR_RunPCM(AX_ASR_HANDLE handle, float* pcm_data, int num_samples, int sample_rate, const char* language, char** result);
void AX_ASR_Free(char* result);| 返回码 | 含义 |
|---|---|
AX_ASR_SUCCESS |
成功 |
AX_ASR_ERR_INVALID_ARGUMENT |
参数非法 |
AX_ASR_ERR_INIT_FAILED |
初始化失败 |
AX_ASR_ERR_AUDIO_LOAD_FAILED |
音频加载失败 |
AX_ASR_ERR_RUN_FAILED |
推理失败 |
AX_ASR_ERR_NO_MEMORY |
内存分配失败 |
model_path传模型根目录,不是子目录AX_ASR_RunFile读取文件路径;AX_ASR_RunPCM适合上层自行管理音频流AX_ASR_RunPCM的输入为单声道floatPCM,范围-1.0 ~ 1.0- 返回文本由库内分配,调用方必须使用
AX_ASR_Free - 同一个
AX_ASR_HANDLE不建议并发调用;如果需要多并发,请创建多个 handle
./install/ax650/main -a demo.wav -t whisper_tiny -p ./models-ax650 -l zhUsage:
./install/ax8850_aarch64/main --help
usage: ./install/ax8850_aarch64/main --audio=string --model_type=string [options] ...
options:
-a, --audio audio file, support wav and mp3 (string)
-t, --model_type Choose from whisper_tiny, whisper_base, whisper_small, whisper_turbo, sensevoice (string)
-p, --model_path model path which contains axmodel (string [=./models-ax650])
-l, --language en, zh (string [=zh])
-?, --help print this message
./install/ax8850_aarch64/asr_server --port 8080 --model_path ./models-ax650 --api_key your_tokenUsage:
./install/ax8850_aarch64/asr_server --help
usage: ./install/ax8850_aarch64/asr_server [options] ...
options:
-p, --port On which port to run the server (int [=8080])
-m, --model_path model path which contains axmodel (string [=./models-ax650])
-k, --api_key Bearer token required by the server. Empty means auth disabled. (string [=])
--payload_limit_mb Maximum accepted upload size in MiB (int [=25])
--read_timeout_sec Socket read timeout in seconds (int [=120])
--write_timeout_sec Socket write timeout in seconds (int [=120])
-?, --help print this message
cd scripts
pip install openai
python test_asr_server.py --ip 10.126.33.146 --port 8080 --audio ../demo.wav -m sensevoice -l zh --api-key your_token更多参数见:
python test_asr_server.py --help以下为 tests/ 下单元测试的使用示例和说明:
test_whisper_tiny: 加载 whisper tiny 模型,打印demo.wav的识别结果test_whisper_base: 加载 whisper base 模型,打印demo.wav的识别结果test_whisper_small: 加载 whisper small 模型,打印demo.wav的识别结果test_whisper_turbo: 加载 whisper turbo 模型,打印demo.wav的识别结果test_sensevoice: 加载 sensevoice 模型,打印demo.wav的识别结果
RTF(Real Time Factor)为推理时间除以音频时长,越小表示越快
WER(Word Error Rate)为词错误率,在私有数据集上测试
- RTF
| asr_type | AX650 | AX630C |
|---|---|---|
| Whisper-Tiny | 0.0373 | |
| Whisper-Base | 0.0668 | 0.3849 |
| Whisper-Small | 0.2110 | |
| Whisper-Turbo | 0.4372 | |
| Sensevoice | 0.0364 | 0.1170 |
- WER
| asr_type | |
|---|---|
| Whisper-Tiny | 0.24 |
| Whisper-Base | 0.18 |
| Whisper-Small | 0.11 |
| Whisper-Turbo | 0.06 |
| Sensevoice | 0.02 |
编译产物包含 include/ax_asr_api.h 和 lib/libax_asr_api.so
- Github issues
- QQ 群: 139953715
This project is licensed under the MIT License - see the LICENSE file for details.