Python 3.10.4用SpeechRecognition 3.9.0调用Microphone遇AudioSource及AttributeError
解决语音识别代码的AssertionError与AttributeError问题
问题分析
你的代码报错本质是麦克风设备初始化失败,导致sr.Microphone()没有生成有效的音频源对象:
AssertionError提示音频源未正确进入上下文,实际是source对象无效;- 后续的
AttributeError是with语句结束时,尝试对NoneType的source调用close()方法导致。
解决方案
1. 确认并指定正确的麦克风设备索引
先运行以下代码列出所有可用音频设备,找到对应麦克风的索引:
import speech_recognition as sr for index, name in enumerate(sr.Microphone.list_microphone_names()): print(f"设备索引 {index}: {name}")
根据输出结果,将sr.Microphone(device_index=你的设备索引)替换到代码中。
2. 确保PyAudio版本与环境兼容
- 卸载现有PyAudio:
pip uninstall pyaudio -y - 安装与你的Python版本、系统位数完全匹配的PyAudio版本,重新安装后测试。
3. 优化代码的异常处理与初始化逻辑
使用更健壮的代码结构,提前捕获麦克风初始化异常:
import speech_recognition as sr r = sr.Recognizer() # 获取并选择正确的麦克风设备 mic_names = sr.Microphone.list_microphone_names() target_device_idx = 0 # 自动筛选带"麦克风"标识的设备(可根据实际设备名调整) for idx, name in enumerate(mic_names): print(f"{idx}: {name}") if "麦克风" in name: target_device_idx = idx break try: with sr.Microphone(device_index=target_device_idx) as source: print("请说话...") # 先校准环境噪音,提升识别准确率 r.adjust_for_ambient_noise(source, duration=0.5) audio = r.listen(source) try: # 指定中文识别,可选其他语言 voice_data = r.recognize_google(audio, language="zh-CN") print(f"识别结果:{voice_data}") except sr.UnknownValueError: print("无法识别语音内容") except sr.RequestError: print("无法连接到语音识别服务") except OSError as e: print(f"麦克风初始化失败:{str(e)}") except Exception as e: print(f"发生未知错误:{str(e)}")
内容的提问来源于stack exchange,提问作者Fred Durst
相关产品推荐
相关产品推荐

