| --- |
| license: apache-2.0 |
| language: |
| - en |
| library_name: openwakeword |
| tags: |
| - wake-word |
| - keyword-spotting |
| - openwakeword |
| - onnx |
| - tflite |
| - voice-assistant |
| - on-device |
| - adi |
| pipeline_tag: audio-classification |
| --- |
| |
| <img src="https://serve.thelabsource.com/u/VEshKD.png" alt="hey-adi-wakeword" width="800"> |
|
|
| # hey-adi-wakeword |
|
|
| Custom-trained **"Hey ADI"** wake word model for the [OpenWakeWord](https://github.com/dscripka/openWakeWord) framework. Built to trigger the **ADI Genesis** offline voice assistant pipeline at theLAB. |
|
|
| Wake phrase: **"hey addie"** |
|
|
| π **Build writeup:** [How this wake word was trained](https://thelabsource.com/projects/custom-wake-word.php) |
|
|
| π₯ **Demo video:** |
|
|
| <a href="https://www.youtube.com/watch?v=BSkMgP5AfXw"><img src="https://img.youtube.com/vi/BSkMgP5AfXw/hqdefault.jpg" alt="Hey ADI Wake Word Demo" width="600"></a> |
|
|
| --- |
|
|
| ## Files |
|
|
| | File | Format | Size | Runtime | |
| |------|--------|------|---------| |
| | `hey_addie.onnx` | ONNX | 206 kB | onnxruntime | |
| | `hey_addie.tflite` | LiteRT (TFLite) | 207 kB | tflite-runtime | |
|
|
| Both files are functionally equivalent β pick the runtime that fits your deployment target. ONNX for desktop/server, TFLite for edge/embedded. |
|
|
| --- |
|
|
| ## Pipeline |
|
|
| This wake word is the front door to a fully offline voice stack: |
|
|
| OpenWakeWord ("hey addie") β Parakeet STT β Ollama (advanced-data-intelligence:e4b) β OmniVoice TTS (adi_ref voice) |
| |
| No cloud dependencies β wake detection through response generation runs entirely on local hardware. |
| |
| --- |
| |
| ## Usage |
| |
| ### ONNX (onnxruntime) |
| |
| ```python |
| from openwakeword.model import Model |
| |
| model = Model( |
| wakeword_models=["hey_addie.onnx"], |
| inference_framework="onnx", |
| ) |
|
|
| # frame = 16kHz, 16-bit mono PCM audio chunk (1280 samples / 80ms) |
| prediction = model.predict(frame) |
| score = prediction["hey_addie"] |
| |
| if score > 0.5: |
| print("Wake word detected") |
| ``` |
| |
| ### TFLite (tflite-runtime) |
| |
| ```python |
| from openwakeword.model import Model |
| |
| model = Model( |
| wakeword_models=["hey_addie.tflite"], |
| inference_framework="tflite", |
| ) |
|
|
| prediction = model.predict(frame) |
| score = prediction["hey_addie"] |
| ``` |
| |
| ### Audio requirements |
| |
| - **Sample rate:** 16 kHz |
| - **Channels:** mono |
| - **Format:** 16-bit PCM |
| - **Frame size:** 1280 samples (80 ms) per `predict()` call |
| |
| --- |
| |
| ## Threshold tuning |
| |
| | Threshold | Behavior | |
| |-----------|----------| |
| | `0.3` | More sensitive β more false activations | |
| | `0.5` | Balanced (recommended starting point) | |
| | `0.7` | Stricter β fewer false activations, may miss quiet/distant speech | |
| |
| Tune to your microphone and room acoustics. |
| |
| --- |
| |
| ## Intended use |
| |
| On-device wake word detection for offline voice assistants. Designed for the ADI Genesis stack but works with any OpenWakeWord-compatible application. |
| |
| ## Limitations |
| |
| - Trained for the English phrase "hey addie" β will not generalize to other phrases. |
| - Performance varies with microphone quality, background noise, and distance. |
| - Single-phrase model; pair with additional wake word models if you need multiple triggers. |
| |
| --- |
| |
| *Built in theLAB β Learning. Algorithms. Breakthroughs.* π¬ |