ESP32 Thermal TinyML

1 language
  • Article
  • Read
From Wikipedia, the free encyclopedia
This article is about the interactive demo. For the search engine that hosts it, see David's Internet.
ESP32 Thermal TinyML
TypeInteractive demo
OriginECE 140 at UC San Diego
DeveloperDavid
Written inESP32-S3, TensorFlow/Keras, TFLite Micro, TypeScript
TestsFeature pipeline and INT8 kernels tested against Python and the TFLite interpreter
Built withECE 140 hardware-track labs turned into a live TinyML pipeline
Hosted onDavid-Internet/demos/esp32
Websitehttps://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

  1. ^ content/esp32/README.md, David's Internet.