当前位置: 首页 > news >正文

调用百度api实现语音识别(python)

该代码实现了一个企业级的语音识别解决方案,通过调用百度语音识别API,实现实时录音识别和对已有音频语音识别功能。

百度智能云:请自行访问百度智能云,开通免费的语音识别功能,获取API_KEY和SECRET_KEY。操作按照百度流程即可,可免费申请。

首先,配置下百度API和描述下错误代码信息。以下是音频相关具体参数:

采样率 16000 Hz 符合语音识别最佳实践
缓冲区大小 1024样本/块 平衡延迟与稳定性
最大录音时长 60秒 API限制
文件大小限制 10MB 内存安全阈值
线程超时 1000ms 防止僵尸线程
状态刷新频率 500ms 用户体验优化
# 百度API配置(替换为您自己的API信息)
API_KEY = "你的API_KEY"
SECRET_KEY = "你的SECRET_KEY"
AUTH_URL = "https://aip.baidubce.com/oauth/2.0/token"
ASR_URL = "https://vop.baidubce.com/pro_api"

# 错误代码映射
ERROR_CODES = {
    3300: '输入参数不正确',
    3301: '音频质量过差',
    3302: '音频鉴权失败',
    3303: '服务端请求失败',
    3304: '音频过长(超过60秒)',
    3305: '音频数据错误',
    3307: '识别结果解密失败',
    3308: '语音服务器系统错误',
    3309: '上传的音频没有有效数据',
    3310: '输入的音频文件过大',
    3311: '采样率参数错误',
    3312: '音频格式参数错误',
    3313: '语音服务器忙',
}

下面,进行‌窗口配置‌,设置窗口标题为 "百度语音识别工具",定义窗口初始大小为 800x500 像素
‌状态初始化‌:is_recording: 录音状态标志(False 表示未在录音);access_token: 存储百度API的访问令牌(初始为None);audio: PyAudio实例,用于音频输入输出控制;recording_thread: 录音线程(用于后台录音);temp_files: 临时录音文件存储列表。
‌音频参数‌:”FORMAT- 音频格式为16位PCM(pyaudio.paInt16);CHANNELS- 单声道录音(1声道);RATE- 采样率16000Hz(符合百度API要求);CHUNK: 每次读取的音频块大小(1024样本) 。

def __init__(self, root):
    self.root = root
    root.title("百度语音识别工具")
    root.geometry("800x500")
    
    # 初始化状态
    self.is_recording = False
    self.access_token = None
    self.audio = pyaudio.PyAudio()
    self.recording_thread = None
    self.temp_files = []
    
    # 音频参数
    self.FORMAT = pyaudio.paInt16
    self.CHANNELS = 1
    self.RATE = 16000
    self.CHUNK = 1024
    
    # 创建界面
    self.setup_ui()
    
    # 获取访问令牌
    self.get_access_token()

下面进行界面布局,使用 ttk.Frame 作为容器,标题为 "文件操作",文本输入框 (ttk.Entry): 显示选择的文件路径,"浏览..." 按钮: 调用 select_file 方法打开文件对话框,"开始识别" 按钮: 调用 process_selected_file 处理文件。‌录音控制区‌:单个按钮 (record_btn),初始文本为 "▶ 开始录音"
点击触发 toggle_recording 方法切换录音状态;‌结果展示区‌:tk.Text 组件支持文本换行 ,附加垂直滚动条 (ttk.Scrollbar),与文本框联动。使用 StringVar 动态更新状态文本。

def setup_ui(self):
    """设置界面布局"""
    main_frame = ttk.Frame(self.root, padding=10)
    main_frame.pack(fill=tk.BOTH, expand=True)
    
    # 文件选择区域
    file_frame = ttk.LabelFrame(main_frame, text="文件操作", padding=10)
    file_frame.pack(fill=tk.X, pady=5)
    
    self.file_entry = ttk.Entry(file_frame, width=50)
    self.file_entry.pack(side=tk.LEFT, padx=5)
    
    ttk.Button(file_frame, text="浏览...", command=self.select_file).pack(side=tk.LEFT, padx=5)
    ttk.Button(file_frame, text="开始识别", command=self.process_selected_file).pack(side=tk.LEFT, padx=5)
    
    # 录音控制区域
    record_frame = ttk.LabelFrame(main_frame, text="实时录音", padding=10)
    record_frame.pack(fill=tk.X, pady=5)
    
    self.record_btn = ttk.Button(
        record_frame, 
        text="▶ 开始录音",
        command=self.toggle_recording
    )
    self.record_btn.pack(pady=5)
    
    # 结果显示区域
    result_frame = ttk.LabelFrame(main_frame, text="识别结果", padding=10)
    result_frame.pack(fill=tk.BOTH, expand=True)
    
    self.result_text = tk.Text(result_frame, wrap=tk.WORD)
    scrollbar = ttk.Scrollbar(result_frame, command=self.result_text.yview)
    self.result_text.configure(yscrollcommand=scrollbar.set)
    
    self.result_text.pack(side=tk.LEFT, fill=tk

相关文章:

  • CLion Debug查看指针数组元素
  • Kubernetes(k8s)-Pod亲和性(Affinity)和反亲和性(Anti-affinity)
  • PAQ压缩算法
  • 自动驾驶系统的车辆动力学建模:自行车模型与汽车模型的混合策略及自动驾驶分层控制架构
  • 3.24-3 接口测试断言
  • 面试中如何回答性能优化的问题
  • C语言 【实现电脑关机小游戏】非常好玩
  • java实现coze平台鉴权+工作流调用(踩坑记录)
  • 大数据(2)Hadoop架构深度拆解:HDFS与MapReduce企业级实战与高阶调优
  • 在 Kubernetes 中部署 Trivy 漏洞扫描服务
  • 力扣DAY24 | 热100 | 回文链表
  • Apollo 相关知识点
  • DeepSeek组网的演进与效率提升
  • Categorical分布(分类分布):深度学习中的离散建模利器
  • 【嵌入式学习2】学生信息管理系统项目
  • 蓝桥刷题note10(最长回文串,种花问题,柠檬水找零)
  • 基于Spring Boot + Vue的银行管理系统设计与实现
  • SQL语句---DDL
  • 机器视觉场景应用中,有没有超景深的工业镜头
  • HRP方法全文总结与模型流程解析
  • 上海发布预付卡消费“10点提示”:警惕“甩锅闭店”套路
  • 中国难以承受高关税压力?外交部:任何外部冲击都改变不了中国经济基本面
  • 用社群活动维系“不开发”古镇的生命力
  • 碧桂园服务:拟向杨惠妍全资持有的公司提供10亿元贷款,借款将转借给碧桂园用作保交楼
  • 巴称击落多架印度“阵风”战机,专家:小规模冲突巴空军战力不落下风
  • 为什么所有动物里,只有人类幼崽发育得这么慢?