Sentinel

Site safety
LinkOffline
Cameras0 / 0
Crew0
PPE
Sources
GPU
WBGT
Camera wall

No cameras yet

Add an RTSP or HTTP camera, attach recorded footage, or stand up a synthetic fleet with zones already drawn — every rule runs identically on all three.

A camera is a durable thing with a name and a place on site; the connection is not. Streams drop all day — switches brown out, contractors unplug things, wifi bridges fail in rain — so a camera that fails backs off and retries forever rather than ending. Rules can be turned off per camera without touching the site-wide default: the car park does not need a harness rule.

CameraAreaSourceState LiveRules

These are the site-wide defaults. Confirm and window are the k-of-n filter: the condition must hold for that many of the last N analysed frames before an alert reaches an operator, which is what keeps one noisy detection from becoming four hundred alarms. Per-camera exceptions live on the Cameras tab.

Zones belong to one camera — a polygon drawn on one view means nothing on another. They are stored as fractions of the frame so they survive a resolution change, and ground tests use each worker's feet rather than their centre: on a camera looking across a site, a centroid test reports everyone standing beside an excavation as being inside it.

NameTypePermitHoursNotes

Most false-alarm complaints have a structural cause rather than a threshold one, and the structural ones are invisible from the alert feed — you cannot tell by reading a stream of "no harness" alerts that nothing in the pipeline can see a harness. This checks for those first, then shows what your own operators have actually rejected.

Sensitivity
What's wrong
Detections rejected as not-people

Cones, bollards and signs are the classic false worker: they never move, never wear a helmet, and eventually trip the man-down rule. Four checks catch them — an operator mask, keypoint support, plausible size for their position on the ground, and having never moved since they appeared. Shape alone is not one of them: a traffic cone and a worker crouching over rebar have almost the same box.

Measured false-alarm rate

From operator verdicts, not guesswork. Rules are not desensitised automatically — a safety alarm that quietly turns itself down because it fired too often is how a system ends up silent on the day it mattered. The numbers are measured here; the decision stays yours.

RuleCameraConfirmedFalse RateVolume

Two detectors run side by side. The trained checkpoint is fast and precise on whatever you have labelled and blind to everything else. The prompt detector is driven by plain text, knows nothing about your site, and needs no data — so it covers every class you have not trained yet. A class moves prompt → both → trained only when validation says it earned the promotion, and every step is reversible here.

People come from the trained checkpoint, not from prompts. A COCO-trained detector has seen millions of labelled people and is far more precise on them than any text description — and asking an open-vocabulary model for "a construction worker" is what puts traffic cones in the crew list. `person` is pinned to yolo11n.pt (or the pose checkpoint, which also supplies keypoints); everything else runs on prompts until you train it.
PPE is read on each worker, not on the frame. Stage one finds people with the checkpoint. Stage two crops each one and asks the prompt model about PPE inside that crop only. A twelve-pixel helmet in the frame is a ninety-pixel helmet in the crop, a vest found inside worker #3's box belongs to worker #3 with no guessing, and a prompt cannot match scene clutter it never sees.
Collecting training data

Frames are chosen by what a labeller would learn from them: where the two detectors disagree, where confidence sits on the decision boundary, and where a class is still thin. What comes out are pseudo-labels — a large head start, not a substitute for review.

Frames0
Boxes0
Need review0
Training a checkpoint

Fine-tunes on what you have collected, validates, reports per-class mAP, then promotes what cleared the bar and loads the new weights into every camera at once — the model bank is shared, so there is no restart and no per-camera reload.

No training run yet. Collect a few hundred frames first — a few hundred chosen this way beat a few thousand random ones.
Class routing
ClassGroupSourceText prompts mAP50Live

Heat strain has no visual signature, so it is not guessed from pixels. WBGT is computed from the conditions you set here, then combined with each worker's continuous exposure time and their movement against their own baseline. The result is a prompt to send someone over with water — never a clearance. Conditions apply to every camera on site.

Wet bulb globe temperature
Work min/hr
Rest min/hr
Wet bulb °C

Set the conditions to compute a work/rest allocation.