字
字节笔记本
2026年2月16日
Qwen-ASR:antirez 的纯 C 语音识别推理引擎
API中转
¥120
本文介绍 antirez(Redis 作者)开源的 Qwen-ASR 项目,一个纯 C 语言实现的 Qwen3-ASR 语音识别推理引擎,支持 0.6B 和 1.7B 模型,零依赖,CPU 上实现数倍实时速度。
项目简介
Qwen-ASR 是由 antirez(Salvatore Sanfilippo,Redis 作者)开发的纯 C 语言语音识别推理管道。该项目实现了对 Qwen3-ASR 0.6B 和 1.7B 模型的本地推理,除了 C 标准库和 BLAS 实现(macOS 上是 Accelerate,Linux 上是 OpenBLAS)外,零外部依赖。
截至目前,该项目在 GitHub 上已获得 313+ stars,主要由 C 语言(79.5%)和 Python(18.5%)编写。
核心特性
- 几乎零依赖:纯 C 实现,仅需 BLAS(macOS 用 Accelerate,Linux 用 OpenBLAS)
- 双模型支持:自动检测 Qwen3-ASR 0.6B 或 1.7B 模型
- 流式输出:Token 逐词打印到 stdout,即使是离线模式
- 流式模式:
--stream分块处理音频,带前缀回滚 - 监控模式:
--monitor在 stderr 显示实时诊断符号 - 语言控制:
--language强制指定目标语言(支持 30 种语言) - 提示词偏置:
--prompt注入系统提示以引导特定术语拼写 - 静音跳过:
--skip-silence跳过长时间静音段 - 内存映射权重:BF16 权重直接从 safetensors 文件 mmap,加载近乎瞬间
- 多格式输入:支持 WAV 文件和 stdin 管道输入
技术架构
模型管道
WAV -> 16kHz -> Mel Spectrogram -> Conv2D Stem -> Encoder -> Projection -> Decoder -> Tokens
模型规格对比
| 参数 | 0.6B | 1.7B |
|---|---|---|
| 编码器层数 | 18 | 24 |
| 编码器维度 | 896 | 1024 |
| 解码器层数 | 28 | 28 |
| 解码器维度 | 1024 | 2048 |
| GQA 头数 | 16 Q / 8 KV | 16 Q / 8 KV |
| 词表大小 | 151,936 | 151,936 |
| 权重格式 | BF16 | BF16 |
安装与构建
前置要求
- macOS(自带 Accelerate)或 Linux(需安装 OpenBLAS)
Linux 安装 OpenBLAS
bash
# Ubuntu/Debian
sudo apt install libopenblas-dev
# Fedora
sudo dnf install openblas-devel构建步骤
bash
# 克隆项目
git clone https://github.com/antirez/qwen-asr.git
cd qwen-asr
# 构建
make blas
# 下载模型(交互选择:small=0.6B, large=1.7B)
./download_model.sh快速开始
基本使用
bash
# 转录音频文件(Token 流式输出)
./qwen_asr -d qwen3-asr-0.6b -i audio.wav
# 通过 ffmpeg 管道任意格式
ffmpeg -i audio.mp3 -f s16le -ar 16000 -ac 1 - 2>/dev/null | \
./qwen_asr -d qwen3-asr-0.6b --stdin
# 流式模式(实时音频增量输出)
./qwen_asr -d qwen3-asr-0.6b -i long_recording.wav --stream高级用法
bash
# 指定语言
./qwen_asr -d qwen3-asr-0.6b -i audio.wav --language Chinese
# 使用提示词引导
./qwen_asr -d qwen3-asr-0.6b -i audio.wav --prompt "Preserve spelling: PostgreSQL, Redis, CUDA"
# 监控模式(实时诊断)
./qwen_asr -d qwen3-asr-0.6b -i audio.wav --stream --monitor
# 长文件分段处理
./qwen_asr -d qwen3-asr-0.6b -i lecture.wav -S 20
# 跳过静音段
./qwen_asr -d qwen3-asr-0.6b -i recording.wav --skip-silence实时网络流转录
bash
# 实时转录网络电台
curl -sL http://stream.live.vc.bbcmedia.co.uk/bbc_world_service | \
ffmpeg -i pipe:0 -ar 16000 -ac 1 -f s16le pipe:1 2>/dev/null | \
./qwen_asr -d qwen3-asr-0.6b --stdin --stream --monitor性能基准
在 Apple M3 Max(128GB RAM)上的测试结果:
离线模式(完整 + 分段)
| 音频 | 0.6B 推理时间 | 0.6B 实时倍速 | 1.7B 推理时间 | 1.7B 实时倍速 |
|---|---|---|---|---|
| 11s | 1.4s | 7.99x | 2.6s | 4.29x |
| 45s | 3.4s | 13.38x | 5.9s | 7.63x |
| 89s | 13.1s | 6.78x | 26.6s | 3.34x |
流式模式(45s 音频)
| 配置 | 0.6B 实时倍速 | 1.7B 实时倍速 |
|---|---|---|
| 缓存开启(默认) | 4.69x | 2.54x |
| 缓存关闭 | 2.05x | 1.31x |
内存需求
静态内存占用
| 组件 | 0.6B | 1.7B |
|---|---|---|
| safetensors mmap | 1.747 GiB | 4.376 GiB |
| 编码器 F32 权重 | 0.694 GiB | 1.183 GiB |
| 解码器堆内存 | 0.328 GiB | 1.313 GiB |
| 总计 | 2.770 GiB | 6.871 GiB |
推荐配置
- 60 秒以内音频:
-S 0(默认)获得最佳质量 - 大型预录文件:
-S 20或-S 30分段处理 - 实时连续音频:
--stream模式
C API 使用
项目提供简洁的回调式 C API:
c
#include "qwen_asr.h"
// 加载模型
qwen_ctx_t *ctx = qwen_load("qwen3-asr-0.6b");
// 设置 Token 回调
qwen_set_token_callback(ctx, my_token_handler, userdata);
// 可选:强制语言或设置提示词
qwen_set_force_language(ctx, "Chinese");
qwen_set_prompt(ctx, "Preserve spelling: PostgreSQL, Redis");
// 转录音频文件
char *text = qwen_transcribe(ctx, "audio.wav");
printf("%s\n", text);
free(text);
// 或从原始样本转录
char *text2 = qwen_transcribe_audio(ctx, samples, n_samples);
qwen_free(ctx);作者说明
antirez 特别说明:该项目明确不支持 MPS(Metal Performance Shaders)。原因是语音识别系统通常在远程 Linux 服务器上运行,添加 MPS 会过多关注 Apple 硬件。代码在 Apple 硬件上运行良好(NEON 优化),但不接受 MPS 相关的 PR。
项目链接
- GitHub 仓库:https://github.com/antirez/qwen-asr
- Qwen3-ASR 官方:https://github.com/QwenLM/Qwen3-ASR
- 许可证:MIT
分享: