FireRedASR Pro语音识别Python入门实战:从零搭建语音指令系统

📅 发布时间:2026/7/15 8:33:39 👁️ 浏览次数:
FireRedASR Pro语音识别Python入门实战:从零搭建语音指令系统
FireRedASR Pro语音识别Python入门实战从零搭建语音指令系统你是不是对语音识别技术很好奇想知道那些智能音箱是怎么听懂“开灯”、“播放音乐”的或者你有个小项目想用语音来控制电脑做一些简单操作但又觉得这技术门槛太高别担心今天我们就来一起动手用Python和FireRedASR Pro这个开源的语音识别工具从零开始搭建一个你自己的语音指令系统。整个过程就像搭积木一样简单不需要你懂复杂的深度学习只要会一点Python基础语法就能搞定。我会带你一步步走从安装环境到写出能听懂你说话的代码保证你能跟着做出来。1. 准备工作搭建你的Python语音识别环境在开始写代码之前我们得先把“舞台”搭好。这里主要就是准备好Python和几个必要的工具库。首先确保你的电脑上已经安装了Python。我建议使用Python 3.7或更高的版本因为很多新库对老版本支持不太好。怎么检查呢打开你的命令行Windows上是CMD或PowerShellMac或Linux上是终端输入python --version或者python3 --version看看版本号对不对。接下来我们需要安装几个关键的Python库。你可以把它们想象成乐高积木里的不同零件requests: 这是用来和FireRedASR Pro“说话”的库我们的程序要通过它把音频文件发送过去。pydub: 一个处理音频文件的好帮手比如检查格式、调整音量。sounddevice和soundfile: 如果你想从麦克风实时录音并保存这两个库会很有用。安装它们非常简单只需要一行命令。打开命令行输入pip install requests pydub sounddevice soundfile如果网络不太好可以试试加上国内的镜像源比如pip install requests pydub sounddevice soundfile -i https://pypi.tuna.tsinghua.edu.cn/simple看到一堆下载和安装成功的提示就说明环境准备得差不多了。最后你需要一个能运行的FireRedASR Pro服务。最省事的方法就是使用已经打包好的镜像。假设你已经通过CSDN星图镜像广场找到了FireRedASR Pro的镜像并成功部署了。部署好后你会得到一个服务地址比如http://你的服务器IP:端口号。请记下这个地址后面我们的程序就要和它打交道。2. 认识FireRedASR Pro你的语音转文字引擎在动手连接之前我们先花几分钟了解一下FireRedASR Pro是干什么的以及它喜欢“吃”什么样的“食物”音频文件。FireRedASR Pro是一个专注于中文语音识别的开源引擎。你可以把它理解成一个非常专注的“耳朵”和“大脑”组合体。它的“耳朵”负责听清你说了什么而“大脑”则负责把这些声音转换成它认识的文字。它的特点是本地部署、响应速度快并且针对中文场景做了优化对于日常的语音指令识别准确率已经相当不错了。那么它喜欢处理什么样的音频文件呢这就像不同的播放器支持不同的视频格式一样。为了获得最好的识别效果我们最好给FireRedASR Pro喂它最“爱吃”的格式格式WAV 或 FLAC。这两种是未经压缩或无损压缩的格式能保留最多的声音细节。采样率16000 Hz。这是语音识别的一个标准采样率既能保证清晰度文件又不会太大。声道单声道Mono。语音识别不需要立体声单声道就足够了。位深16 bit。这也是一个标准配置。如果你的音频文件不符合这些要求怎么办别急我们后面会用pydub库来帮它“加工”一下转换成合适的格式。3. 第一步用Python和FireRedASR Pro打个招呼现在让我们写第一段代码测试一下我们的程序能不能成功连接到FireRedASR Pro服务并完成一次最简单的语音识别。假设我们有一个已经录好的、符合上述要求的WAV文件叫做command.wav里面录了一句“打开浏览器”。我们的目标是把这句话变成文字。我们先创建一个新的Python文件比如叫asr_demo.py然后写下以下代码import requests import json # 1. 设置FireRedASR Pro服务的地址 asr_server_url http://127.0.0.1:5000 # 请替换成你实际的服务地址和端口 # 2. 准备要识别的音频文件路径 audio_file_path command.wav # 3. 构建API请求 # FireRedASR Pro通常提供一个接收音频文件的接口比如 /recognize api_endpoint f{asr_server_url}/recognize # 4. 以二进制形式读取音频文件 with open(audio_file_path, rb) as audio_file: files {audio: audio_file} # 5. 发送POST请求 response requests.post(api_endpoint, filesfiles) # 6. 处理返回的结果 if response.status_code 200: # 假设服务返回JSON格式数据其中包含识别文本 result response.json() # 提取识别出的文字 recognized_text result.get(text, ) print(f识别结果{recognized_text}) else: print(f请求失败状态码{response.status_code}) print(f错误信息{response.text})把代码里的asr_server_url换成你自己的服务地址并确保command.wav文件就在同一个文件夹下。然后运行这个脚本python asr_demo.py如果一切顺利你会在命令行里看到输出“识别结果打开浏览器”。恭喜你你已经成功完成了第一次语音识别调用4. 第二步让程序适应更多音频格式现实中我们的音频文件可能来自手机录音、网络下载格式五花八门比如MP3、M4A等。直接把这些文件扔给FireRedASR Pro它可能会“消化不良”。所以我们需要一个“预处理”步骤把各种音频转换成它喜欢的WAV格式。这里就要请出我们之前安装的pydub库了。它就像个万能音频转换器。我们来写一个音频预处理函数from pydub import AudioSegment import os def convert_audio_for_asr(input_path, output_pathconverted.wav): 将任意格式的音频文件转换为FireRedASR Pro友好的格式。 参数: input_path: 输入音频文件的路径。 output_path: 输出WAV文件的路径。 返回: 转换后的WAV文件路径。 # 加载音频文件pydub会根据后缀名自动判断格式 audio AudioSegment.from_file(input_path) # 转换为单声道 audio audio.set_channels(1) # 设置采样率为16000 Hz audio audio.set_frame_rate(16000) # 设置采样位深为16 bit audio audio.set_sample_width(2) # 导出为WAV格式 audio.export(output_path, formatwav) print(f音频已转换并保存至{output_path}) return output_path # 使用示例转换一个MP3文件 mp3_file my_command.mp3 converted_wav convert_audio_for_asr(mp3_file) # 现在你可以用 converted_wav 这个文件路径去调用识别函数了把这个函数集成到我们之前的代码里现在你的程序就能处理MP3、M4A等多种常见格式了实用性大大增强。5. 第三步解析结果让语音变成指令识别出文字只是第一步。我们的目标是做一个“语音指令系统”这意味着程序不仅要听懂你说什么还要知道该去做什么。比如当识别出“打开浏览器”时程序应该真的去启动浏览器。这就需要我们对识别出的文本进行解析。一个简单有效的方法是使用关键词匹配。我们来写一个指令处理函数import subprocess import webbrowser def execute_command(text): 根据识别出的文本执行相应的命令。 参数: text: 语音识别得到的文本。 text text.lower().strip() # 转换为小写并去除首尾空格使匹配更宽松 if 浏览器 in text or chrome in text: print(指令识别打开浏览器) # 使用webbrowser模块打开默认浏览器 webbrowser.open(https://www.csdn.net) # 例如打开CSDN官网 # 或者指定浏览器路径打开 # subprocess.run([rC:\Program Files\Google\Chrome\Application\chrome.exe]) elif 记事本 in text or notepad in text: print(指令识别打开记事本) subprocess.run([notepad.exe]) elif 时间 in text: print(指令识别报时) from datetime import datetime current_time datetime.now().strftime(%H点%M分) print(f现在时间是{current_time}) # 这里可以进一步集成语音合成把时间读出来 elif 退出 in text or 关闭 in text: print(指令识别退出程序) return exit else: print(f未识别的指令{text}) return unknown return success # 在我们的主流程中使用 recognized_text 打开浏览器 # 假设这是从ASR获取的结果 command_result execute_command(recognized_text) if command_result exit: print(程序退出。)你可以根据你的需要无限扩展这个execute_command函数里的判断条件添加更多指令比如控制音乐播放、查询天气、发送邮件等等。这就是你的语音助手核心逻辑所在。6. 第四步整合所有功能打造完整流程现在我们把音频预处理、语音识别和指令执行这三个“乐高模块”拼装起来形成一个完整的、可以工作的语音指令系统。import requests import json from pydub import AudioSegment import subprocess import webbrowser from datetime import datetime # ---------- 配置部分 ---------- ASR_SERVER http://127.0.0.1:5000 # 你的ASR服务地址 # ---------- 功能函数 ---------- def convert_audio(input_path): 音频格式转换函数同上此处省略以节省篇幅 # ... (将上面 convert_audio_for_asr 函数的代码放在这里) pass def recognize_speech(audio_path): 调用ASR服务识别语音 api_url f{ASR_SERVER}/recognize try: with open(audio_path, rb) as f: files {audio: f} resp requests.post(api_url, filesfiles, timeout10) if resp.status_code 200: return resp.json().get(text, ) else: print(f识别请求失败: {resp.status_code}) return None except Exception as e: print(f识别过程中出错: {e}) return None def handle_command(text): 指令处理函数同上此处省略以节省篇幅 # ... (将上面 execute_command 函数的代码放在这里) pass # ---------- 主程序流程 ---------- def main(): print( 简易语音指令系统启动 ) # 1. 准备音频文件这里假设用户已经提供了一个文件路径 # 在实际应用中这里可以替换为从麦克风录音的代码 user_audio input(请输入待识别的音频文件路径如hello.mp3: ).strip() if not user_audio: print(未提供文件路径使用默认测试文件。) user_audio test_command.wav # 你需要准备一个测试文件 # 2. 预处理音频 print(正在预处理音频文件...) try: ready_audio convert_audio(user_audio) except FileNotFoundError: print(f错误找不到文件 {user_audio}) return except Exception as e: print(f音频处理失败: {e}) return # 3. 语音识别 print(正在识别语音内容...) speech_text recognize_speech(ready_audio) if speech_text: print(f识别出的文字是{speech_text}) # 4. 执行指令 result handle_command(speech_text) if result exit: print(收到退出指令系统关闭。) return else: print(抱歉未能识别出有效内容。) print( 本次指令执行完毕 \n) if __name__ __main__: main()运行这个程序按照提示输入你的音频文件路径就能体验从语音到动作的完整链条了。你可以录一段“打开浏览器”的语音保存为MP3或WAV然后用这个程序试试看。7. 更进一步从文件到实时麦克风输入上面的例子是基于已有音频文件的。一个更酷的语音指令系统应该是实时聆听的。我们可以用sounddevice和soundfile库来实现简单的录音功能。import sounddevice as sd import soundfile as sf import numpy as np def record_audio(duration5, sample_rate16000, filenamerecorded.wav): 从麦克风录制一段音频。 参数: duration: 录制时长秒。 sample_rate: 采样率。 filename: 保存的文件名。 print(f准备录制 {duration} 秒音频...) print(请开始说话...) # 开始录音 recording sd.rec(int(duration * sample_rate), sampleratesample_rate, channels1, dtypeint16) sd.wait() # 等待录制结束 print(录制结束。) # 保存为WAV文件 sf.write(filename, recording, sample_rate) print(f音频已保存为{filename}) return filename # 在主程序中可以将原来的文件输入部分替换为 # user_audio record_audio(duration4) # 录制4秒把这段录音代码整合进去你的程序就拥有了“耳朵”可以实时响应你的语音命令了。8. 总结跟着走完这一趟你应该已经成功搭建了一个最简单的语音指令系统原型。我们回顾一下都做了什么先是准备好了Python环境和必要的库然后了解了FireRedASR Pro这个工具接着我们写了代码去调用它的识别功能并增加了音频格式转换的预处理步骤之后我们通过关键词匹配让识别出的文字能够触发具体的电脑操作最后我们把所有功能串起来形成了一个完整的工作流程甚至还展望了一下实时录音的功能。整个过程并没有涉及高深的算法更多的是在学习和使用现成的工具FireRedASR Pro和库requests, pydub然后用Python逻辑把它们粘合在一起。这正是现代AI应用开发的一个缩影利用强大的开源模型和框架快速构建出有价值的应用。你现在拥有的这个系统已经是一个很好的起点。你可以基于它做很多有趣的扩展比如增加更复杂的指令“查一下北京的天气”、加入简单的对话逻辑、或者做一个图形界面来显示状态。最重要的是你亲手实现了从声音到指令的跨越这感觉是不是很棒获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。