Qwen3-ASR-1.7B代码实例:Python调用API实现批量音频转文字脚本
Qwen3-ASR-1.7B代码实例Python调用API实现批量音频转文字脚本你是不是经常需要处理一堆音频文件把它们变成文字比如整理会议录音、处理采访素材或者给视频加字幕。手动听写不仅费时费力还容易出错。今天我就带你用代码来解决这个问题。我们不用手动上传网页而是写一个Python脚本直接调用Qwen3-ASR-1.7B模型的API实现一键批量把音频转成文字。整个过程自动化省时省力准确率还高。读完这篇文章你将学会如何用几行Python代码调用语音识别API。如何编写一个脚本自动处理文件夹里所有的音频文件。如何将识别结果保存成整齐的文本文件方便后续使用。1. 准备工作理解我们的工具在开始写代码之前我们先快速了解一下我们要用的“武器”——Qwen3-ASR-1.7B。简单来说它是一个非常厉害的“耳朵”能把听到的语音准确地转换成文字。它有几个特点特别适合我们做批量处理听得准拥有17亿参数识别精度高比它的小兄弟0.6B版本更擅长处理复杂内容。懂的多能识别52种语言和方言包括普通话、英语、日语甚至粤语、四川话等而且能自动判断你说的是哪种语言。不挑食常见的音频格式如MP3、WAV、FLAC它都能吃进去。有接口它提供了一个Web服务我们可以通过发送网络请求API调用的方式让它在后台默默工作这正是我们写脚本的基础。我们的目标就是写一个程序自动把音频文件“喂”给这个“耳朵”然后把“耳朵”听到的文字拿回来。2. 环境搭建与脚本编写我们不需要复杂的安装只需要一个能运行Python的环境和几个常用的库。2.1 安装必要的Python库打开你的命令行终端或CMD输入以下命令来安装我们需要的工具包pip install requestsrequests库是用来发送网络请求的是我们和Qwen3-ASR服务“对话”的桥梁。通常Python环境会自带但安装一下确保万无一失。2.2 编写核心脚本batch_asr.py接下来我们创建一个Python文件把整个逻辑写进去。我会逐段解释你可以跟着一步步来。第一步导入库和设置基础信息import os import requests import time from pathlib import Path # 1. 配置ASR服务地址 # 注意将 {实例ID} 替换为你实际的GPU实例ID ASR_API_URL https://gpu-{实例ID}-7860.web.gpu.csdn.net/transcribe # 2. 设置音频文件夹和输出文件夹 AUDIO_FOLDER ./audio_files # 存放待识别音频的文件夹 OUTPUT_FOLDER ./transcripts # 存放识别结果的文件夹 SUPPORTED_FORMATS (.wav, .mp3, .flac, .ogg, .m4a) # 创建输出文件夹如果不存在的话 Path(OUTPUT_FOLDER).mkdir(parentsTrue, exist_okTrue)ASR_API_URL这是最关键的一步需要你替换{实例ID}为你从CSDN星图镜像广场部署Qwen3-ASR-1.7B后获得的真实实例ID。这个地址就是服务的“门牌号”。AUDIO_FOLDER和OUTPUT_FOLDER分别定义你的音频文件放在哪里以及转写好的文本输出到哪里。你可以修改成你自己的路径。SUPPORTED_FORMATS定义脚本支持处理的音频格式。第二步编写核心的单个音频识别函数这个函数负责和API打交道处理一个文件。def transcribe_audio(file_path, languageauto): 调用Qwen3-ASR API识别单个音频文件 :param file_path: 音频文件的完整路径 :param language: 识别语言默认为auto自动检测 :return: 识别成功的文本失败则返回None try: with open(file_path, rb) as audio_file: files {audio_file: audio_file} data {language: language} print(f正在识别: {os.path.basename(file_path)}...) response requests.post(ASR_API_URL, filesfiles, datadata, timeout30) if response.status_code 200: result response.json() # 根据API返回的实际结构调整这里假设返回JSON中包含‘text’字段 transcribed_text result.get(text, ) detected_lang result.get(language, 未知) print(f 识别成功语言: {detected_lang}) return transcribed_text else: print(f 识别失败状态码: {response.status_code}, 响应: {response.text[:200]}) return None except requests.exceptions.RequestException as e: print(f 网络请求出错: {e}) return None except Exception as e: print(f 处理文件时发生未知错误: {e}) return None函数transcribe_audio接收文件路径和语言参数。它用requests.post方法以表单形式将音频文件和数据发送给API。成功后会解析返回的JSON数据这里假设返回数据中有text字段实际需根据API调整并打印成功信息。包含了完善的错误处理网络问题或API错误都会友好提示不会让脚本直接崩溃。第三步编写批量处理的主逻辑现在我们来写一个函数让它自动扫描文件夹处理所有音频。def batch_transcribe(): 批量处理音频文件夹中的所有支持文件 audio_path Path(AUDIO_FOLDER) # 获取所有支持的音频文件 audio_files [] for fmt in SUPPORTED_FORMATS: audio_files.extend(audio_path.glob(f*{fmt})) audio_files.extend(audio_path.glob(f*{fmt.upper()})) if not audio_files: print(f在文件夹 {AUDIO_FOLDER} 中未找到支持的音频文件。) return print(f找到 {len(audio_files)} 个待处理音频文件。) print( * 50) success_count 0 for audio_file in audio_files: # 为每个音频文件生成对应的文本输出路径 output_filename audio_file.stem .txt output_path Path(OUTPUT_FOLDER) / output_filename # 调用识别函数 text transcribe_audio(str(audio_file)) if text: # 将识别文本保存到文件 with open(output_path, w, encodingutf-8) as f: f.write(text) print(f 结果已保存至: {output_path}\n) success_count 1 else: print(f 文件 {audio_file.name} 处理失败已跳过。\n) # 添加短暂延迟避免对服务器造成过大压力 time.sleep(0.5) print( * 50) print(f批量处理完成成功: {success_count}/{len(audio_files)}) # 运行主函数 if __name__ __main__: batch_transcribe()函数batch_transcribe会扫描AUDIO_FOLDER文件夹找出所有后缀名符合要求的音频文件。然后遍历每个文件调用我们刚才写好的transcribe_audio函数进行识别。识别成功后以和音频文件同名的.txt格式将文字保存到OUTPUT_FOLDER。处理每个文件后稍微等待0.5秒是个好习惯避免请求过于频繁。最后会打印一个处理摘要。2.3 脚本使用方法放置音频将你需要转换的MP3、WAV等音频文件放入脚本中指定的./audio_files文件夹或你自定义的文件夹。修改配置用文本编辑器打开batch_asr.py将ASR_API_URL中的{实例ID}替换成你自己的。运行脚本在命令行中进入脚本所在目录运行python batch_asr.py查看结果稍等片刻所有转换好的文本文件就会出现在./transcripts文件夹里了。3. 进阶技巧与问题排查基本的脚本已经能工作了但我们可以让它更强大、更稳健。3.1 让脚本更强大进阶功能示例你可以根据需要修改或扩展上面的脚本。这里给你两个思路示例一识别指定语言的音频如果你的音频都是英语的可以手动指定语言以提高准确率和速度。只需修改调用函数的那一行# 在 batch_transcribe 函数中将 text transcribe_audio(str(audio_file)) # 改为例如指定英语 text transcribe_audio(str(audio_file), languageen)示例二处理子文件夹中的音频如果音频文件不是全放在根目录而是分布在不同的子文件夹里可以使用Path.rglob来递归查找# 替换 batch_transcribe 函数中查找文件的部分 audio_files [] for fmt in SUPPORTED_FORMATS: audio_files.extend(audio_path.rglob(f*{fmt})) # 注意这里是 rglob audio_files.extend(audio_path.rglob(f*{fmt.upper()}))同时保存结果时可能需要创建对应的子目录结构来保持原样。3.2 遇到问题怎么办常见排查步骤脚本跑不起来或者结果不对别急按下面几步检查检查API地址确认ASR_API_URL里的实例ID是否正确并且服务正在运行。你可以在浏览器中访问https://gpu-{实例ID}-7860.web.gpu.csdn.net/看看是否能打开Web界面。检查网络和权限确保你的运行环境可以访问这个URL。如果是本地运行检查网络如果在服务器运行检查防火墙或安全组设置。查看音频文件确认音频文件没有损坏并且放在正确的AUDIO_FOLDER路径下。脚本打印“找到0个文件”通常就是路径不对。查看API响应如果识别失败脚本会打印API返回的错误信息。这是最重要的调试线索。根据错误信息调整请求参数或处理逻辑。模拟请求测试你可以先用一个工具如Postman或curl命令直接测试API确保它本身工作正常。curl -X POST -F audio_file/path/to/your/audio.wav -F languageauto https://gpu-{实例ID}-7860.web.gpu.csdn.net/transcribe4. 总结通过这个简单的Python脚本我们成功将手动、重复的音频转文字工作自动化了。核心就是利用requests库调用Qwen3-ASR-1.7B提供的HTTP API。回顾一下关键点核心逻辑准备音频 - 通过POST请求发送给API - 接收并解析返回的文本 - 保存到文件。关键配置务必填写正确的ASR_API_URL。错误处理良好的错误处理能让脚本更健壮遇到网络波动或个别文件问题不会整体崩溃。灵活扩展这个脚本是一个起点。你可以根据需要添加更多功能比如识别完成后自动发送邮件、将结果导入数据库或者与你的其他工作流集成。自动化处理能解放你的双手把时间花在更有价值的内容分析和创作上。希望这个脚本能成为你处理音频资料的一个得力小助手。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。