Back to home

2026 · Team of 3 — embedded firmware, ML & full-stack

KatEye

Edge ML for driving behavior + a ~5k params Convolutional Neural Network that classifies 9 driving events from IMU data on an ESP32, fed by the KatEye data-collection pipeline.

KatEye project preview
1D CNNESP32TinyMLFirebaseNode.jsTensorFlowLiteRT

KatEye is an edge-ML system for driving-behavior detection. Trucks throw off constant streams of motion data, but shipping raw sensor readings to the cloud to flag risky driving is slow and power-hungry -- so I built a 1D CNN that recognizes driving events directly on the device, with no network round-trip.

The classifier reads 6-axis accelerometer + gyroscope data and labels 9 events -- accelerate, brake, left, right, their aggressive variants, and idling -- in real time on an ESP32-S3. It's a deliberately tiny 1D CNN (~5,100 parameters): two Conv1D layers, max pooling, dropout, and dense layers over a 7-timestep, 6-channel window. I trained it with Stratified Group K-Fold by driver to prevent leakage, balanced class weights, and early stopping, then quantized to INT8 (248 KB) so it fits in the ESP32's 512 KB of SRAM.

A model is only as good as its data, and no labeled IMU dataset existed — so I built KatEye, the end-to-end pipeline that produces one. A car-mounted ESP32 + MPU6050 records fixed 560×6 windows (56 Hz × 10 s), sampled from a hardware-timer ISR and with WiFi disconnected mid-recording to keep the time axis jitter-free. Readings are bias-corrected and gravity-compensated on-device, so every capture comes out CNN-ready with no downstream windowing or padding.

Capture is driven from a web dashboard: Firebase Realtime Database carries the live control channel (trigger + label to the device; countdown, progress, and status back to the UI), while Firestore durably stores each labeled recording with its calibration biases and six channel arrays. A thin Node/Express server serves the dashboard, keeps Firebase keys server-side, and flattens Firestore's typed-value format. One tap labels and records a maneuver -- with an audio cue so you can keep your eyes on the road -- making field collection in a moving car actually feasible.

The KatEye dashboard — calibration, one-tap maneuver labeling, recordings, and a live dual-axis plot of the 6-channel IMU capture (an aggressive-brake sample).
The KatEye dashboard — calibration, one-tap maneuver labeling, recordings, and a live dual-axis plot of the 6-channel IMU capture (an aggressive-brake sample).

OUTCOME

Built the full KatEye collection pipeline (ESP32 firmware -> Firebase -> dashboard) and a ~5,100-param 1D CNN quantized to INT8 (248 KB) for on-device inference.