All work

PII anonymization

A privacy pipeline that finds faces and license plates where models usually fail

Find every face and license plate in an image, and blur them so they can't be read. I owned the whole model evaluation, developed the detection pipeline, and designed and built the tool people use to run it. It started as an experiment and became a finished tool.

A sculpted bust scanned in rings of light, its face pixelated into square blocks inside a detection bracket

My part

  • Model evaluation
  • Pipeline development
  • Model training
  • UX and interface

At a glance

Finds
Faces and license plates
Hard cases
Motion blur, aerial views, low light
Models tried
Open source, and ones I trained
Judged against
Ground truth I curated myself
Output
Blurred past recovery

The problem

Detecting a face in a sharp, well-lit photo is easy. The real work is everything else.

Open-source detectors do well when the light is good and the subject stands out from the background. Real frames are rarely that kind. Most of my effort went into the gap between the demo image and the real one, because that gap is where privacy fails.

The frames don't come from one kind of camera either. Vehicle cameras, drones and handhelds, at different speeds, times of day and weather, all end up in the same dataset — and tuning a pipeline until it is excellent on one of them is a good way to make it quietly worse on the rest. The job was finding the setup that holds across all of them at once.

Hard frames

  • Motion blur

    A fast-moving camera smears the frame and leaves only fragments of a plate or face. Those fragments still have to be found.

  • From above

    Aerial imagery shows faces and plates nothing like the front, side and rear views of a vehicle camera, and needed its own handling.

  • Low light and noise

    Dark, noisy frames are enhanced and denoised before detection, and directional sharpening recovers detail lost to motion.

  • Small in frame

    A face at the end of the street or a plate a few dozen pixels wide carries almost no signal, and still has to be caught.

Evaluation

  1. 01

    Build the ground truth

    I curated ground-truth datasets to compare every model and every pipeline change against.

  2. 02

    Try every candidate

    Open-source models including RetinaFace and EgoBlur, models I trained myself, and separate experiments for license-plate detection.

  3. 03

    Benchmark by condition

    A benchmarking system showed exactly where each model did well and where it failed, across different kinds of data and conditions.

  4. 04

    Build the pipeline

    The result is a custom pipeline with its own preprocessing and post-processing, refined through many rounds of tuning.

  5. 05

    Re-run the whole benchmark

    Every change went back through all of it, so a gain on one kind of frame could never quietly cost accuracy on another.

The finished pipeline produces far fewer false positives and false negatives. In privacy work that's what counts: a miss leaks a face, and a false alarm ruins a frame.

The tool

The pipeline is the hard part, but people don't want to run a pipeline. They want to drop in a dataset and get it back clean.

  • A dataset at a time

    Upload a set of images and leave it. Detection runs in the background across the whole thing.

  • Blur on your terms

    Blur method and strength are configurable, from a deliberately heavy default.

  • Redaction that stays redacted

    That default is chosen so what's under the blur can't be reconstructed from the image.

I designed and built the interface too, but it was the easier half. The pipeline underneath is where the real work went.