Manufacturing & Industrial Vision// diagnostic

Three hundred alerts a shift and nobody opens them

In short

A queue of 300 alerts a shift that nobody opens is almost never a supervisor problem. It is a system emitting 1 alert per detection instead of 1 incident per event: a person standing in a zone for 40 seconds is 1 thing that happened, and a detector running at 12 frames a second saw it 480 times. Fix aggregation, zone schedules and rule scope before anyone touches a confidence threshold.

Key takeaways

  • Instrument 3 counts before changing anything: alerts raised, alerts opened, alerts closed with a stated disposition.
  • A person in a zone for 40 seconds at 12 fps is 480 detections and 1 incident. Emitting per detection is the fault.
  • Aggregate detections to a track, tracks to an incident, then hold a cooldown per track, zone and rule.
  • Dwell time buys volume by spending latency, so it cannot be used on rules where the harm is instantaneous.
  • Set the interruption budget for the recipient first, then choose thresholds to fit it, not the other way round.

A shift that raises 300 alerts and closes 6 of them does not have a discipline problem. It has an aggregation problem: the system is emitting 1 alert per detection instead of 1 incident per event, and no amount of briefing will train a supervisor out of that. The same detector, with the same accuracy, produces a workable queue once detections are collapsed into events, zones are armed only when the hazard exists, and rules are scoped to the areas that have the hazard.

Nothing else on this page matters until the counts exist. Most safety analytics deployments report alerts raised and nothing else, which is the one number that cannot tell you whether the system is working. Raised against opened against closed is the whole diagnosis, and it takes an afternoon to instrument.

Raised, opened, closed: the 3 counts that end the argument

Pull one week of the notification log and group it by rule, by camera and by shift. Then join it to whatever the console records about human action. If the console records no human action, that is the first defect, because without it every conversation about alert quality is 2 people trading impressions.

CountHow to derive itWhat a bad value tells you
Alerts raised, per rule and per cameraGroup the notification log by rule and source over 1 shiftOne rule holding half the volume is a rule fault, not a site fault
Alerts openedAny human action: clip viewed, acknowledged, reassignedBelow 1 in 5, the queue was abandoned and the rest of the funnel says nothing
Alerts closed with a dispositionClosed as real, false, duplicate or out of scopeDispositionless closures destroy the only ground truth you get for free
Median minutes from raise to openTimestamp difference across opened alerts onlyA rising median leads abandonment; it moves before the open rate does
Duplicate shareAlerts sharing a rule, an area and a 60-second windowAbove a third, aggregation is the only change worth measuring
The instrumentation that turns a complaint into a diagnosis

Insist on the disposition field. It costs a supervisor 2 clicks and it is the only artefact that tells you later which cause was actually dominant on your site. A console that captures it, plus the rollup that reads it, is the sort of small system we build under internal tools and ops.

Five ways a shift gets to 300, in the order worth checking

These are ranked by volume removed per hour of engineering, not by how interesting they are. The last one is where most teams start, which is why the queue is still unworkable 3 months later.

CauseWhat it looks like in the logThe changeEffect on the count
One event per frame, per personBursts sharing a rule, an area and a few secondsAggregate detections to a track, tracks to an incident, with dwell and cooldownA 40-second presence becomes 1 record instead of hundreds
Zones armed outside the hazard's hoursTimestamps cluster into cleaning, changeover and maintenance windowsAn active schedule per zone and a named exception path for planned workRemoves a class of alerts that were never violations of anything
A rule applied where the hazard is notOne camera dominates a rule, and its alerts are correct but irrelevantScope the rule to the zones with the hazard, not to the siteFalls with the area removed, with no loss where it matters
Two cameras on one aisle, both alertingPairs of alerts seconds apart on adjacent overlapping viewsMap cameras to areas and deduplicate at area level, keeping both clipsRoughly halves the count inside every overlapped area
Genuinely low precisionOpened alerts closed as false, with no duplicate or schedule patternRe-site the camera, retrain the class, or retire the ruleThe most expensive fix, which is why it belongs after the other 4
Causes ranked by how much volume they remove for the work involved

Only the last row is a model problem, and even then the cause is usually physical. A rule firing on people who are wearing their hard hat is its own trace, worked through in tracing a false PPE violation. If the detector cannot see what it is being asked to judge, the decision moves back to placement, settled during the site survey that decides what the model can see, and to whether a learned detector was the right instrument at all rather than a geometric test, argued in deep learning versus rule-based machine vision.

One person, 40 seconds, 480 frames

The arithmetic is the argument. A detector running at 12 frames a second, watching someone stand inside a restricted zone for 40 seconds, produces 480 positive detections. Emit on each one and you have 480 alerts from a single thing that happened. Throttle to 1 a second and you have 40, which is still 40 notifications for 1 person who walked in and walked out. The unit of alerting has to be the incident, and the incident has to be constructed.

  1. Detect per frame, and stop there. Per-frame detections are evidence and belong in storage; they are not events and must never reach a person.
  2. Associate detections into a track. A track is 1 person across consecutive frames, with an identifier local to that camera. Everything downstream keys off the track.
  3. Open a candidate when a track satisfies a rule. Inside the zone polygon, no hard hat associated, forklift within a distance band: the rule tests the track, continuously.
  4. Apply a dwell threshold before a candidate becomes an incident. Three seconds of continuous satisfaction removes the transit case, where someone clips a corner of the polygon.
  5. Hold a cooldown keyed on track, area and rule. Re-entry inside it extends the open incident, so someone working at the boundary produces 1 record, not 20.
  6. Close on exit, and attach a clip with pre-roll and post-roll around the whole span rather than around 1 frame.

