如何让Python的speech_recognition模块提取语音作为YouTube搜索查询词
问题解决方案
1. 解决「在Microsoft Store中查找应用」弹窗问题
该弹窗是Windows系统默认的Python别名指向应用商店导致的,按以下步骤关闭即可:
- 打开Windows设置,依次进入「应用」→「高级应用设置」→「应用执行别名」
- 在列表中找到两个「应用安装程序」对应的
python.exe、python3.exe选项,将二者的开关全部关闭 - 按下Win+R输入cmd打开命令提示符,执行
python --version,正常返回Python版本号即配置生效
2. 修复语音识别无效、搜索功能异常问题
你现有代码存在多处逻辑错误,是语音内容无法正常获取、搜索失败的核心原因:
- 逻辑顺序错误:录音后先调用了
input()要求手动输入搜索词,完全没有用到语音识别结果 - URL拼接错误:搜索词和YouTube基础地址顺序写反,且YouTube搜索参数不是
?q=,拼接后的地址完全无法正常搜索 - 缩进错误:语音识别的try-except块放在了麦克风上下文管理器外部,且还没执行识别逻辑就提前退出了Selenium driver
- 功能冗余:同时初始化了Selenium driver和调用webbrowser打开网页,二者功能重复
修正后的可运行代码
import webbrowser from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium import webdriver import speech_recognition as sr import pyttsx3 # 初始化Selenium(如果不需要模拟浏览器操作可以删掉这部分,直接用webbrowser即可) service = Service('C:\\Users\\Admin\\PycharmProjects\\pythonProject\\chromedriver.exe') chrome_options = Options() chrome_options.add_argument(r'--user-data-dir=C:\\Users\\Admin\\AppData\\Local\\Google\\Chrome\\User Data\\Default') chrome_options.add_argument(r'--profile-directory=Rohan') driver = webdriver.Chrome(service=service, options=chrome_options) # 初始化语音识别和语音合成 r = sr.Recognizer() engine = pyttsx3.init() voices = engine.getProperty('voices') engine.setProperty('voice', voices[0].id) # 第一次监听唤醒词 with sr.Microphone() as source: # 校准环境噪声,提高识别准确率 r.adjust_for_ambient_noise(source, duration=0.5) print('Listening...') engine.say("Hey I'm your bot, Trevor! What can I do for you today?") engine.runAndWait() audio = r.listen(source) try: wake_word = r.recognize_google(audio) # 识别到YouTube指令后执行搜索逻辑 if 'YouTube' in wake_word: with sr.Microphone() as source: r.adjust_for_ambient_noise(source, duration=0.5) print("请说出你要搜索的内容:") engine.say("请说出你要搜索的内容") engine.runAndWait() audio = r.listen(source) # 识别语音搜索词 search_keyword = r.recognize_google(audio) print(f"识别到搜索词:{search_keyword}") # 拼接正确的YouTube搜索链接 search_url = f"https://www.youtube.com/results?search_query={search_keyword}" # 两种打开方式二选一即可: # 方式1:用webbrowser打开 webbrowser.open_new_tab(search_url) # 方式2:用Selenium打开(把上面webbrowser那行注释掉,启用下面两行) # driver.get(search_url) driver.quit() except sr.UnknownValueError: print("无法识别语音内容") engine.say("无法识别你说的内容") engine.runAndWait() except sr.RequestError: print("语音识别服务请求失败") engine.say("语音识别服务暂时无法使用") engine.runAndWait()
补充说明
- 如果还是识别不到语音,可以调整麦克风输入音量,或者在
r.listen(source)中添加timeout=5, phrase_time_limit=10参数限制录音时长 - 不需要模拟浏览器操作的话可以删掉所有Selenium相关代码,仅保留webbrowser打开链接的逻辑即可
内容的提问来源于stack exchange,提问作者Eagle27
相关产品推荐
相关产品推荐

