基于Python SpeechRecognition库检测唤醒词ODI的误识别问题求助
可行解决方案如下:
1. 修正关键词检测阈值
你之前设置的阈值1、1e+20都是无效配置,pocketsphinx的关键词阈值应为负指数级数值,数值越小对匹配精度要求越高:
- 初始建议设置为
1e-15,再根据实际使用场景调整:如果误判多就再调低到1e-20左右,如果漏判多就调高到1e-10左右 - 修正后的关键词参数写法为:
keyword_entries=[('ODI', 1e-15)]
2. 自定义关键词发音,避免复用现有单词
没必要强行用发音接近的ode,可以直接为ODI添加自定义发音,完全匹配你的目标读音:
- 新建一个纯文本字典文件,比如命名为
odi_dict.dic,内容写一行:ODI OW D IY
(上述为CMU音标,对应发音就是你要的"ODI"读音) - 调用
recognize_sphinx时添加字典参数:dict='odi_dict.dic',这样就不会和现有英文单词的发音判定混淆。
3. 修正监听逻辑
你当前的代码逻辑有问题:同一段音频既做关键词检测又做指令识别,无法实现「检测到关键词后再录后续指令」的效果,应调整为两步循环逻辑:
- 第一步:开常驻循环,用pocketsphinx持续监听,仅做关键词检测,不需要全量语音识别
- 第二步:检测到关键词后,立刻启动新的录音流程,录制接下来的用户指令音频,单独传给Google识别器处理
4. 增加误判过滤机制
可以加简单的逻辑过滤偶发误判:
- 连续2次检测到关键词才触发后续指令录制,单次识别到直接忽略
- 限制关键词检测的音频长度,单次录音最长1秒,避免把长段语音误识别为关键词
修正后的参考代码
import speech_recognition as sr import time class ODI_Assistant: def __init__(self): self.recognizer = sr.Recognizer() self.microphone = sr.Microphone() # 自定义关键词阈值,可根据效果调整 self.keyword_threshold = 1e-15 # 自定义字典路径 self.custom_dict = "odi_dict.dic" def detect_keyword(self): """持续检测关键词,检测到返回True""" with self.microphone as source: self.recognizer.adjust_for_ambient_noise(source, duration=0.5) audio = self.recognizer.listen(source, phrase_time_limit=1) try: transcript = self.recognizer.recognize_sphinx( audio, language='en-us', keyword_entries=[('ODI', self.keyword_threshold)], dict=self.custom_dict ).lower() return "odi" in transcript except: return False def get_command(self): """检测到关键词后录制并识别指令""" print("检测到ODI,正在接收指令...") with self.microphone as source: audio = self.recognizer.listen(source, phrase_time_limit=3) try: return self.recognizer.recognize_google(audio, language='en-ie').lower() except: print("指令识别失败,请重试") return None def run(self): """主循环""" print("ODI助手已启动,等待唤醒...") detect_count = 0 while True: if self.detect_keyword(): detect_count +=1 # 连续2次检测到才触发,过滤误判 if detect_count >=2: command = self.get_command() if command: print(f"识别到指令:{command}") # 这里加你的指令处理逻辑 detect_count = 0 time.sleep(0.5) else: detect_count = 0 time.sleep(0.1)
内容的提问来源于stack exchange,提问作者Dev_elop_er_
相关产品推荐
相关产品推荐

