1. Data source
Nothing loaded yet. Pick the SD card root (the folder that contains images/ and header/), or load a zip of it.
2. Classes and data
The firmware has exactly one class (NUM_CLASSES is compile-time), so there is no add/remove class. It trains only on the normal folder. The optional folder is browser-only: images that should look ANOMALOUS, used just to measure detection. The firmware ignores that folder.
Capture into:
Camera look (match the device; bench-tune):
REC
camera image (240x240, as saved)
Review steps through one class with a large viewer (arrows, X = mark bad).
3. Train
Model layout (compile-time #defines: paste them into the sketch)
Training settings
Browser-only (not in the firmware, so on-device training will differ):
Idle.
Lines to paste into the sketch
Risks: burst images are near-duplicates, which makes the held-out loss look better than it is. Browser file names (web_...) sort after device names (img_...), so "last N by name" may hold out only browser images.
4. Analyze
No model.
Bars: raw normality score per image (0 = anomalous, 1 = normal): normal (training), normal (held out), test anomaly. The line is the threshold. The device smooths scores over time (alpha below), so its numbers move less than these.
Most suspicious (lowest-scoring normals = possible bad data; highest-scoring test anomalies = missed)
5. Infer (live)
live image + last-conv-layer heatmap
6. Save
Existing myWeights.bin / myPrototypes.bin are copied to .bak first. Nothing is saved automatically.
7. Console
8. Serial monitor (Web Serial)
Close the Arduino IDE serial monitor first. Opening the port can reboot the board. Chrome or Edge only.
Device view
live ESP32 image (+ its conv map)
Waiting for a frame...