Skip to content

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
Camera analytics dashboard showing detected events and camera health

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

RTSPevery framecandidate frames onlyevents, not videocamera healthIP camerasEdge deviceMotion passObject recognitionEvent storeDashboard
How Internal / SME security fits together — dashed boxes are systems I did not own.

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