OddASR 更新:新增Qwen3-ASR三大模型、架构重构、性能飞跃

版本更新介绍

前阵子公司一位大佬跟我推荐了一下 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测试:

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测试:

python 复制代码
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 连接参数配置

json 复制代码
{
  "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.manylinuxbuild_manylinux.sh,支持在 manylinux 容器中构建兼容性 wheel:

bash 复制代码
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

相关推荐
verbaWP6 天前
如何提升中文语音识别准确率?Speech Seaco Paraformer热词设置详细步骤
语音识别·asr·星图gpu·中文语音转写
iwgh14 天前
OddASR v2.5.5 版本更新:支持指定最大说话人分离数量、优化时延
语音识别·asr·语音转写·stt·oddasr
没刮胡子1 个月前
AI完全离线的ASR语音识别+TTS语音合成+大模型对话
人工智能·ai·语音识别·tts·asr
iwgh1 个月前
小奥录音更新速递:v0.1.6 发布,音字对齐、转录体验大升级!
asr·语音转写·oddasr·oddminutes·小奥录音
zhuweisky2 个月前
视频会议是如何实现AI会议纪要功能的?
asr·视频会议·语音转文字·会议纪要
水龙吟啸2 个月前
机器学习安全:图像多分类任务的测试时对抗样本转移攻击实战(一)
机器学习·图像分类·安全性测试·asr·混淆矩阵·auc·转移攻击
云山雾村3 个月前
零基础也能用!科哥版Paraformer语音识别WebUI保姆级教程
语音识别·asr·星图gpu·中文语音转文字
柴犬小管家3 个月前
秒懂教程:Qwen3-ASR语音识别服务快速入门
语音识别·ai应用·qwen3-asr
瓷tun3 个月前
小白也能懂:Qwen3-ASR-0.6B语音识别入门教程
语音识别·asr·qwen3·星图gpu