Everyframe · computer vision

Redact the crowd, keep your subject.

A Tour de France broadcast clip, run through the Everyframe engine: every face detected, then pixelated, all except the lead rider, pinned by his tracking id and left untouched. Detection and redaction run on the machine that holds the footage.

369 faces detected detector retinaface_mv2 tracker ByteTrack black · pixelate · blur runs on-device
01

The result, live

The pixelated cut, with the detector's per-frame face count tracking beneath it. The counter and the playhead are driven by the same detection records the redactor consumes.

0 faces in frame
369 detected · 186 frames

Face detections per frame · retinaface_mv2

Every face the detector finds is pixelated except the lead rider, who is pinned by his track_id and left visible (see the pipeline ). The waveform is the live face count; the amber playhead marks where the clip is.

02

What the machine sees

Before anything is hidden, every frame runs through retinaface_mv2, a RetinaFace detector that returns a box, a confidence and five landmarks per face. ByteTrack then stitches those boxes into tracks so each person carries a stable track_id, the handle the redactor filters on.

red boxes are raw detections, yellow is confidence and track id. This overlay is what the redaction step reads: it is never shipped, only used here to show the machine's view.
03 The pipeline

Three stages, all inside the Everyframe engine: detect faces, track them into stable ids, then redact every track except the ones you keep. No step leaves the host.

1

Detect retinaface_mv2

A RetinaFace-MobileNetV2 face detector, run per frame at a 0.5 confidence gate. Boxes below the gate never enter the pipeline.

let faces = detect_with(&v, "retinaface_mv2", DetectParams {
    threshold: Some(0.5),          // confidence gate
    ..Default::default()
});
2

Track ByteTrack

Per-frame boxes become tracks. ByteTrack assigns each face a track_id that persists across frames, so a person can be referred to by identity rather than by pixel position.

let tracked = track(faces, TrackAlgorithm::ByteTrack);
// each detection now carries a stable track_id
3

Isolate & redact Everyframe

Drop the tracks you want to keep, then pixelate the rest. Redaction is by identity, not by drawing a box every frame by hand: keep the lead rider, hide everyone else.

let to_redact = filter_detections_with(tracked, FilterDetectionsOpts {
    exclude_track_id: Some(1),     // keep the lead rider
    ..Default::default()
});
let out = v.try_pipe(redact(to_redact,
    RedactMode::Pixelate { size: 16 }))?;   // or ::Black / ::Blur
04

Ways to hide a face

The same tracks, a choice of redaction mode. redact takes black, pixelate or blur: one enum on the op, everything upstream identical. This clip was rendered in the first two, below.

pixelate · RedactMode::Pixelate { size: 16 } , a 16-pixel mosaic over every hidden face.
black · RedactMode::Black , an opaque box that leaves nothing to reconstruct.