One incident per person. Not one per frame.
Safety Vision reads the alarm frames your VMS already writes, checks PPE and restricted zones, follows the person across frames, and opens a single incident that lasts as long as the violation does. Cameras stay where they are. Footage stays in your bucket.
VMS alarm
POST /v1/safety/alarms
Your bucket
frame fetched by role or key
Detector
helmet · vest · zone
Tracker
same person, many frames
Incident
opened → reviewed → closed
The problem
Frame-counting is why the last system got switched off
Judge every frame on its own and a worker standing bare-headed for four minutes is not one problem — he is several hundred, one per analysed frame, each counted and each notified. The KPI ends up measuring the recorder's frame rate, the alerts arrive faster than anyone can dismiss them, and both get abandoned.
Counting frames
240 alerts
Every analysed frame is its own violation. The dashboard says the site got worse when all that changed was the capture rate, and nobody can clear the queue.
Counting people
1 incident
The same four minutes, as one episode with its evidence frame, its duration and its reviewer decision. Two webhooks: one when it opens, one when it resolves.
What it does
Built around the person, the zone and the reviewer
Episodes, not frames
One incident per camera, rule and tracked person, held open while the violation continues and closed when it ends. A worker bare-headed for four minutes is one record with roughly 240 alarms attached — not 240 notifications.
- A person who leaves and returns merges back into the same episode
- Near-identical frames from a recorder burst are deduplicated first
- Two agreeing frames required before an incident opens
Rules per zone, per camera
Draw zones on the camera view and give each one a job: require PPE, treat as restricted, ignore entirely, or grant a grace period where people are expected to be changing.
- Helmet, high-visibility vest and restricted-zone rules
- Advisory mode to watch a rule before it starts alerting
- Night hinting so the vest rule is not fooled by infrared
A reviewer decides what counts
Every closed incident carries its evidence frame and waits for a person to confirm or dismiss it. Reports count only what a reviewer closed, so an open or cooling episode can never inflate a number.
- Confirm or dismiss, with the reason kept on the record
- Live open incidents are a monitoring view, never a metric
- Reviewer agreement tracked as its own quality measure
Numbers that survive a board meeting
Incidents by rule, by camera and by hour. Precision reported alongside coverage, so a good-looking number cannot hide a detector that stopped firing. Pipeline health and failures on the same screen.
- Cross-site rollup for groups running several locations
- CSV export and branded PDF reports
- Ingest, detection and delivery failures surfaced, not buried
What it needs from you
Three things, and none of them are new hardware
If your VMS can post an alarm and your bucket can be read, the pilot can start.
An alarm feed
Your VMS posts to a per-site token with the camera, the rule and where the frame landed. Or poll for incidents instead — the payload is identical to the webhook.
Read access to your frames
A cross-account role or a key pair for your own S3 bucket. Frames are read, never copied wholesale; only the peak evidence frame is kept, and a daily sweep expires it on your schedule.
Someone to review
One person who confirms or dismisses. That decision is what makes an incident count, and it is what keeps the precision figure honest.
Safety Vision is onboarding pilot sites rather than selling seats. We would rather tune the rules on your cameras with you than hand you a signup form and hope the defaults fit your floor.
Bring us one camera and one rule
Start with a single camera on the rule that matters most. If the incident count matches what your supervisors would have counted by hand, widen it.