You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Vosk等快速离线语音识别工具为虚拟助理设置唤醒词

为现有语音识别代码添加离线唤醒词触发功能

实现逻辑

选用轻量离线识别工具作为唤醒检测层,全程只在本地运行,只有检测到预设唤醒词后才会调用Google在线识别接口采集完整指令,从根源避免麦克风音频持续上传的隐私问题:

  • 第一阶段(持续离线监听):调用CMU Sphinx/Vosk离线识别实时检测音频,仅匹配预设唤醒词,匹配失败则丢弃音频继续监听
  • 第二阶段(在线指令采集):唤醒词命中后,调用原有Google识别逻辑采集用户指令,指令识别完成后自动切回离线监听状态

前置依赖安装

如果用CMU Sphinx(和现有SpeechRecognition库兼容性最好,改动最小):
pip install pocketsphinx
如果用Vosk(识别准确率更高,支持自定义唤醒词更灵活):
pip install vosk

基于Sphinx的修改后代码示例

import speech_recognition as sr

# 自定义唤醒词,可根据需求修改
WAKE_WORD = "hey google"

def detect_wake_word():
    """离线检测唤醒词,仅本地运行"""
    r = sr.Recognizer()
    with sr.Microphone() as source:
        r.chunk_size = 2048
        r.adjust_for_ambient_noise(source)
        audio = r.listen(source)
    try:
        # 用离线Sphinx识别检测唤醒词
        text = r.recognize_sphinx(audio).lower()
        return WAKE_WORD in text
    except:
        return False

def takeCommand():
    """原有Google在线识别逻辑,仅唤醒后调用"""
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("已唤醒,正在听指令...")
        r.chunk_size = 2048
        r.adjust_for_ambient_noise(source)
        audio = r.listen(source)
    try:
        print("正在识别指令....")
        query = r.recognize_google(audio, language='en-in')
        print(f"你说的是: {query}\n")
    except Exception as e:
        print(e)
        print("请再说一遍...")
        return "None"
    return query

# 主运行逻辑
if __name__ == "__main__":
    while True:
        print("等待唤醒...")
        if detect_wake_word():
            print("唤醒成功!")
            command = takeCommand()
            # 这里可添加后续指令处理逻辑
            print(f"处理指令: {command}")
            # 指令处理完成后自动回到等待唤醒状态

优化说明

  • 如果对Sphinx的唤醒准确率不满意,可以替换成Vosk实现,自定义唤醒词的匹配精度更高,还支持中文唤醒词
  • 可以给唤醒检测添加阈值过滤,避免误触发,比如连续两次检测到唤醒词才进入在线识别阶段
  • 唤醒后可以添加提示音反馈,让用户明确知道现在可以说指令

内容的提问来源于stack exchange,提问作者Snipey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:30:01