Deduplicating across cameras deserves one caution. Collapsing 2 alerts into 1 incident is right; discarding the second camera's clip is not. The angle you throw away is often the only one that shows what happened, and the cost of that decision only becomes visible during an investigation, which is the situation reconstructed in auditing camera coverage after an incident.

Zones armed while the hazard is switched off

A restricted zone around a press is a hazard while the press is energised. At 22:00, with the line down and the cleaning crew in, the polygon is still there and the rule is still running, and every mop produces a violation. This is the cheapest volume on the site to remove and the most commonly left in place, because arming logic is treated as configuration rather than as part of the rule.

  • Give every zone an active schedule. Shift patterns rather than clock hours, on a calendar that knows about planned shutdowns.
  • Interlock to machine state where a signal exists. If the controller can publish whether the press is energised, the zone should follow it rather than a timetable that drifts.
  • Write down the exception path. Maintenance inside a live zone needs a documented way to disarm it, with a named approver and an automatic re-arm, or people stop reporting.
  • Show armed state on the console. A disarmed zone that looks armed is worse than no zone, because it manufactures confidence in coverage that does not exist.
  • Do not use scheduling to hide a rule you no longer believe in. If it is off more than it is on, retire it and say so.

Which rules deserve a phone, and which deserve a page in the morning

Severity is not a property of the detector, it is a property of what the recipient is expected to do. Sorting rules into 3 response classes is what makes the real-time queue small enough to be credible, and it costs nothing technically.

Response classRules that belong hereChannelVolume this can carry
Intervene nowEntry inside an energised guard boundary, intrusion after hoursPush to the supervisor on shift, with an acknowledgement windowUnder 10 a shift, or the class stops being believed
Same shiftRepeat pedestrian entry into a forklift aisleConsole queue, read at the break and before handoverTens, if each carries a clip and a suggested action
Trend onlyHard hat missing in a low-consequence walkwayDaily digest of area counts, no notification at allUnbounded, because nobody is interrupted
Response class decides the channel and the volume budget

The digest does more work than it looks. Low-severity rules carry most of the volume and almost none of the urgency, and as a morning page they become a trend read in 90 seconds; what belongs on it is modelled in a week of automated safety reports. Who receives the top class and what they must do is a separate artefact, owned by the escalation table somebody has to own.

The interruption budget, and setting it before the thresholds

Work it from the recipient backwards. Opening an alert, watching a 20-second clip, deciding whether it is real and doing something about it takes 2 to 4 minutes honestly. Fifteen real-time alerts in an 8-hour shift is therefore up to an hour of a supervisor's shift spent on the queue, on top of the job they were already doing. That is the budget. Every threshold, dwell setting and zone schedule is then chosen to fit inside it.

An alerting system whose volume is decided by the detector rather than by the person receiving it will converge on being ignored, and it will do so quietly.

When the budget cannot be met with the rules currently live, the answer is to run fewer of them rather than to raise every confidence threshold until the numbers look tolerable. Thresholds trade a false alert for a missed one, silently, and the missed one is the expensive direction. Reducing scope until the queue is credible, then expanding, is the staging argued in starting with one zone and one hazard, and it applies just as well to a system already deployed as to a new one.

Prove each change before anyone is asked to trust it: run the modified rule silently for a week, count what it would have raised against the week before, and show both numbers to the supervisor who abandoned the queue. Sometimes the honest conclusion is a different instrument, since a forklift proximity rule producing constant alerts and no behaviour change may be the wrong sensor entirely, which is the choice in camera versus wearable tag for forklift proximity. All of it sits inside the wider safety, PPE and site monitoring programme we build for manufacturing and industrial vision.

Frequently asked questions

Short answers to the follow-ups this page tends to raise.

How many safety alerts per shift is too many?

Too many is any number above what the recipient actually opens, which for a supervisor with a job to do is usually under 10 real-time alerts a shift. The absolute count matters less than the open rate and the median time to open: 40 alerts all opened and dispositioned is a working system, while 300 with 6 opened is an abandoned one. Set the budget from the recipient's available minutes, then tune the rules to fit it.

Will raising the confidence threshold fix alert fatigue?

Rarely, because the volume is usually structural rather than statistical. If most of the queue is the same person alerted on repeatedly, or a zone armed while the hazard is switched off, a higher threshold removes some of every category including the true detections you needed. Fix aggregation, scheduling and rule scope first; the threshold is the last dial, and it trades a false alert for a missed one.

Should duplicate alerts from two cameras covering the same area be merged?

Yes, merge them into one incident at the area level, but keep both clips attached. The duplicate exists because 2 cameras saw 1 event, so the supervisor should see 1 record; the second angle is frequently the only one that shows what actually happened, and discarding it saves nothing while costing an investigation later. Deduplicate on rule, area and a short time window rather than on camera identity.

Is a daily digest good enough for PPE compliance?

For low-consequence areas, yes, and usually better than a notification. Nobody can intervene usefully 40 seconds after a missed hard hat in a walkway, so the value is the trend by area and shift, which a morning page carries. Keep notifications for rules where somebody must act immediately.

How long should the dwell threshold be before a zone entry becomes an incident?

Long enough to exclude transit and no longer, which for a walk-through zone is usually 2 to 5 seconds. Pick it empirically: replay a week of candidate events, count how many survive at each setting, and take the point where transit cases fall away and genuine occupancy does not. For rules guarding against instantaneous harm, dwell is not available as a tuning option at all.

  • video analytics
  • alerting
  • safety
  • operations
// shipped work

The work behind this page

Builds from our portfolio that this page draws on.

Working on something in this space?

Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.

Start the conversation