ESP32 Thermal TinyML
1 language| Type | Interactive demo |
|---|---|
| Origin | ECE 140 at UC San Diego |
| Developer | David |
| Written in | ESP32-S3, TensorFlow/Keras, TFLite Micro, TypeScript |
| Tests | Feature pipeline and INT8 kernels tested against Python and the TFLite interpreter |
| Built with | ECE 140 hardware-track labs turned into a live TinyML pipeline |
| Hosted on | David-Internet/demos/esp32 |
| Website | https://david-internet.vercel.app/demos/esp32 |
ESP32 Thermal TinyML is an interactive demonstration of a TinyML pipeline that classifies whether a person is present from an 8 by 8 thermal image. It was built from ECE 140 coursework at UC San Diego and is hosted on David's Internet. The page runs every stage in the browser: the camera stream, three network transports, a 76-feature extractor, and a 6,672-byte INT8 model whose kernels match TensorFlow Lite integer arithmetic.[1]
The hardware origin is an AMG8833 thermal array on an ESP32-S3. The class dataset holds 22,054 frames. About 500 anonymized frames ship with the demo. Course scaffolding for WiFi and MQTT came from ECE 140 staff; the completions, tests, and deployed model are David's.
Overview
Visitors can scrub a thermal stream, watch the same frame travel as serial CSV, MQTT, and WebSocket traffic, and see a breadth-first flood fill mark the largest warm region. A side panel compares float32 and INT8 activations, then reports a present or empty verdict on the live stream. A separate WiFi net-map panel replays a lab assignment that posted ESP32 scans to a FastAPI server; the scans on the page are synthetic so they do not identify neighbors.
Pipeline
Each frame is normalized against its own median. Intensity statistics and spatial features, including the largest connected warm blob, produce a 76-dimensional vector. A dense network (76→32→16→1) was trained with GroupKFold by student and quantized to INT8. The TypeScript port of the feature code and the integer kernels is checked against fixtures taken from features.py and the TFLite interpreter, so a later rewrite cannot silently drift from the original assignment.
Development
The demo was assembled on 31 August 2026 from the ECE 140 labs and tech assignments. An earlier spec described a 65-feature tutorial pipeline; the deployed assignment uses 76 features, and 76 is what the page runs. Feature pipeline and INT8 kernels tested against Python and the TFLite interpreter.
See also
References
- ^
content/esp32/README.md, David's Internet.
- Interactive demos
- Machine learning
- Embedded systems
- 2026 establishments