You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python speech_recognition调用listen/无时长record无返回 如何实现停讲自动识别

问题原因

  • 缺少环境噪声校准步骤:speech_recognition的识别器实例默认没有适配当前环境的背景噪音,会把环境底噪一直判定为有效语音输入,因此永远不会触发“停止录制”的逻辑。
  • 无时长限制的record()方法判定逻辑不符合需求:文档中提到的“录制直到没有音频输入为止”,是指音频流完全中断的情况,你手动静音麦克风后,音频输入流依然存在只是音量极低,不会触发停止条件,因此不要用无duration参数的record()实现自动停录。
  • 未配置listen()方法的静默判定参数:listen()默认的静默等待阈值不符合使用预期,需要主动配置。

解决步骤

  1. 打开麦克风后先执行环境噪声校准,让识别器区分背景音和人声
  2. 主动设置静默判定阈值:即用户停止说话多久后判定为录音结束
  3. 改用listen()方法实现自动停录,不要用无时长的record()

修正后可运行的代码示例

import speech_recognition as sr

class Voice:
    def __init__(self) -> None:
        r = sr.Recognizer()
        # 配置静默判定阈值:停止说话1秒后就判定为录音结束,可根据需求调整数值
        r.pause_threshold = 1
        # 可选:手动设置人声能量阈值,环境噪音大时可以适当调大该值,默认是300
        # r.energy_threshold = 400

        with sr.Microphone() as source:
            print("校准环境噪音中,请稍等...")
            # 校准当前环境的背景噪音,默认监听1秒环境音,可加duration参数调整校准时长
            r.adjust_for_ambient_noise(source, duration=0.5)
            print("请开始说话:")
            
            # 监听音频,自动识别停止说话后结束录制
            # 可选参数:timeout=5 代表5秒内没检测到人声就抛出超时异常
            # 可选参数:phrase_time_limit=10 代表最多录10秒就自动停止
            audio_data = r.listen(source)

            print("识别中...")
            try:
                text = r.recognize_google(audio_data, language="es-ES")
                print(f"识别结果:{text}")
            except sr.UnknownValueError:
                print("无法识别语音内容")
            except sr.RequestError as e:
                print(f"请求谷歌识别服务失败:{e}")

if __name__ == "__main__":
    new_voice = Voice()

内容的提问来源于stack exchange,提问作者Felipe Cristiano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:54:03