从Python入门到AI应用:SenseVoice-Small语音识别项目实践

📅 发布时间:2026/7/7 14:10:42 👁️ 浏览次数:
从Python入门到AI应用:SenseVoice-Small语音识别项目实践
从Python入门到AI应用SenseVoice-Small语音识别项目实践1. 引言你是不是也对AI语音识别感到好奇想知道那些能把你说的话变成文字的程序是怎么做出来的但又觉得编程门槛太高AI模型太复杂不知道从哪里开始别担心这篇文章就是为你准备的。我们不走寻常路不先讲一堆枯燥的理论。今天我们就用一个实实在在的项目——做一个能录音并转成文字的桌面小工具——来带你入门Python并亲手触摸AI应用开发。这个项目会用到百度的SenseVoice-Small语音识别模型。别被名字吓到我们不需要懂它背后的复杂算法就像开车不需要懂发动机原理一样。我们会把它当成一个“黑盒子”一个非常厉害的工具用几行Python代码就能调用它。整个学习路径就像搭积木先认识Python这块最基础的积木语法再学习怎么用requests库这块积木去和外界通信调用API最后把这些积木组合起来加上一点图形界面完成我们的语音识别小工具。通过动手做你会发现编程和AI应用没那么神秘而且特别有成就感。2. 第一步搭建你的Python游乐场在开始写代码之前我们得先把“工作台”准备好。对于新手来说一个友好、省心的开发环境至关重要。2.1 安装Python获取你的核心工具Python是这一切的基础。访问Python官网下载最新稳定版本比如3.11或3.12。安装时请务必勾选“Add Python to PATH”这个选项这能让你在电脑的任何地方都能方便地使用Python。怎么检查安装成功了打开你的命令行工具Windows上是“命令提示符”或PowerShellMac或Linux上是“终端”输入python --version然后回车。如果能看到类似“Python 3.11.5”的版本号恭喜你第一步成功了2.2 选择代码编辑器你的数字笔记本你不需要一开始就用非常专业的工具。这里我推荐两个对新手极其友好的选择VS Code微软出品免费且功能强大。它就像一个智能笔记本能帮你高亮代码、提示错误甚至直接运行代码片段。去官网下载安装再搜索安装“Python”这个扩展它就变成了一个专业的Python开发环境。PyCharm Community EditionJetBrains公司专门为Python开发的IDE集成开发环境。它开箱即用所有Python相关的功能都为你配置好了非常适合不想在环境配置上花费时间的新手。选哪一个我的建议是如果你喜欢轻量、可定制选VS Code如果你想要一个专门为Python设计的、功能全面的“一站式”工具选PyCharm。两者都非常优秀。2.3 认识你的新朋友命令行对于很多新手来说黑乎乎的命令行窗口有点吓人。别怕它只是你和电脑对话的一种更直接的方式。我们在这个项目里只会用到几个简单的命令cd 文件夹路径进入某个文件夹。dir(Windows) 或ls(Mac/Linux)列出当前文件夹下的文件和子文件夹。python 你的脚本名.py运行你写的Python程序。试着在命令行里输入cd Desktop进入桌面再用dir或ls看看桌面上有什么。看你已经会了3. 第二步Python语法快速上手现在让我们在编辑器里新建一个文件比如叫learn.py开始写几行真正的代码。我们只学这个项目需要用到的部分目标明确学以致用。3.1 变量与数据类型数据的容器变量就像一个个贴了标签的盒子用来存放数据。# 字符串用来存放文本用单引号或双引号包起来 my_name 小明的语音助手 print(你好我是, my_name) # 数字整数和小数 age 3 # 整数 version 1.5 # 小数浮点数 print(版本号是, version) # 列表一个有序的“购物车”可以放各种东西 tools [Python, 麦克风, SenseVoice模型] print(我使用的工具, tools[0]) # 通过位置索引从0开始获取列表中的元素3.2 控制流让程序自己做判断程序不能只会从上到下执行它需要学会“思考”。# if...else 条件判断 audio_quality 清晰 if audio_quality 清晰: print(音频质量很好开始识别。) else: print(音频可能有噪音识别效果可能受影响。) # for 循环处理列表中的每一个元素 for tool in tools: print(f正在准备{tool}) # 这行代码会依次打印出列表tools里的每一个元素3.3 函数可重复使用的代码块把一段常用的功能打包起来给它起个名字以后就可以随时调用。# 定义一个叫‘打招呼’的函数 def greet(user): return f欢迎使用{user} # 调用函数 welcome_message greet(开发者) print(welcome_message) # 输出欢迎使用开发者3.4 文件操作读取和保存我们的项目需要处理音频文件所以必须学会和文件打交道。# 假设我们有一个录音文件叫‘my_recording.wav’ file_path my_recording.wav # 以二进制读取模式打开文件 with open(file_path, rb) as audio_file: audio_data audio_file.read() print(f成功读取音频文件大小{len(audio_data)} 字节) # 使用‘with’语句可以确保文件在使用后被正确关闭这是个好习惯。掌握了这些你已经拥有了完成本项目所需的大部分Python基础技能。是不是比想象中简单4. 第三步学习与外界对话 - Requests库我们的程序不能光自己玩它需要把录音文件发送给远端的SenseVoice模型并拿回识别结果。这个“发送”和“拿回”的过程就是通过HTTP API调用实现的。requests库让这个过程变得极其简单。4.1 安装与初识Requests首先在命令行里安装这个库pip install requestspip是Python的包管理工具你可以把它想象成一个“应用商店”install就是安装命令。然后在你的代码里引入它import requests4.2 发起你的第一个网络请求我们来模拟一下调用一个简单的公开API这里以查询IP地址的API为例import requests response requests.get(https://api.ipify.org?formatjson) # requests.get() 表示我们发起一个GET请求获取数据。 if response.status_code 200: # status_code是状态码200表示成功 data response.json() # 将返回的JSON格式数据转换成Python字典 print(你的公网IP地址是, data[ip]) else: print(请求失败状态码, response.status_code)运行这段代码你会看到你的公网IP被打印出来。看和网络服务交互就这么简单4.3 准备调用语音识别APISenseVoice模型的API通常需要我们以POST方式发送数据。与GET获取不同POST通常用于“提交”数据比如我们这里要提交音频文件。关键步骤通常包括准备请求地址API的网址。准备请求头告诉服务器一些额外信息比如我们发送的数据格式。准备请求体最重要的部分包含我们的音频文件数据和其他参数。发送请求并处理响应。我们将在下一章结合具体API来详细实现。5. 第四步项目实战 - 构建录音转文字工具终于来到最激动人心的部分我们将把前面学到的所有知识串联起来。为了更完整我们还会用到tkinterPython自带的图形界面库来做个简单的窗口并用sounddevice和scipy来录制音频。5.1 项目整体规划我们的工具将包含以下功能一个简单的图形窗口。一个“开始录音”按钮和一个“停止录音”按钮。录音后自动保存为WAV文件。一个“识别”按钮点击后将音频发送给SenseVoice-Small API。一个文本框用于显示识别出的文字结果。5.2 编写核心代码首先安装额外的音频处理库pip install sounddevice scipy以下是项目的主要代码文件voice_assistant.pyimport tkinter as tk from tkinter import scrolledtext, messagebox import requests import sounddevice as sd from scipy.io.wavfile import write import numpy as np import threading import time import json class VoiceRecognitionApp: def __init__(self, root): self.root root self.root.title(SenseVoice 语音识别小助手) self.root.geometry(600x400) self.is_recording False self.frames [] self.sample_rate 16000 # 采样率16kHz是语音识别的常用值 # 创建界面组件 self.setup_ui() def setup_ui(self): # 控制按钮区域 btn_frame tk.Frame(self.root) btn_frame.pack(pady10) self.record_btn tk.Button(btn_frame, text● 开始录音, commandself.toggle_recording, bglightcoral, font(Arial, 12)) self.record_btn.pack(sidetk.LEFT, padx5) self.recognize_btn tk.Button(btn_frame, text 开始识别, commandself.recognize_speech, statetk.DISABLED, font(Arial, 12)) self.recognize_btn.pack(sidetk.LEFT, padx5) # 状态显示标签 self.status_label tk.Label(self.root, text准备就绪, fggray) self.status_label.pack() # 用于显示识别结果的文本框 self.result_text scrolledtext.ScrolledText(self.root, wraptk.WORD, height15, font(微软雅黑, 10)) self.result_text.pack(padx10, pady10, filltk.BOTH, expandTrue) # 插入一些使用提示 self.result_text.insert(tk.END, 提示\n1. 点击红色按钮开始录音。\n2. 再次点击停止录音。\n3. 点击火箭按钮将录音发送给AI进行识别。\n\n识别结果将显示在此处...\n) def toggle_recording(self): 控制录音的开始与停止 if not self.is_recording: # 开始录音 self.is_recording True self.frames [] self.record_btn.config(text■ 停止录音, bglightgreen) self.status_label.config(text录音中...请说话, fggreen) self.recognize_btn.config(statetk.DISABLED) # 在新线程中录音避免界面卡住 self.recording_thread threading.Thread(targetself.record_audio) self.recording_thread.start() else: # 停止录音 self.is_recording False self.record_btn.config(text● 开始录音, bglightcoral) self.status_label.config(text录音已停止, fgblue) self.recognize_btn.config(statetk.NORMAL) messagebox.showinfo(提示, 录音已保存为 recording.wav) def record_audio(self): 实际的录音函数 with sd.InputStream(samplerateself.sample_rate, channels1, dtypeint16) as stream: while self.is_recording: audio_chunk, overflowed stream.read(self.sample_rate) # 读取1秒的音频数据 self.frames.append(audio_chunk.copy()) # 录音停止后保存文件 if self.frames: audio_data np.concatenate(self.frames, axis0) write(recording.wav, self.sample_rate, audio_data) def recognize_speech(self): 调用语音识别API self.status_label.config(text识别中请稍候..., fgorange) self.recognize_btn.config(statetk.DISABLED) self.result_text.delete(1.0, tk.END) # 清空旧结果 self.result_text.insert(tk.END, 正在识别这可能需要几秒钟...\n) # 在新线程中执行网络请求避免界面卡死 thread threading.Thread(targetself._call_recognition_api) thread.start() def _call_recognition_api(self): 实际调用API的函数注意此处URL和参数需替换为真实的 api_url https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/asr/sensevoice # 示例URL需替换 access_token YOUR_ACTUAL_ACCESS_TOKEN # 需要申请获取此处为示例 headers { Content-Type: audio/wav; rate16000, # 根据API要求设置 } params { access_token: access_token, dev_pid: 1537, # 普通话模型根据API文档设置 } try: with open(recording.wav, rb) as audio_file: files {audio: audio_file} # 注意实际请求方式、参数名、请求头需严格参照SenseVoice官方API文档 response requests.post(api_url, paramsparams, headersheaders, filesfiles) if response.status_code 200: result response.json() # 解析返回的JSON提取识别文本。具体字段名需查看API文档。 # 假设返回格式为 {result: [识别出的文字]} text_result result.get(result, [])[0] self._update_ui_with_result(f识别成功\n\n你说的是\n{text_result}) else: self._update_ui_with_result(f识别请求失败。\n状态码{response.status_code}\n返回信息{response.text}) except Exception as e: self._update_ui_with_result(f发生错误{str(e)}) def _update_ui_with_result(self, message): 在UI主线程中更新识别结果 def update(): self.status_label.config(text识别完成, fgdarkgreen) self.recognize_btn.config(statetk.NORMAL) self.result_text.delete(1.0, tk.END) self.result_text.insert(tk.END, message) self.root.after(0, update) # 确保UI更新在主线程执行 if __name__ __main__: root tk.Tk() app VoiceRecognitionApp(root) root.mainloop()5.3 代码要点解析与运行获取API密钥代码中的access_token和api_url是示例你需要根据百度智能云官方文档申请语音识别服务并获取真实的访问令牌和接口地址。这是让项目跑起来的唯一“钥匙”。理解代码结构我们创建了一个类VoiceRecognitionApp来管理整个应用。tkinter负责创建按钮、文本框等界面。录音功能由sounddevice实现。最核心的_call_recognition_api函数使用了我们刚学的requests.post方法将本地的recording.wav文件发送给云端API。多线程注意threading.Thread的使用。录音和网络请求都是比较耗时的操作如果放在主线程也就是管理界面的那个线程里执行整个窗口就会卡住不动。新开一个线程去执行这些任务界面就能保持响应。运行项目将上面的代码保存为voice_assistant.py在命令行中进入文件所在目录运行python voice_assistant.py。一个图形窗口就会弹出来。6. 总结走完这个完整的项目你收获的远不止一个语音识别工具。你实际上走通了一条从编程小白到能做出有趣AI应用的实践路径。你知道了Python基础语法怎么用明白了如何用requests库去获取网络上的服务也体验了如何将不同功能的代码模块本地录音、网络请求、图形界面像拼图一样组合成一个完整的程序。最重要的是你亲手验证了一个想法那些看似高深的AI能力其实可以通过清晰的接口API被我们轻松调用来解决实际问题。这个项目只是一个起点。你可以基于它做很多扩展比如增加一个播放录音的按钮尝试识别英文或者把识别结果自动保存到文件里。编程和AI学习的乐趣就在于此——从一个能运行的小东西开始不断添加新功能看着它一点点成长同时你自己也在快速成长。希望这个项目能成为你探索更大世界的第一块坚实的垫脚石。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。