Python语音助手无法接收语音命令问题求助
问题诊断与修复方案
核心问题分析
你的语音助手反复输出“Say that again”,说明语音识别环节持续失败,同时greetMe模块本身存在依赖缺失问题,即使移到主文件也会影响功能触发。
一、语音识别失败的解决步骤
麦克风权限检查
确保Python程序有权限访问麦克风:- Windows:设置-隐私和安全性-麦克风,允许桌面应用访问麦克风
- macOS:系统设置-隐私与安全性-麦克风,勾选终端/IDE的权限
适配环境噪音
当前代码里的energy_threshold = 300可能不匹配你的环境噪音水平,建议添加环境噪音校准,并调整录音参数:with speech_recognition.Microphone() as source: print("Listening.....") r.adjust_for_ambient_noise(source, duration=1) # 自动校准环境噪音阈值 r.pause_threshold = 1 audio = r.listen(source, timeout=5, phrase_time_limit=4) # 调整超时参数,给足说话时间adjust_for_ambient_noise会根据当前环境自动设置合适的能量阈值,避免因噪音导致识别失败- 延长
timeout时间,防止还没说话就触发超时
网络与语音清晰度检查
recognize_google依赖网络,确保你的网络连接正常- 说话时靠近麦克风,发音清晰,尽量在安静环境测试
二、greetMe模块的修复
你的greetMe.py存在依赖缺失问题,直接导入会报错,修正如下:
# greetMe.py import datetime def greetMe(engine): hour = int(datetime.datetime.now().hour) if 0 <= hour <= 12: engine.say("Good Morning,sir") elif 12 < hour <= 18: engine.say("Good Afternoon,sir") else: engine.say("Good Evening,sir") engine.say("Please tell me, How can I help you ?") engine.runAndWait()
主文件调用时传递已初始化的engine实例,避免重复初始化:
# 主文件中唤醒后的调用部分 if "wake up" in query: greetMe(engine)
三、主文件的优化调整
- 将
greetMe的导入移到文件顶部,避免循环内重复导入:from greetme import greetMe - 细化异常捕获,明确识别失败的原因:
try: print("Understanding..") query = r.recognize_google(audio, language='en-in') print(f"You Said: {query}\n") except sr.UnknownValueError: print("Say that again") return "None" except sr.RequestError: print("Could not connect to Google Speech Recognition service") return "None"
修正后的完整主文件示例
import speech_recognition as sr import pyttsx3 from greetme import greetMe engine = pyttsx3.init("sapi5") voices = engine.getProperty("voices") engine.setProperty("voice", voices[0].id) engine.setProperty("rate", 170) def speak(audio): engine.say(audio) engine.runAndWait() def takeCommand(): r = sr.Recognizer() with sr.Microphone() as source: print("Listening.....") r.adjust_for_ambient_noise(source, duration=1) r.pause_threshold = 1 try: audio = r.listen(source, timeout=5, phrase_time_limit=4) except sr.WaitTimeoutError: print("No speech detected") return "None" try: print("Understanding..") query = r.recognize_google(audio, language='en-in') print(f"You Said: {query}\n") except sr.UnknownValueError: print("Say that again") return "None" except sr.RequestError: print("Could not connect to Google Speech Recognition service") return "None" return query if __name__ == "__main__": while True: query = takeCommand().lower() if "wake up" in query: greetMe(engine) while True: query = takeCommand().lower() if "go to sleep" in query: speak("Ok sir, You can call me anytime") break
内容的提问来源于stack exchange,提问作者muteeb
相关产品推荐
相关产品推荐

