Internal / SME security · 2024
Turning dumb security cameras into something that reports
A Python and OpenCV analytics layer that adds motion detection, object recognition and health monitoring to existing camera hardware.
- Role
- Sole developer
- Team
- Solo
- Timeline
- 2024

Outcomes
- Runs on-device, no continuous upload
- Edge
The problem
Small businesses have cameras that record and nothing else. Footage is only useful after something has already gone wrong, and only if someone sits and watches it. Worse, a camera that has quietly stopped working looks exactly like a camera where nothing is happening — so failures go unnoticed until the day the footage is needed.
Constraints
- Had to work with the cameras clients already owned — replacing hardware was not on the table
- Runs on edge devices, so the compute budget is small and fixed
- False positives are the failure mode that kills these systems: alert fatigue makes people ignore everything
- No reliable bandwidth assumption — it cannot depend on streaming everything to a server
Approach
Detection runs at the edge, on the device next to the camera, so only events travel over the network rather than continuous video. Motion detection acts as a cheap first pass and object recognition only runs on frames that pass it, which is what makes the compute budget work. Alongside detection, the system tracks camera health — a camera that stops producing frames raises an event just like an intruder would, because a silently dead camera is the more common and more expensive failure.
What I rejected, and why
Streaming all footage to a server for central processing
It assumes bandwidth these sites don't have, and it moves the cost from a one-off edge device to a permanent data bill.
Running object recognition on every frame
The edge compute budget doesn't allow it, and it isn't needed — the overwhelming majority of frames contain nothing.
Architecture
The hard part
Making the alerts trustworthy. A system that cries wolf gets muted, and a muted system is worth nothing — so precision matters far more than recall here. Most naive motion detection fires on changing light, moving foliage, rain and insects near the lens. Getting the false positive rate low enough that a human still reads the alerts, without tuning it so tight that it misses real events, was the whole difficulty of the project, and it's much more about understanding the specific site than about the algorithm.
What I'd do differently
The hard part of an ML-adjacent product is almost never the model. It was the alerting policy, the health monitoring and the tuning against one specific site's conditions — the unglamorous work that decides whether anyone keeps the system switched on.
Stack
- Python
- OpenCV
- Computer Vision
- Automation
- Docker
- REST APIs