Per-person PPE compliance summariser. Fuses two-class [[Double]] probabilities, [(Image, Double)] body-part crops with confidence, and [UInt64] track ids into a confidence-weighted per-person history, emitting a status tuple or event per track.
Typical backends
Body-part crops are classified for PPE, persons are tracked for stable ids, and per-person compliance status is pushed to a message broker.
Compliance status is rendered as overlay events for a live operator view.
Caveats
- Hard constraintThe three input lists are consumed positionally and must have equal length; a length mismatch aborts the call rather than truncating.
- Hard constraintEach classifier probability vector must hold exactly two entries (missing-PPE then present-PPE); any other length aborts the call.
- AccuracyA track's running probability is weighted by body-part detection confidence and the unfilled history slots are padded with the prior, so a person just entering view leans toward the prior until enough confident crops accumulate.
- I/O contractCrops below the configured minimum width or height are dropped before reaching a track's history, so a person seen only at small scale can sit in the uncertain band because no sample qualified.
- Parameter interactionThe status has three bands (present / uncertain / missing); collapsing or inverting
positive_confidence_threshold against negative_confidence_threshold removes the uncertain band and lets the missing-PPE verdict take precedence. - Parameter interactionKeep
forget_num_frames at least as large as the upstream tracker's own forget window so the tracker does not reference ids this component has already discarded. - State lifetimeConfiguration is captured once at the first tick; later changes do not take effect, and an empty input batch returns an empty list without touching per-track state.