Python speech_recognition调用listen/无时长record无返回 如何实现停讲自动识别
问题原因
- 缺少环境噪声校准步骤:
speech_recognition的识别器实例默认没有适配当前环境的背景噪音,会把环境底噪一直判定为有效语音输入,因此永远不会触发“停止录制”的逻辑。 - 无时长限制的
record()方法判定逻辑不符合需求:文档中提到的“录制直到没有音频输入为止”,是指音频流完全中断的情况,你手动静音麦克风后,音频输入流依然存在只是音量极低,不会触发停止条件,因此不要用无duration参数的record()实现自动停录。 - 未配置
listen()方法的静默判定参数:listen()默认的静默等待阈值不符合使用预期,需要主动配置。
解决步骤
- 打开麦克风后先执行环境噪声校准,让识别器区分背景音和人声
- 主动设置静默判定阈值:即用户停止说话多久后判定为录音结束
- 改用
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
相关产品推荐
相关产品推荐

