Qwen3-ASR-1.7B代码实例:Python调用本地模型实现批量音频转文字脚本

Qwen3-ASR-1.7B代码实例:Python调用本地模型实现批量音频转文字脚本 Qwen3-ASR-1.7B代码实例Python调用本地模型实现批量音频转文字脚本你是不是也遇到过这样的烦恼手头有一堆会议录音、访谈音频或者视频素材需要把它们整理成文字稿。手动听写效率太低。用在线工具又担心隐私泄露而且文件一多上传下载也麻烦。今天我就带你用Python写一个脚本直接在你自己的电脑上调用强大的Qwen3-ASR-1.7B语音识别模型实现批量音频转文字。整个过程完全本地运行你的音频数据不会离开你的电脑安全又高效。这个1.7B版本的模型相比之前更小的版本在处理复杂的长句子、中英文混合内容时准确率有了质的飞跃。这篇文章我会手把手教你从环境搭建到代码编写最后实现一个能处理文件夹里所有音频文件的实用脚本。即使你之前没怎么接触过语音识别跟着步骤走也能轻松搞定。1. 项目与环境准备在开始写代码之前我们需要先把“舞台”搭好。这包括安装必要的软件库以及准备好核心的语音识别模型。1.1 核心工具介绍我们这次的主角是Qwen3-ASR-1.7B。你可以把它理解为一个非常聪明的“耳朵”和“大脑”的结合体。它专门负责听音频然后把听到的内容转换成文字。这个“1.7B”指的是它有17亿个参数可以简单理解为它的“知识量”和“理解能力”达到了一个很强的水平特别擅长处理那些句子很长、结构复杂或者中英文夹杂的语音。整个工作流程会依赖几个关键的Python库Transformers这是由Hugging Face提供的宝库我们通过它来加载和使用Qwen3-ASR模型。Torch (PyTorch)这是模型运行的计算引擎尤其是如果你有NVIDIA显卡它能利用GPU大大加快识别速度。SoundFile / Librosa这些是音频处理库负责读取你硬盘上的MP3、WAV等各种格式的音频文件并把它们转换成模型能理解的数字信号。1.2 一步到位环境安装打开你的终端或命令提示符我们用一个命令把需要的包都安装好。建议先创建一个独立的Python虚拟环境避免包版本冲突。# 安装核心依赖 pip install transformers torch soundfile librosa如果你的电脑有NVIDIA显卡并且已经安装了CUDA那么torch会自动安装GPU版本。安装完成后你可以通过下面的代码快速验证一下主要库是否就绪import torch print(fPyTorch版本: {torch.__version__}) print(fGPU是否可用: {torch.cuda.is_available()}) if torch.cuda.is_available(): print(fGPU设备: {torch.cuda.get_device_name(0)})2. 编写批量转写脚本环境准备好后我们就可以动手编写核心脚本了。我们的目标是指定一个文件夹脚本能自动找出里面所有的音频文件然后逐个转写成文字并把结果保存下来。2.1 脚本核心代码创建一个新的Python文件比如叫做batch_asr.py然后把下面的代码复制进去。我会逐段为你解释。import os from pathlib import Path import torch from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor import soundfile as sf import librosa class BatchAudioTranscriber: 批量音频转文字工具类 基于 Qwen3-ASR-1.7B 模型 def __init__(self, model_nameQwen/Qwen3-ASR-1.7B, devicecuda): 初始化转写器加载模型和处理器 Args: model_name: 模型名称默认为 Qwen3-ASR-1.7B device: 推理设备cuda 或 cpu print(f正在加载模型 {model_name}...) # 自动选择设备如果指定了cuda但不可用则回退到cpu if device cuda and not torch.cuda.is_available(): print(警告CUDA不可用将使用CPU进行推理速度较慢) device cpu self.device device self.torch_dtype torch.float16 if device cuda else torch.float32 # 加载模型和处理器 self.model AutoModelForSpeechSeq2Seq.from_pretrained( model_name, torch_dtypeself.torch_dtype, low_cpu_mem_usageTrue, use_safetensorsTrue ).to(self.device) self.processor AutoProcessor.from_pretrained(model_name) print(模型加载完成) def transcribe_audio(self, audio_path): 转写单个音频文件 Args: audio_path: 音频文件路径 Returns: str: 识别出的文本 try: # 使用librosa加载音频自动重采样到模型需要的16kHz speech_array, sampling_rate librosa.load(audio_path, sr16000, monoTrue) # 准备模型输入 inputs self.processor( audiospeech_array, sampling_ratesampling_rate, return_tensorspt ).to(self.device, dtypeself.torch_dtype) # 生成识别结果 with torch.no_grad(): generated_ids self.model.generate(**inputs, max_new_tokens1024) # 解码识别结果 transcription self.processor.batch_decode( generated_ids, skip_special_tokensTrue )[0] return transcription except Exception as e: print(f处理文件 {audio_path} 时出错: {e}) return None def transcribe_folder(self, folder_path, output_filetranscriptions.txt): 批量转写文件夹内的所有音频文件 Args: folder_path: 包含音频文件的文件夹路径 output_file: 输出文本文件路径 folder Path(folder_path) # 支持的音频格式 audio_extensions {.wav, .mp3, .m4a, .ogg, .flac, .aac} # 查找所有音频文件 audio_files [] for ext in audio_extensions: audio_files.extend(folder.glob(f*{ext})) audio_files.extend(folder.glob(f*{ext.upper()})) if not audio_files: print(f在文件夹 {folder_path} 中未找到支持的音频文件) return print(f找到 {len(audio_files)} 个音频文件开始批量转写...) results [] for i, audio_file in enumerate(audio_files, 1): print(f[{i}/{len(audio_files)}] 正在处理: {audio_file.name}) transcription self.transcribe_audio(str(audio_file)) if transcription: results.append({ file: audio_file.name, text: transcription }) print(f 转写成功: {transcription[:100]}...) # 只打印前100字符预览 else: print(f 转写失败) # 保存结果到文件 self._save_results(results, output_file) print(f\n批量转写完成结果已保存至: {output_file}) def _save_results(self, results, output_file): 将转写结果保存到文本文件 with open(output_file, w, encodingutf-8) as f: for item in results: f.write(f文件: {item[file]}\n) f.write(f转写内容:\n{item[text]}\n) f.write(- * 50 \n\n) # 使用示例 if __name__ __main__: # 初始化转写器自动使用GPU如果可用 transcriber BatchAudioTranscriber(devicecuda) # 指定你的音频文件夹路径 audio_folder ./my_audio_files # 修改为你的文件夹路径 # 开始批量转写 transcriber.transcribe_folder(audio_folder, output_file转写结果.txt)2.2 代码要点解析这段代码看起来有点长但其实结构很清晰主要分为三个部分初始化 (__init__)就像打开一个工具箱这里负责把Qwen3-ASR模型这个“核心工具”从网上下载并加载到你的电脑内存或显卡里。torch_dtypetorch.float16这个设置是为了在GPU上节省显存让1.7B的大模型也能在消费级显卡上运行。单文件转写 (transcribe_audio)这是核心的“工作单元”。它做三件事读取音频用librosa库读取文件并统一转换成模型需要的格式单声道16000Hz采样率。送入模型把处理好的音频数据喂给模型。输出文字把模型“思考”后产生的文字解码出来。批量处理 (transcribe_folder)这是脚本的“大脑”。它会自动扫描你指定文件夹里所有常见格式的音频文件如.mp3, .wav等然后一个一个地调用上面的“工作单元”进行处理最后把所有结果整理好保存到一个文本文件里。3. 运行与实战演示脚本写好了我们来让它真正跑起来看看效果。3.1 准备音频并运行脚本首先在你放batch_asr.py脚本的同一个目录下创建一个名为my_audio_files的文件夹或者你也可以在代码里修改audio_folder变量指向任何已有的文件夹。然后放几个你想要转写的音频文件进去比如meeting.mp3、interview.wav。接着在终端里运行这个脚本python batch_asr.py你会看到类似下面的输出这表明模型正在加载和运行正在加载模型 Qwen/Qwen3-ASR-1.7B... 模型加载完成 找到 3 个音频文件开始批量转写... [1/3] 正在处理: meeting.mp3 转写成功: 好的我们开始今天的周会。首先回顾一下上周各项目的进展。小李你先说一下A客户那边的情况... [2/3] 正在处理: interview.wav 转写成功: Q: Could you briefly introduce your research background? A: Sure. My research primarily focuses on... [3/3] 正在处理: presentation.m4a 转写成功: 接下来我们看第三季度的数据报表。从chart上可以明显看出我们的用户增长率在七月份达到了一个peak... 批量转写完成结果已保存至: 转写结果.txt3.2 查看与使用结果处理完成后脚本会在当前目录生成一个转写结果.txt文件。用记事本或任何文本编辑器打开它你会看到结构清晰的转写内容文件: meeting.mp3 转写内容: 好的我们开始今天的周会。首先回顾一下上周各项目的进展。小李你先说一下A客户那边的情况... -------------------------------------------------- 文件: interview.wav 转写内容: Q: Could you briefly introduce your research background? A: Sure. My research primarily focuses on... --------------------------------------------------这个文件就是你的最终成果。你可以直接复制里面的文字到文档里编辑或者用于其他分析。整个过程你的音频数据从未离开过你的电脑。4. 进阶技巧与问题排查基本的脚本能工作后我们再来看看如何让它更好用以及遇到问题怎么办。4.1 让脚本更实用添加进度与格式支持最初的脚本已经能用但我们可以稍作改进让它更友好。比如增加一个进度条并且更灵活地处理各种音频格式。你可以用Python的tqdm库来添加进度条。pip install tqdm然后修改transcribe_folder方法中的循环部分from tqdm import tqdm # ... 在 transcribe_folder 方法内替换原来的for循环 ... print(f找到 {len(audio_files)} 个音频文件开始批量转写...) results [] for audio_file in tqdm(audio_files, desc转写进度): transcription self.transcribe_audio(str(audio_file)) if transcription: results.append({file: audio_file.name, text: transcription}) # ... 后续保存代码不变 ...4.2 常见问题与解决方法在运行过程中你可能会遇到下面几个常见问题问题显存不足 (CUDA out of memory)原因1.7B模型在GPU上运行需要约4-5GB显存。如果你的显卡显存较小比如只有4GB可能会报错。解决在初始化BatchAudioTranscriber时将device参数改为cpu。虽然速度会慢一些但肯定能运行。transcriber BatchAudioTranscriber(devicecpu) # 强制使用CPU问题无法加载模型或下载太慢原因第一次运行需要从Hugging Face下载模型文件约3.4GB如果网络不好会失败或很慢。解决使用国内镜像源在运行脚本前设置环境变量# Linux/macOS export HF_ENDPOINThttps://hf-mirror.com # Windows (命令行) set HF_ENDPOINThttps://hf-mirror.com或者在代码中指定镜像地址需要修改 transformers 的下载逻辑较为复杂优先推荐方法1。问题某些音频文件识别效果差原因音频质量太差如背景噪音大、说话人距离麦克风远、方言口音重、或语速过快。解决对于重要的音频可以先用音频编辑软件如Audacity进行降噪、音量标准化等预处理。Qwen3-ASR-1.7B对清晰、标准的普通话和英语支持最好。5. 总结通过这个项目我们完成了一个非常实用的本地批量音频转文字工具。回顾一下整个过程和要点核心价值我们利用Qwen3-ASR-1.7B这个强大的本地语音识别模型实现了隐私安全、离线可用、批量高效的音频转文字功能。它特别适合处理需要保密的会议录音、大量的访谈素材或个人视频字幕制作。关键步骤整个过程分为三步——安装环境、编写脚本、运行处理。脚本的核心是一个类它封装了模型加载、单文件转写和批量处理的所有逻辑结构清晰易于理解和修改。效果优势1.7B版本模型在长句子、复杂逻辑和中英文混合场景下的识别准确率显著优于更小的版本生成的文本标点更合理语义更连贯实用性大大增强。灵活扩展这个脚本只是一个起点。你可以基于它轻松地扩展出更多功能比如将结果自动保存为Word或Excel格式。增加对视频文件提取音频的支持。开发一个带有图形界面的小软件。将转写服务集成到你的其他自动化工作流中。最重要的是整个流程完全在本地完成你完全掌控自己的数据。希望这个脚本能成为你处理音频资料的高效助手。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。