SuperAPI AI 工具集

wake-word-detection

智能体与模型

查看项目

更新于 10-15 12:34

技能介绍

用途

该技能用于在本地实现唤醒词检测(wake word detection),基于 openWakeWord 完成关键词识别与始终监听(always-listening)系统。典型用例包括语音助手激活短语检测(如“Hey JARVIS”)、低资源占用的持续监听,以及不依赖云端的离线唤醒词识别。技能定位为“具有 openWakeWord、关键词识别和始终监听系统深入专长的专家”。

主要能力

  • 隐私优先监听:本地处理音频,不向外部服务发送音频;最小化缓冲,只保留检测所需音频;非唤醒音频立即丢弃;提供易用的禁用/暂停功能。
  • 效率要求:平均 CPU 使用目标 <5%,内存占用目标 <100MB,检测延迟目标 <500ms,误报率目标 <1 次/小时。
  • 测试驱动开发:先写失败测试,再实现最小通过代码,最后进行完整验证,覆盖检测阈值、检测后缓冲区清理、CPU 占用与内存足迹等测试。
  • 误报抑制:通过确认窗口与最少确认次数机制,降低误报。
  • 性能优化模式:模型量化(ONNX Runtime 图优化)、预分配环形缓冲、VAD 预处理跳过静音推理、批量推理、内存映射模型加载。

使用方式

技术要求(requirements.txt)包括:openwakeword>=0.6.0、numpy>=1.24.0、sounddevice>=0.4.6、onnxruntime>=1.16.0。

实现流程采用 TDD:

  1. 先编写失败测试,例如在 tests/test_wake_word.py 中测试检测置信度阈值、检测后缓冲区是否清空、CPU 占用是否低于 5%、内存占用是否低于 100MB。
  2. 实现最小可让测试通过的代码,例如 SecureWakeWordDetector 类,使用 Model(wakeword_models=["hey_jarvis"]) 加载模型,通过 deque 维护音频缓冲,在 predict 结果超过阈值时清空缓冲并触发回调。
  3. 运行完整验证:
pytest tests/test_wake_word.py -v
pytest --cov=wake_word --cov-report=term-missing

文档提供了多种实现模式:安全唤醒词检测器(使用 sounddevice 输入流、1.5 秒缓冲、检测后立即清空)、误报抑制(confirmation_window 2 秒、min_confirmations 2 次、平均置信度 >0.6)、模型量化(ORT_ENABLE_ALL 与 CPUExecutionProvider)、高效环形缓冲、VAD 预处理(webrtcvad 判断是否语音再推理)、批量推理(predict_batch)以及内存映射模型加载(mmap)。

适用场景

适合需要本地、离线、隐私保护且资源占用受限的语音唤醒场景,例如桌面语音助手、嵌入式或常驻后台的监听系统。文档明确其风险等级为 MEDIUM,原因包括持续音频监控、隐私影响与资源约束。

限制与注意事项

  • 文档强调不得将音频写入磁盘,缓冲区应保持最小(<2 秒),检测后立即清空。
  • 性能目标(CPU <5%、内存 <100MB、延迟 <500ms、误报 <1 次/小时)为文档中列出的目标值,未提供在实际硬件上的验证结果。
  • 具体模型路径、阈值默认值(如 0.5)等以文档示例为准;未提供的内容暂未提供。
  • 提交前检查清单要求:所有测试通过、覆盖率 >80%、误报率测试、CPU 与内存测量、音频绝不落盘。