AI & LLM · camera.edgeCI passing

Real-Time Video Intelligence

Camera analytics on one CPU core: tracking, line counts, intrusions, left bags and wrong-way vehicles.

Open the live demo View the code Evaluation report Demo tour Run it ›_ last push 2 days ago

0.815 / 0.757MOTA / IDF1 on held-out scenes (centroid tracker: 0.788 / 0.595)

0.98 / 0.92precision / recall counting line crossings with direction

25-59 fpson one CPU core at 640x360, with lighting changes, shake and noise

Annotated camera frames: tracked people and vehicles, counting lines, zones and the alert that fired
Annotated camera frames: tracked people and vehicles, counting lines, zones and the alert that fired. Screenshot from the project's demo (synthetic data).

demo Demo tour

Screenshots from the running application, with its synthetic demo data. Select one to enlarge.

Annotated frames at the moment each alert fired: loitering, a wrong-way vehicle, a left bag and an intrusion.
Annotated frames at the moment each alert fired: loitering, a wrong-way vehicle, a left bag and an intrusion.
The dashboard: live cameras with tracks, counts for the last 24 hours and the alert feed.
The dashboard: live cameras with tracks, counts for the last 24 hours and the alert feed.
Tracking and alert accuracy on held-out scenes against two simpler designs, and what each stage buys.
Tracking and alert accuracy on held-out scenes against two simpler designs, and what each stage buys.

01 The problem

Security cameras produce hours of footage nobody watches. Useful alerts (someone in a restricted area, a bag left behind, a car against the flow) must arrive in seconds, survive lighting changes and camera shake, and run on ordinary hardware.

02 How it works

  1. Frame
  2. Stabilise and normalise lighting
  3. Background model and blobs
  4. Kalman + Hungarian tracker
  5. Alert rules
  6. Store, dashboard, questions

03 What I built

  • A pipeline on OpenCV: stabilisation, lighting normalisation and a background model at half resolution; a Kalman filter per track with Hungarian assignment; a dual-rate background model that keeps still people tracked and finds newly left objects.
  • Alert rules for line crossings with direction, zone intrusion, loitering, abandoned objects and wrong-way vehicles; a live runner that drops frames rather than delaying alerts; a dashboard and API.
  • Claude answering questions about the alerts through strict query tools, and an evaluation on rendered scenes with exact ground truth, with development, three validation rounds and an untouched test set.

04 What I learned

Each validation round exposed a real failure the development scenes never exercised: people sitting still faded into the background, camera shake created phantom left bags once stabilisation was off, and loitering counted tracked frames instead of time.

The Kalman tracker barely moved MOTA over a centroid tracker (+0.03) but raised IDF1 from 0.60 to 0.76, which is what made crossing counts right.

05 Known limitations

Every repository documents what it doesn't do yet. The main ones:

  • Rendered scenes, not real footage: no shadows, reflections or perspective.
  • Loitering found 3 of 8 times on the test scenes; reported rather than tuned away.

06 Stack

PythonOpenCVNumPySciPyClaude APIFastAPI

The repository has the design document, operations runbook, full evaluation report and known limitations. All data is synthetic, generated by code in the repository.

run Run it yourself

Every project runs on a laptop: no cloud account and no paid API needed.

git clone https://github.com/codeROCK-IZZY/video-intelligence-platform.git
cd video-intelligence-platform
pip install -e ".[dev]" && pytest
vidint evaluate --gate                     # writes eval/reports/report.html

↑↓ to move · Enter to open · Esc to close