Guide
How to blur faces in video automatically
Short answer
To blur faces in video automatically, run a face-detection model on every frame so each face returns a bounding box and a confidence score, link those boxes into tracks across time, blur each tracked region into the output pixels, then have a human confirm nothing was missed. The blur must be irreversible and the recall verified — detection alone leaks the faces it misses.
What does an automatic face-blurring pipeline actually do?
Automatic face blurring is a computer-vision pipeline, not a single filter. A detection model finds every face and returns its location as a bounding box with a confidence score; those boxes are tracked across frames so a face stays covered through motion; and each tracked region is then blurred directly into the delivered pixels. A human confirms the result before it ships.
- Detect
- A model returns a box (x, y, w, h) and a confidence per face, on every frame.
- Track
- Per-frame boxes are linked into one track so coverage survives turns, occlusion, and motion blur.
- Redact
- Each tracked region is blurred into the output pixels — irreversibly, with no mask to switch off.
- Review
- A person confirms no face survives; uncertain clips are dropped, not downgraded.
- Certify
- Detector version, settings, reviewer, and measured recall are recorded per file.
What are the bounding-box coordinates and the confidence score?
A detection is four numbers plus one. The four numbers are the bounding box — the pixel position and size of the rectangle around the face, usually written as (x, y, width, height) or as two corners. The extra number is the confidence: how sure the model is, from 0 to 1. A detection labelled "face · 0.80" means the model is 80% confident there is a face in that rectangle.
{"frame": 1042, "detections": [
{"class": "face", "bbox": [612, 331, 214, 246], "conf": 0.80},
{"class": "face", "bbox": [1180, 402, 96, 104], "conf": 0.61}
]}The confidence threshold is a recall/precision dial. Lower it and you catch more faces but blur more non-faces; raise it and you blur less but risk missing a real face. Set it from the acceptable miss rate in your spec, then verify the achieved recall on a labelled sample.
Why isn’t running a detector enough on its own?
Because a detector has a miss rate, and a missed face is a leaked identity. The failures are predictable: profile and back-of-head views, faces in reflections and eyewear, small or distant bystanders, and faces already blurred by fast motion. Single-frame detection also flickers — a face found on frame 1041 and missed on 1042 leaves an un-blurred gap a viewer can catch.
- Track across frames so a momentary miss does not create an un-blurred gap
- Blur irreversibly into the pixels — never ship a reversible mask or a separate un-blurred master
- Scale blur strength to face size so distant faces are still unrecoverable
- Measure recall on a labelled sample and keep a human in the loop for sign-off
- Fail closed: hold or drop any clip a reviewer is unsure about
How do you do this across thousands of hours?
At volume the pipeline runs on GPUs and scales with the allocation you give it, not with the number of people watching clips. Firsthand runs this pass on every egocentric dataset it delivers and offers it as a standalone service — you send footage, it comes back with faces (and optionally plates, screens, and speech) irreversibly blurred and a per-file certificate.
See the live before/after and the full pipeline on /anonymization, or send your own footage through the /services/face-blurring service.
Check it against the sample pack.
40 episodes across 4 environments, delivered in the exact schema these guides describe.