Custom Wake Word on ESP32-S3 with INT8 TFLite Micro
The open-source ESP32 component accepts 16 kHz PCM, extracts Mel features and runs an INT8 TFLite wake-word model locally. Live microphone audio does not need a cloud inference service.
Measured performance
On the tested board, Mel extraction takes approximately 28.5–33 ms and TFLite Invoke() approximately 154.9–155.7 ms. The newest 98-frame window is scheduled every 160 ms. Results vary by model and target.
Run the tested example
The public demo detects Hey Robot, then accepts commands that change an LED color. The model file and head.h are a matched pair and must be replaced together.
git clone https://github.com/voicute/onnx-wakeword.git
cd onnx-wakeword/esp32/examples/esp32s3_hmi_devkit
idf.py set-target esp32s3
python patch_led_strip.py
idf.py build
idf.py -p COM6 flash monitor
Use your own wake word
A training pipeline can export a matched INT8 TFLite model and head for a custom English, German, French, Japanese or Chinese phrase. Evaluate the Basic model first, then validate it again on the final microphone, distance and background noise. Keyword-specific false triggers may require examples of those sounds as custom negative data.
Open ESP-IDF component and tested example: onnx-wakeword/esp32.