外观
sherpa-asr-offline-server
基于 sherpa-onnx 与 Zipformer Transducer / SenseVoice 等多语种语音模型的本地化、高性能离线 ASR 独立 HTTP 服务。
- 默认模型:
sherpa-onnx-zipformer-multi-zh-hans-2023-9-2(高精度多方言中文/普通话离线识别)。 - 模型支持:
sherpa-onnx-zipformer-multi-zh-hans-2023-9-2:Zipformer Transducer 中文多方言离线识别模型sherpa-onnx-zipformer-zh-en-2023-11-22:Zipformer Transducer 中英双语离线识别模型sherpa-onnx-sense-voice:SenseVoice 多语种(中/英/粤/日/韩)大模型,内置 ITN、语种/情绪识别与声音事件检测sherpa-onnx-paraformer-zh:Paraformer 离线识别模型
目录结构
onnx-platform/sherpa-asr-offline-server/
├── CMakeLists.txt # CMake 构建文件
├── build.ps1 # Windows x64 一键构建与安装
├── build.sh # Linux x64 构建脚本
├── config.json # 服务配置文件
├── README.md # 本手册
├── request-asr.js # Node.js 测试请求脚本
└── src/ # C++17 源码目录
├── main.cpp # 入口函数
├── config.h / .cpp # 配置管理与多模型解析
├── logging.h / .cpp # 日志输出
├── types.h # 数据类型定义
├── text_utils.h / .cpp # SenseVoice 标签解析与纯文本过滤
├── audio_decoder.h / .cpp # WAV/PCM/FFmpeg 音频解析
├── offline_asr_service.h / .cpp # 离线识别引擎与并发池
├── http_protocol.h / .cpp # HTTP 协议解析
└── http_server.h / .cpp # 多线程非阻塞 Socket 服务端构建与安装
Windows (MSVC x64)
在 onnx-platform/sherpa-asr-offline-server/ 下运行:
powershell
.\build.ps1构建成功后,可执行文件与运行时依赖动态库将自动安装至 target/win_x64/。
Linux (x64)
bash
chmod +x ./build.sh
./build.sh构建成功后,安装至 target/linux_x64/。
运行服务
进入安装目录运行服务:
powershell
cd onnx-platform\sherpa-asr-offline-server\target\win_x64
.\sherpa_asr_offline_server.exe默认监听端口为 10095。
HTTP 接口说明
1. 健康检查
- 请求:
GET /health或GET /healthz - 返回示例:json
{ "code": 0, "msg": "ok", "data": { "status": "ok", "service": "sherpa-asr-offline-server", "activeModel": "sherpa-onnx-zipformer-multi-zh-hans-2023-9-2", "provider": "cpu", "sampleRate": 16000, "uptimeSeconds": 36, "totalRequests": 5 } }
2. 离线识别接口
- 请求:
POST /asr或POST /recognize - 支持内容类型:
multipart/form-data(推荐):file或audio:音频文件二进制(支持.wav、.mp3等)language(可选):语种代码,默认auto(SenseVoice 模型支持zh、en、yue、ja、ko)use_itn(可选):是否启用逆文本归一化,默认truehotwords(可选):热词列表
application/json:audioBase64:音频文件 base64 字符串audioPath:本地音频绝对路径language、useItn、hotwords
audio/wav/application/octet-stream:直接发送音频原始二进制流,参数通过 URL Query 传递(如POST /asr?language=zh&use_itn=true)。
- 返回示例:json
{ "code": 0, "msg": "ok", "data": { "cleanText": "甚至出现交易几乎停滞的情况。", "text": "甚至出现交易几乎停滞的情况。", "lang": "", "emotion": "", "event": "", "durationMs": 3120, "processTimeMs": 68.5, "rtf": 0.022, "timestamps": [0.12, 0.35, 0.58], "tokens": ["甚至", "出现", "交易", "几乎", "停滞", "的", "情况"] } }
3. OpenAI 兼容音频转录接口
- 请求:
POST /v1/audio/transcriptions - 格式:
multipart/form-data(包含file参数) - 返回示例:json
{ "text": "甚至出现交易几乎停滞的情况。" }
验证与调用示例
通过自带 Node.js / Bun 脚本测试:
bash
node request-asr.js指定音频文件与服务地址:
bash
node request-asr.js ../models/sherpa-onnx-zipformer-multi-zh-hans-2023-9-2/test_wavs/0.wav http://127.0.0.1:10095