Python使用speech_recognition语音识别模块运行无输出如何解决
speech_recognition模块无输出问题解决方案
代码卡在Listening:阶段无后续输出,核心是speech_recognition的listen()方法默认未做环境噪音校准,会持续等待符合阈值的静音段才停止录制,无法触发后续识别逻辑,可按以下步骤修复:
- 第一步:添加环境噪音校准:在创建source对象后先调用
root.adjust_for_ambient_noise(source, duration=1),让识别器用1秒时间学习当前环境的噪音水平,自动设置能量阈值过滤背景音。 - 第二步:给
listen()方法添加超时和最长录制时间限制,避免无限等待:可添加timeout(最长等待用户开口的时间)、phrase_time_limit(单次录制的最长时长)两个参数,到点自动停止录制。 - 第三步:添加异常捕获逻辑,避免识别失败时程序直接崩溃无输出。
- 第四步:如果校准后还是无响应,可手动指定麦克风设备索引:Windows多音频设备场景下,默认调用的麦克风可能不是你正在使用的设备,可先打印所有麦克风列表,选择对应设备的索引传入
sr.Microphone(device_index=xxx)。
修复后可运行代码
import speech_recognition as sr # 取消下方两行注释可打印所有麦克风设备,确认你要用的设备索引 # for index, name in enumerate(sr.Microphone.list_microphone_names()): # print(f"麦克风索引{index}: {name}") root = sr.Recognizer() # 能量阈值:高于这个值判定为人声,可根据环境噪音大小手动调整 root.energy_threshold = 4000 # 停顿阈值:说话停多久判定为本次输入结束,单位秒 root.pause_threshold = 0.8 # 要指定设备的话改成sr.Microphone(device_index=你的设备索引) with sr.Microphone() as source: # 校准环境噪音 root.adjust_for_ambient_noise(source, duration=1) print('Listening:') # 加时间限制:5秒内没人说话就超时,最多录制10秒自动停止 audio = root.listen(source, timeout=5, phrase_time_limit=10) try: print('识别中...') # 要识别中文必须加language参数,默认是英文识别 text = root.recognize_google(audio, language='zh-CN') print(f'识别结果:{text}') except sr.UnknownValueError: print('无法识别音频内容') except sr.RequestError as e: print(f'请求谷歌识别服务失败:{e}') except sr.WaitTimeoutError: print('等待语音输入超时')
补充说明
谷歌在线语音识别需要网络能正常访问谷歌服务,若无法满足网络要求,可将识别引擎替换为离线的recognize_sphinx,中文识别精度会相对更低。
内容的提问来源于stack exchange,提问作者SinaSalehi
相关产品推荐
相关产品推荐

