尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Python入门实践:编写你的第一个调用Qwen3-ASR-0.6B的语音识别脚本

Python入门实践:编写你的第一个调用Qwen3-ASR-0.6B的语音识别脚本 Python入门实践编写你的第一个调用Qwen3-ASR-0.6B的语音识别脚本你是不是觉得语音识别技术很酷但又觉得它离自己很远需要复杂的算法和庞大的模型今天我们就来打破这个认知。我将带你用Python写一个简单的脚本从录制自己的声音开始到最终让AI“听懂”你说的话整个过程只需要几十行代码。这个实践项目非常适合Python新手。你不需要懂深度学习也不需要搭建复杂的开发环境。我们会从最基础的安装库开始一步步完成录音、调用API、获取识别结果的全过程。用到的核心模型是Qwen3-ASR-0.6B一个在星图GPU平台上可以方便调用的语音识别模型。跟着做下来你不仅能收获一个能跑起来的语音识别程序还能对如何调用AI服务有一个直观的理解。1. 准备工作搭建你的Python环境在开始写代码之前我们需要确保手头的“工具”齐全。整个过程就像搭积木我们先得把每一块积木准备好。1.1 检查Python环境首先确认你的电脑上已经安装了Python。打开你的命令行工具Windows上是CMD或PowerShellMac或Linux上是终端输入以下命令python --version或者python3 --version如果看到了类似Python 3.8.10这样的版本号说明Python已经安装好了。建议使用Python 3.6或更高的版本。如果提示“命令未找到”你需要先去Python官网下载并安装它。1.2 安装必要的Python库我们的脚本需要用到两个主要的库pyaudio用于录音requests用于调用网络API。我们使用pip这个Python包管理工具来安装它们。在命令行中依次输入以下两条命令pip install pyaudio pip install requests如果你使用的是Mac安装pyaudio时可能会遇到一点小麻烦因为它依赖一些系统音频库。你可以尝试用下面的命令安装pip install pyaudio如果失败可以试试先安装portaudiobrew install portaudio需要先安装Homebrew然后再安装pyaudio。在Windows上通常直接pip install就能成功。如果遇到问题可以尝试从这个网站下载对应你Python版本和系统位数的.whl文件然后用pip install 文件名.whl的方式安装。安装成功后可以简单验证一下。在命令行中进入Python交互模式输入python回车然后尝试导入它们import pyaudio import requests print(“库导入成功”)如果没有报错说明一切就绪。2. 第一步用Python录制一段语音让电脑“听见”我们的声音是语音识别的第一步。我们会用pyaudio库来完成录音并把声音保存成一个WAV格式的文件。WAV是一种常见的、未压缩的音频格式很适合后续处理。2.1 编写录音函数创建一个新的Python文件比如叫做voice_recognition.py。我们先来写录音的部分。import pyaudio import wave import sys def record_audio(filename, record_seconds5): 录制一段音频并保存为WAV文件。 参数: filename: 保存的文件名例如 my_voice.wav record_seconds: 想要录制的时长默认5秒 # 音频参数 chunk 1024 # 每次读取的音频数据块大小 sample_format pyaudio.paInt16 # 采样格式16位整型 channels 1 # 单声道 fs 16000 # 采样率16000 Hz。很多语音识别模型要求16kHz。 p pyaudio.PyAudio() # 创建PyAudio对象 print(f“开始录音请说话...时长{record_seconds}秒”) # 打开音频流 stream p.open(formatsample_format, channelschannels, ratefs, frames_per_bufferchunk, inputTrue) # 这是输入流麦克风 frames [] # 用于存储所有音频数据块 # 循环读取数据并存入列表 for i in range(0, int(fs / chunk * record_seconds)): data stream.read(chunk) frames.append(data) # 停止并关闭流 stream.stop_stream() stream.close() p.terminate() # 终止PyAudio print(“录音结束。”) # 将录制的数据保存为WAV文件 wf wave.open(filename, ‘wb’) wf.setnchannels(channels) wf.setsampwidth(p.get_sample_size(sample_format)) wf.setframerate(fs) wf.writeframes(b‘’.join(frames)) # 将所有数据块拼接并写入 wf.close() print(f“音频已保存为{filename}”)代码解释pyaudio.paInt16表示我们用16位也就是2个字节来存储一个采样点的数据这是常见的格式。fs 16000采样率设为每秒16000次。你可以理解为一秒钟的声音被切成了16000个片段记录下来。这个频率对于语音来说足够清晰也是很多语音模型的默认输入要求。stream.read(chunk)从麦克风读取一小块音频数据。我们通过一个循环读取足够多次来凑够我们想要的录音时长。最后我们用Python内置的wave模块把这一系列数据块按照WAV文件的格式要求写入到一个文件中。2.2 测试录音功能现在我们可以在脚本的末尾函数定义之后加上几行代码来测试一下if __name__ “__main__”: # 测试录音功能 audio_filename “test_recording.wav” record_audio(audio_filename, record_seconds5) print(“你可以去播放这个文件听听录得怎么样。”)运行这个脚本python voice_recognition.py对着麦克风说几句话。5秒后你会看到“录音结束”和“音频已保存”的提示。去当前文件夹下找到test_recording.wav双击播放听听效果。如果录下了你的声音那么最基础的一步就成功了3. 第二步调用语音识别API录音文件准备好了接下来就是重头戏让AI模型来“听懂”它。我们不会自己运行庞大的语音识别模型那样对电脑要求太高。我们将通过HTTP请求调用一个已经部署在星图GPU平台上的Qwen3-ASR-0.6B模型服务。这种方式简单、快捷特别适合入门学习和快速验证想法。3.1 了解API接口调用一个AI服务就像在餐厅点菜。你需要知道餐厅的地址API地址、你想点什么菜请求参数、以及餐厅会怎么把菜端给你响应格式。假设我们已经在一个星图GPU服务器上部署好了Qwen3-ASR-0.6B模型并提供了一个HTTP API。一个典型的语音识别API可能需要以下信息URL地址API的服务端点例如http://your-server-ip:port/v1/audio/transcriptions。请求方法通常是POST。请求头需要告诉服务器我们发送的是音频文件所以会设置Content-Type: multipart/form-data。请求体包含我们录制的音频文件。模型的响应通常是一个JSON对象里面包含了识别出来的文字。重要提示在实际操作前你需要获得一个可用的API地址。这通常需要在星图GPU平台创建一个部署并获得一个访问端点Endpoint和可能的API密钥。为了教程的连贯性我们假设你已经有了一个测试用的地址http://127.0.0.1:8000/v1/audio/transcriptions。请根据你的实际情况替换它。3.2 编写调用API的函数现在我们在voice_recognition.py文件中添加一个新的函数。import requests def transcribe_audio(filepath, api_url): 将音频文件发送给语音识别API并返回识别出的文本。 参数: filepath: 音频文件的路径 api_url: 语音识别API的完整地址 返回: 识别出的文本字符串如果失败则返回None。 # 以二进制读模式打开音频文件 with open(filepath, ‘rb’) as audio_file: # 构建请求数据文件字段名通常是 ‘file’ 或 ‘audio’ files {‘file’: (filepath, audio_file, ‘audio/wav’)} # 有些API可能需要额外的headers比如API Key这里按需添加 # headers {‘Authorization’: ‘Bearer YOUR_API_KEY’} try: print(“正在发送音频到识别服务...”) # 发送POST请求 response requests.post(api_url, filesfiles) #, headersheaders) # 检查请求是否成功 response.raise_for_status() # 假设API返回的是JSON且识别文本在 ‘text’ 字段中 result response.json() transcribed_text result.get(‘text’) if transcribed_text: print(“识别成功”) return transcribed_text else: print(“识别成功但返回结果中没有文本内容。”) print(f“完整响应{result}”) return None except requests.exceptions.RequestException as e: print(f“请求API时出错{e}”) return None except ValueError as e: print(f“解析API响应时出错可能不是JSON格式{e}”) print(f“原始响应内容{response.text}”) return None代码解释files{‘file’: …}这构建了一个表单数据告诉服务器我们要上传一个文件。‘file’是服务器期望的字段名有时也可能是‘audio’或‘file’需要查看具体的API文档。requests.post()发送一个POST请求到指定的API地址并附上我们的音频文件。response.raise_for_status()如果HTTP请求返回错误状态码如404 500这一行会抛出一个异常让我们能捕获到错误。response.json()将服务器返回的JSON格式的字符串解析成Python的字典或列表方便我们提取数据。我们假设识别结果放在返回JSON的‘text’字段里并用.get()方法安全地获取它。4. 第三步整合与运行完整脚本现在我们把录音和识别两个功能串起来形成一个完整的流程。同时我们也会对代码做一些优化让它更健壮、更好用。4.1 创建主函数并整合流程我们修改脚本末尾的if __name__ “__main__”:部分让它成为我们程序的主入口。def main(): 主函数整合录音和识别流程 # 1. 设置参数 audio_filename “my_recording.wav” record_duration 5 # 录音时长单位秒 # TODO: 将下面的URL替换为你自己的API地址 api_endpoint “http://127.0.0.1:8000/v1/audio/transcriptions” print(“ Python语音识别脚本启动 ”) # 2. 录音 try: record_audio(audio_filename, record_duration) except Exception as e: print(f“录音过程出现错误{e}”) print(“请检查麦克风是否连接或pyaudio库是否安装正确。”) return # 如果录音失败直接退出 # 3. 语音识别 print(“\n开始语音识别...”) text_result transcribe_audio(audio_filename, api_endpoint) # 4. 输出结果 if text_result: print(“\n” “”*30) print(“识别结果”) print(text_result) print(“”*30) else: print(“未能获取识别结果。”) if __name__ “__main__”: main()4.2 处理可能遇到的问题第一次运行很可能会遇到各种问题。别担心这很正常。我们来看看常见的几种情况录音没声音检查系统麦克风设置是否禁用了或者是否选择了正确的麦克风设备。在代码里p.open(…, inputTrue)这行默认使用系统默认输入设备。安装pyaudio失败如前所述可以尝试下载预编译的wheel文件安装或者使用pipwinWindows等工具。API连接错误这是最常见的问题。requests.exceptions.ConnectionError意味着你的脚本无法连接到api_endpoint指定的地址。检查URL确认api_endpoint变量里的地址、端口、路径完全正确。检查服务状态确保你的语音识别模型服务已经成功在星图GPU上启动并且在监听你指定的端口。你可以在服务器上使用netstat -tulnp | grep 端口号Linux或查看服务日志来确认。网络可达性如果服务部署在远程服务器非127.0.0.1请确保你的网络可以访问该服务器的IP和端口。API返回非JSON内容或错误服务器可能返回一个HTML错误页面如404 Not Found或者纯文本错误信息。我们的代码尝试用.json()解析所以会抛出ValueError。查看print(f“原始响应内容{response.text}”)输出的内容就能知道服务器到底返回了什么这是调试的关键。4.3 一个更健壮的版本可选我们可以增加一些交互性和错误处理让脚本更好用。比如让用户选择是否重新录音。def main_enhanced(): audio_filename “recording.wav” api_endpoint “http://127.0.0.1:8000/v1/audio/transcriptions” while True: print(“\n1. 开始录音并识别”) print(“2. 退出”) choice input(“请选择 (1/2): “).strip() if choice ‘2’: print(“再见”) break elif choice ‘1’: try: duration int(input(“请输入录音时长秒建议3-10: “).strip()) except ValueError: print(“输入无效使用默认5秒。”) duration 5 # 录音 try: record_audio(audio_filename, duration) except OSError as e: # 处理麦克风等硬件错误 print(f“音频设备错误{e}”) continue # 识别 result transcribe_audio(audio_filename, api_endpoint) if result: print(“\n识别结果”, result) save_choice input(“是否保存结果到文件(y/n): “).lower() if save_choice ‘y’: with open(“recognition_result.txt”, ‘w’, encoding‘utf-8’) as f: f.write(result) print(“结果已保存至 recognition_result.txt”) else: print(“识别失败请检查API服务。”) else: print(“无效选择请重新输入。”) if __name__ “__main__”: # 可以选择运行简单版或增强版 # main() # 简单版 main_enhanced() # 增强交互版5. 总结与下一步好了走到这里你已经完成了一个完整的、可以工作的语音识别脚本。从安装库、录制声音到调用远程AI服务获取文字结果整个流程你已经走通了。这不仅仅是几行代码更是一个典型的“客户端调用AI云服务”的微缩模型。现实中很多AI应用比如手机上的语音助手背后的原理和这个流程非常相似。用下来感觉整个流程最关键的其实是两步一是本地环境的准备尤其是pyaudio的安装有时候需要一点耐心二是API的对接确保地址正确、服务正常、数据格式匹配。一旦这两步通了后面的代码逻辑其实很直观。如果你还想继续深入这里有几个方向可以尝试第一优化录音质量比如增加静音检测只有检测到人声才开始录制和停止这样生成的文件更干净。第二处理更长的音频我们的示例代码是一次性发送整个文件对于长音频可能需要先进行切片。第三探索模型的其他参数比如有的API支持指定语言、是否添加标点等可以看看Qwen3-ASR模型的文档尝试调整这些参数看看识别效果有什么变化。最重要的是你已经有了一个可以运行的起点。基于这个脚本你可以把它集成到更大的项目里比如做一个带图形界面的录音工具或者一个自动记录会议内容的脚本。动手去改一改加一点自己的功能才是学习编程最快的方式。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
返回列表