Manjaro下使用Speech Recognition包出现UnknownValueError如何解决
报错属性确认
你遇到的speech_recognition.UnknownValueError并非Alsa Lib相关问题导致。Alsa作为Manjaro等Linux发行版的底层音频驱动组件,如果出现故障,错误会在sr.Microphone()初始化、r.listen()音频采集阶段提前抛出,不会在调用语音识别接口的步骤才触发该报错。
报错核心原因
该错误的触发逻辑是Google语音识别接口返回的结果中没有可解析的有效语音文本,常见触发场景包括:
- 采集到的音频只有环境噪音,没有录入有效语音,或是有效语音音量过低、被环境噪音完全覆盖
- 环境噪音校准时长不足:
adjust_for_ambient_noise默认校准时长为1秒,如果你所处环境噪音波动较大,校准未完成就开始录音,会导致后续有效语音被误判为噪音过滤 - 语言参数不匹配:
recognize_google默认按英文识别,如果你录入的是中文等其他语言,大概率会识别失败抛出该错误 - 网络异常:无法正常访问Google语音识别接口,或是接口返回的结果为空、结构不符合预期
修复方案
- 给代码添加异常捕获逻辑,同时调整校准时长、指定对应识别语言,参考代码如下:
import speech_recognition as sr r = sr.Recognizer() mic = sr.Microphone() with mic as source1: # 延长环境噪音校准时长到2-3秒,适配复杂噪音环境 r.adjust_for_ambient_noise(source1, duration=2) print("请开始说话:") audihearing = r.listen(source1) try: # 识别中文指定language为zh-CN,识别英文可省略该参数或改为en-US print(r.recognize_google(audihearing, language='zh-CN')) except sr.UnknownValueError: print("未识别到有效语音内容,请靠近麦克风、降低环境噪音后重试") except sr.RequestError: print("无法连接到Google识别服务,请检查网络或替换其他识别接口")
- 检查系统麦克风输入配置:在Manjaro的系统设置中确认麦克风输入设备选择正确,输入音量没有被限制在过低水平,测试录音功能正常
- 如果你无法正常访问Google服务,可以替换为其他识别接口,比如离线的
recognize_sphinx、国内可访问的recognize_baidu等,不需要修改音频采集逻辑,只需要替换识别调用语句即可
内容的提问来源于stack exchange,提问作者Dheeraj-Tech
相关产品推荐
相关产品推荐

