当前位置: 首页 > news >正文

Qwen3-ASR 本地部署及体验

Qwen3-ASR 本地部署及体验

使用背景

平时需要使用到中文场景下的音频文本的转写,由于阿里云百炼平台能够提供的录音文件识别的模型为千问3-ASR-Flash-Filetrans千问3-ASR-Flash,前者能支持最长12小时录音,但该模型要求输入为公网可访问的音频文件URL,不支持直接上传本地文件,而后者虽然支持直接上传本地文件,但模型仅支持最长5分钟录音,均无法满足使用需求。考虑使用Qwen团队在一月底发布的Qwen3-ASR模型【blog】,在本地部署。

部署流程

设备信息

NVIDIA GeForce RTX 4060 Laptop (8GB VRAM)

1.模型&代码下载

# 在下载前,请先通过如下命令安装ModelScopepipinstallmodelscope# 下载完整模型库# qwen3-asr-0.6b 1.88GBmodelscope download--modelQwen/Qwen3-ASR-0.6B# qwen3-asr-1.7b 4.70GBmodelscope download--modelQwen/Qwen3-ASR-1.7B# 此处模型下载的地址为:"C:\Users\XX\.cache\modelscope\hub\models\Qwen\Qwen3-ASR-0___6B"# & "C:\Users\XX\.cache\modelscope\hub\models\Qwen\Qwen3-ASR-1___7B"
gitclone https://github.com/QwenLM/Qwen3-ASR.git# cd Qwen3-ASR# pip install -e .

2. 环境配置

conda create-nqwenasrpython=3.12-yconda activate qwenasr# 安装仅包含 transformers 后端支持的最小化版本pipinstall-Uqwen-asr# 启用 vLLM 后端以获得更快的推理速度和流式支持pipinstall-Uqwen-asr[vllm]

3. 推理代码

