版本更新介绍
前阵子公司一位大佬跟我推荐了一下 Qwen3-ASR,平时在公司忙成狗也没时间来测试,周末回家给整合了一下到 OddASR,并简单的测试了一下。
时间关系,没有做广泛的测试,但在有限的测试集下发现:
- 如果在一些特定的场景下,其效果的确非常优秀,比如一些电影里的音频用Qwen3-ASR跑,多人对话场景下也有非常惊艳的准确率;
- 如果是用我自己平时开会时用 小奥录音 给保存下来的音频来跑 Qwen3-ASR,效果甚至还不如 paraformer,具体原因待确认。
同时也简单的对Qwen3-ASR 的几个版本分别做了些测试,并且也尝试了用一些不同的参数组合,包括:dtype精度、Batch size等。
顺便也对 BaseASR 基类做了一下重构,以让整个代码看上去逻辑更简单、清晰,让代码的可阅读性更好一些,顺便让各个不同模型的ASR子类代码做了一下精简,让各个子类的功能可以更加原子一些(业务和逻辑相关的代码都独立出来了)。
除此之外就是一些零零碎碎的修改,大致如下:
- 实时转录的 WebSocket 连接现在可以指定模型名,让 小奥录音 的实时字幕也可以指定模型来进行转录。
- 动态切换不同类型的ASR模型时,特定情况下 CUDA OOM 的问题;
- 模型名称统一格式化;
- 在 Ubuntu下用snap安装 ffmpeg,导致找不到 ffprobe 的问题;
- 大白菜 大佬反馈的 manylinux 版本安装失败的问题;
- 其它。
快速开始使用 OddASR
- 版本:
v2.5.13 - 安装:
pip install oddasr - 运行:
oddasr - 演示:
http://localhost:9002 - 测试:
Python测试:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:9002/v1",api_key="dummy")
with open("audio.wav", "rb") as f:
result = client.audio.transcriptions.create(model="oddasr2-paraformer", response_format="text", file=f)
print(result.text)
curl测试:
curl -X POST http://localhost:9002/v1/audio/transcriptions \
-H "Content-Type: multipart/form-data" \
-F "file=@audio.wav" \
-F "model=oddasr-2" \
-F "response_format=text"
Qwen3-ASR-1.7B和Qwen3-ASR-0.6B两个模型都需要GPU才能跑得动,如果没有GPU的话,建议不要启用这两个模型。

以下是完整的更新列表说明。
一、重磅:新增 Qwen3-ASR 系列模型
本次更新的核心亮点是引入了 Qwen3-ASR 系列模型,提供三种规格:
| 模型 | 参数量 | 适用场景 |
|---|---|---|
| Qwen3-ASR-0.6B | 0.6B | 轻量部署,显存有限 |
| Qwen3-ASR-1.7B | 1.7B | 平衡性能与资源 |
| Qwen3-ASR-Flash 1.7B | 1.7B | 流式低延迟场景 |
显存优化亮点:
- 支持 FP16 半精度加载,显存占用直降约 45%
- 新增
ncpu参数控制 CPU 并行数量 - VAD / 标点 / 说话人模型默认改用 CPU,释放 GPU 空间给 ASR 主模型
- 降低 Qwen3 batch size(32 → 16),减少显存峰值
二、架构重构:更清晰、更可维护
1. ASR 模型注册表(asr_registry.py)
全新设计的模型注册机制,统一管理所有 ASR 后端的注册、实例化和生命周期。
2. BaseASR 参数封装
将 BaseASR 初始化时的大量散装参数重构为 参数类:
ModelConfig— 模型路径、设备等RuntimeConfig— 推理相关配置FeatureConfig— 特征提取配置
创建 ASR 实例时只需传入对应的类,告别参数爆炸。
3. 13 个 ASR 子类瘦身
所有子类的 __init__ 大幅精简,公共逻辑统一收敛到 BaseASR。
三、功能增强
1. WebSocket 实时转录支持指定模型
实时转录的 WebSocket 连接现在可以指定模型名,不再局限于默认模型。
2. 模型名映射
API 请求中的 model 参数支持多种写法,自动映射到内部模型:
| model 参数 | 映射到 |
|---|---|
oddasr2_paraformer | paraformer-funasr |
oddasr2_qwen3_06b | qwen3-asr-0.6b |
oddasr2_qwen3_17b | qwen3-asr-1.7b |
oddasr2_sensevoice | sensevoice |
oddasr2_moonshine | moonshine |
qwen3-asr-0.6b | 直接匹配 |
3. WebSocket 连接参数配置
{
"max_connections": 50,
"ping_interval": 30,
"ping_timeout": 300,
"idle_timeout": 120
}
四、稳定性与性能
1. CUDA OOM 自动重试
首次转录若触发 CUDA error: out of memory,自动调用 torch.cuda.empty_cache() 释放显存碎片后重试。
2. GPU 释放修复
修复离线转写销毁实例后 GPU 显存未释放的问题。
3. CUDA 设备修复
修复配置已改为 CUDA 但实际初始化仍在 CPU 的问题。启动时若配置为 CUDA 但环境无 GPU,会输出 WARNING 日志。
4. 本地模型优先加载
启动时强制优先加载本地模型,不再联网检查更新,加快启动速度。
五、Bug 修复
| 问题 | 修复 |
|---|---|
| ffprobe 错误导致转录失败 | 完善错误处理逻辑 |
| 未安装 ffmpeg 的错误提示不友好 | 优化提示信息 |
| 标点模型返回空报错 | 修复空值处理 |
| 实时转录 / 实时字幕功能异常 | 修复流式处理逻辑 |
| 动态切换模型导致内存泄漏 | 修复实例生命周期管理 |
六、运维改进
1. Docker Manylinux Wheel 构建
新增 Dockerfile.manylinux 和 build_manylinux.sh,支持在 manylinux 容器中构建兼容性 wheel:
docker run --rm -v "G:\oddmeta\oddasr:/workspace" \
-w /workspace quay.io/pypa/manylinux_2_28_x86_64 \
bash build_manylinux.sh
2. 日志轮转
日志文件改为每天一个,最多保留 30 天,避免磁盘占满。
七、文档更新
- 更新 API 指南,新增 Qwen3-ASR 模型说明
- 新增说话人分离配置文档(
oddasr-speaker-diarization-config.md) - 新增流式 ASR TTFT 配置文档(
oddasr-streaming-asr-ttft-config.md) - 完善 GPU 版本依赖说明(
requirements-gpu.txt)
OddASR — 兼容 OpenAI API 的开源 ASR 服务,支持离线转写与实时流式转录。
📦 PyPI: pip install oddasr
🐙 GitHub: https://github.com/oddmeta/oddasr