尚未检测到更新。GitHub 发布版本后会显示在这里。
Open-source, fully offline wake word / keyword spotting (KWS) inference engine — ONNX/TFLite <130KB, multi-keyword, multilingual. Train a custom wake word online with auto hard-negative mining; deploy on ESP32 / Raspberry Pi / Android / Web / Windows / macOS / Linux / Home Assistant — runs on any ONNX/TFLite-capable device.
翻译准备中
正在加载完整 README。
查看完整 README ↗KWS · Keyword Spotting · Wake Word · Custom Wake Word · ONNX · ESP32 · Android · Home Assistant · Wyoming · Offline · Privacy-First · Open Source
100% offline · No audio upload · Model < 130KB · ESP32 / Android / Python / Web
The complete runtime path — audio preprocessing, Mel feature extraction, model execution, matched-head evaluation, and wake-word detection logic:
Audio → Mel features → Keyword TCN model → Matched classification/prototype head → Detection logic → Result
Designed for keyword models built on a causal temporal convolutional network (Causal TCN) with a matched classification or prototype-based head. Training pipeline fully self-developed.
models/ (7 languages) let you test the full pipeline at zero costThe fastest path is training online at voicute.com:
model.zip — load it offline on any platform aboveSupported languages: Chinese, English, German, French, Japanese, Spanish, and Hindi — more languages coming. No API calls, no subscription after download; see voicute.com for licensing.
| Platform | Directory | Entry Point |
|---|---|---|
| Web | web/ | wakeword.js → VoicuteWakeWord.create() |
| Python | python/ — Linux / Windows / macOS / Raspberry Pi | pip install onnx-wakeword → WakeWordEngine() |
| Android | android/ | WakeWordEngine.java |
| ESP32 | esp32/ | ESP-IDF component |
| Home Assistant | wyoming/ | wyoming_voicute.py → Wyoming protocol |
onnx-wakeword is a two-part system: custom keyword models trained online, then a fully offline runtime.
model.zip, load it on any supported platform — browser, desktop, Android, ESP32, Home Assistant.Your trained model runs completely offline from this point on — no API calls, no monthly fees, no telemetry. Your audio never leaves your device during inference. For testing before you generate a custom keyword, run the demo models included in models/ (中文 / English / Deutsch / Français / Español / हिन्दी) using the same pipeline at zero cost.
Tested on v9.3 models.
| Metric | Value |
|---|---|
| ONNX size | ~128KB (FP32) / ~74KB (INT8) |
| Desktop inference | <5ms / frame |
| ESP32-S3 TFLite Invoke (included demo) | ~51ms / frame (live AFE demo) |
The isolated Invoke() baseline is about 39.5–40.2 ms; the published ~51 ms figure includes the live ESP-SR AFE pipeline and its scheduling/cache contention.
Held-out Azure TTS, 400 samples × varied speed/pitch/volume; sliding-window peak detection:
| Keyword | Language | Recall |
|---|---|---|
| 你好小娜 (optimized) | ZH | 100% |
| Hey Jarvis (optimized) | EN | 99.0% |
| Salut Nova (optimized) | FR | 100% |
| Apfelstrudel (optimized) | DE | 98.5% |
| みらい (optimized) | JA | 100% |
| 小娜 (optimized) | ZH | 98.3% |
| 豆包豆包 (optimized) | ZH | 100% |
| Hola Orion (optimized) | ES | 99.3% |
| हैलो तारक (optimized) | HI | 99.3% |
| Hey Robot | EN | 100% |
| サクラ (Sakura) | JA | 100% |
| Apfelstrudel (base) | DE | 99.4% |
| Monsieur Sadin | FR | 100% |
| Croissant | FR | 90.3% |
"(optimized)" rows are false-trigger optimized models (hard-negative mining retrain, see below); unmarked rows are base demo models.
Across 20 recently trained keywords (5 languages): recall 90.3%–100%, mean 98.8%, 20/20 ≥ 90%.
Real-voice recall reaches 90%+ with 5 user recordings added during training.
False-trigger optimization: before vs after (each keyword measured on its own held-out negative corpus — same-language Common Voice read speech + music + household noise/silence, held out from training; bare model, threshold 0.5, 40ms sliding window, counted per triggered file):
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