importtimeimporttorchimportlibrosaimportwarningsfromqwen_asrimportQwen3ASRModelprint("🚀 正在加载模型...")start_time=time.time()model=Qwen3ASRModel.from_pretrained(# r"C:\Users\XX\.cache\modelscope\hub\models\Qwen\Qwen3-ASR-1___7B",r"C:\Users\XX\.cache\modelscope\hub\models\Qwen\Qwen3-ASR-0___6B",dtype=torch.bfloat16,device_map="cuda:0",max_inference_batch_size=1,max_new_tokens=2048,)load_time=time.time()-start_timeprint(f"✅ 模型加载完成,耗时:{load_time:.2f}秒\n")# ================= 推理阶段 =================audio_path=r"C:\Users\XX\Videos\asr_test01.mp3"print(f"🎧 开始转写音频:{audio_path}")# 📏 获取音频真实时长try:audio_duration=librosa.get_duration(path=audio_path)exceptExceptionase:print(f"⚠️ 获取音频时长失败:{e},将使用占位值")audio_duration=1.0infer_start=time.time()results=model.transcribe(audio=audio_path,language=None,)infer_time=time.time()-infer_start total_time=time.time()-start_time# ================= 输出结果 =================print("\n"+"="*60)print("📋 转写结果")print("="*60)ifisinstance(results,list):fori,resinenumerate(results,1):print(f"\n【片段{i}】")print(f" 语言:{getattr(res,'language','auto-detected')}")print(f" 文本:{getattr(res,'text','')}")else:print(f"\n 语言:{getattr(results,'language','auto-detected')}")print(f" 文本:{getattr(results,'text','')}")# ================= 性能统计 =================rtf=infer_time/audio_durationifaudio_duration>0else0speedup=audio_duration/infer_timeifinfer_time>0else0print("\n"+"="*60)print("⏱️ 性能统计")print("="*60)print(f" 📼 音频时长:{audio_duration:.2f}秒")print(f" ⚡ 推理耗时:{infer_time:.2f}秒")print(f" 📉 实时率(RTF):{rtf:.2f}(推理时间 ÷ 音频时长,<1 表示快于实时)")print(f" 💾 模型加载:{load_time:.2f}秒")print(f" ⏱️ 总耗时:{total_time:.2f}秒")print("="*60)

4. 音频转写测试

没有安装FFmpeg,所以测试的都是mp3音频。

a.测试背景音乐大的音频

Qwen3-asr-1.7b表现:

除了音频最后部分背景音乐盖过人生的情况下把“无可奈何”识别成了“不可能”,其他地方都较为准确。

Qwen3-asr-0.6b表现:

推理时长更长,正确率差别不大。

b. 时长12分钟的视频

Qwen3-asr-1.7b表现:


后面尝试对时长超过3分钟的音频切割,按三分钟的长度分割成多个片段,分开转写后再汇总,推理耗时大大降低,而且准确率上升(肉眼判断)。

ifaudio_duration>CHUNK_LIMIT_MIN*60:print(f"⚠️ 音频超过{CHUNK_LIMIT_MIN}分钟,已启用切片推理模式...\n")chunk_size=int(CHUNK_LIMIT_MIN*60*sr)overlap_size=int(OVERLAP_SEC*sr)total_samples=len(audio_data)start_idx=0chunk_idx=1whilestart_idx<total_samples:end_idx=min(start_idx+chunk_size,total_samples)chunk_audio=audio_data[start_idx:end_idx]# 1️⃣ 创建临时 WAV 文件fd,temp_wav_path=tempfile.mkstemp(suffix="_chunk.wav")os.close(fd)# 立即关闭文件描述符,仅保留路径try:# 2️⃣ 写入临时文件 (librosa输出为float32 [-1,1],sf可直接写入)sf.write(temp_wav_path,chunk_audio,sr)print(f"🔄 正在处理第{chunk_idx}段 ({start_idx/sr:.1f}s ~{end_idx/sr:.1f}s)...")t0=time.time()# 3️⃣ 传入文件路径推理(库仅支持此格式)res=model.transcribe(audio=temp_wav_path,language=None)t1=time.time()# 4️⃣ 提取文本chunk_text=""ifhasattr(res,'text'):chunk_text=res.textelifisinstance(res,dict):chunk_text=res.get('text',str(res))else:chunk_text=str(res)all_chunks_text.append(chunk_text)print(f"✅ 第{chunk_idx}段完成 (耗时:{t1-t0:.2f}s):{chunk_text[:60]}...\n")finally:# 5️⃣ 推理结束立即删除临时文件,节省磁盘空间ifos.path.exists(temp_wav_path):os.remove(temp_wav_path)# 步进:块长度 - 重叠长度start_idx+=chunk_size-overlap_size chunk_idx+=1ifend_idx==total_samples:breakfull_text="\n".join(all_chunks_text)else:# 短音频直接传路径print("📦 音频较短,直接全量推理...")res=model.transcribe(audio=audio_path,language=None)full_text=res.textifhasattr(res,'text')elseres.get('text',str(res))


c.时长半小时的面试音频

Qwen3-asr-1.7b表现:

依旧尝试将音频分段处理,能够较好满足使用需求的。


5. 阿里云api接口调用

后续有需求会尝试,并且更新

参考:
  1. Qwen3-ASR & Qwen3-ForcedAligner现已开源:够稳定,能流式,多语言!
  2. [2601.21337] Qwen3-ASR Technical Report
  3. Qwen3-ASR-1.7B · 模型库
http://www.jsqmd.com/news/637807/

相关文章:

  • PyCharm安装(非常、非常简易)
  • 抉择之巅:从2029年回望2026年——企业可视化“战略分水岭”?
  • 霸州发到佛山海运发货流程
  • 2026年口感好的余姚四明山绿茶/四明山绿茶礼盒/春季四明山绿茶主流厂家对比评测 - 行业平台推荐
  • AIAgent权限爆炸式增长预警:2025年前未部署ABAC+属性加密的企业将面临合规熔断(NIST SP 800-213强制要求倒计时)
  • Phi-4-mini-reasoning推理模型Python入门实战:从零搭建你的第一个AI应用
  • NaViL-9B企业级应用:政务材料图像识别+政策条款精准定位案例
  • 斯坦福AI开发课程开源资源:GitHub仓库全整理
  • EXTREME-PARKOUR项目学习记录
  • 动手学深度学习——样式迁移
  • 2026年特级四明山绿茶礼盒/四明山春茶绿茶/春季四明山绿茶/四明山绿茶早芽稳定供货厂家推荐 - 品牌宣传支持者
  • AI写的AI写小说软件
  • Z-Image-Turbo_Sugar脸部Lora部署避坑:CUDA版本冲突与xinference兼容性解决方案
  • 深度学习模型演进:6个里程碑式CNN架构
  • Guohua Diffusion 企业级应用:基于卷积神经网络的风格迁移系统
  • Agent开发中的LangChain组件:Chain与Agent的关系
  • AIAgent记忆泄漏正在 silently 拖垮你的O1推理成本——从Python GC钩子到WASM沙箱隔离的3层防御体系
  • IgH EtherCAT 从入门到精通:第 2 章 环境搭建与编译安装
  • 动手学深度学习——样式迁移代码
  • 推荐1款家庭库存管理软件,建议收藏使用!
  • 万象视界灵坛实操手册:图像预处理Pipeline(Resize/Crop/Normalize)对齐CLIP标准
  • 可靠性如何嵌入产品开发流程
  • 忍者像素绘卷开源可部署:支持国产操作系统(OpenEuler)的兼容方案
  • AIAgent目标分解到底难在哪?5大认知陷阱正在拖垮你的智能体落地进度
  • unifolm-vla的数据训练recipe统计
  • Langchain .. 学习 --- LCEL和Runnable劳
  • DAMO-YOLO TinyNAS保姆级教学:EagleEye日志分析、错误排查与常见报错解决方案
  • 仿真模拟电击穿路径的模型:自定义形状、有限元Comsol相场法及PDE模块应用
  • 新能源极耳裁切产线:西门子S7-1500 PLC与基恩士变频器EtherNet/IP协议转换应用
  • 负载箱的故障模式与工程局限:从理想模型到现实约束的技术反思