Facial-Recognition-Software · port 5001
Attendance by face, and a benchmark of its own fairness
A local attendance system: the webcam sees a face, the app names it and writes a row. That part is ordinary. The part worth reading is what happened when the engine was run over 97,698 labelled faces — the quality gate turned out to be rejecting people rather than photographs, and the recommended matching threshold did not survive contact with a real gallery. Both are documented here rather than quietly fixed.
The quality gate was rejecting people, not photographs
The shipped gate used absolute thresholds on mean brightness and contrast. Both track skin tone, so both encoded it. Measured across FairFace at a matched 25% overall flag rate:
| Gate | Disparity | What happened to it |
|---|
What it looked like in production terms
The old gate flagged 38.8% of Black faces and 18.5% of White faces as "too dark" — a 2.1x gap that was skin tone, not lighting. Mean face-crop brightness by group ran White 102.4, East Asian 94.9, Indian 84.7, Black 83.8, and the threshold sat in the middle of that spread.
Brightness and contrast are still measured and reported, because they are useful diagnostics. They no longer decide anything. Exposure is judged by clipping and dynamic range instead, which is skin-tone independent: a dark face that is well lit still spans a wide range, and an underexposed one has its shadows crushed flat whoever is in it.
The recommended threshold did not survive scale
Every FairFace image is a different person, so all 4.77 billion pairs are impostor pairs — which makes this a direct false-match measurement rather than an estimate.
| Threshold | FMR per pair | Gallery of 100 | of 1,000 | of 10,000 |
|---|
The demographic estimators are worse than their reputation
Gender classification scored against FairFace's ground truth, 72.88% overall. The overall figure is the least informative number in the table.
| Group | Male | Female | Gap |
|---|
Where it stops working
Video-like degradations applied to held-out stills. A controlled sweep answers "where does it stop working" better than a handful of clips. Face detection held at 100% throughout; it is recognition that degrades.
| Condition | Holds until | Breaks at |
|---|
What it tells the person in front of it
One instruction at a time, in priority order, burned into the video frame rather than only in a sidebar — someone being registered is looking at the camera, not at the page.
Nothing gates on skin tone
Exposure advice fires only on clipped pixels, never on average brightness. Telling someone their face is "too dark" because of their complexion is the same defect as the old quality gate, just phrased more politely.
Head coverings are not mentioned
The honest failure is "no face detected", not a guess about what somebody is wearing. A hijab, turban or kippah does not interfere with detection and there is no reason to ask anyone to remove one. Brims and dark lenses genuinely occlude, so those are named — and only when detection is actually failing.
Every module, by size
Where the tests are
| Module | Lines | Stmts | Covered | What it does |
|---|
Bugs, and what found each one
Three of these were found by running the engine over a hundred thousand faces, which is the argument for doing that at all: a 45-image test exercises none of them.
| What was wrong | What found it | State |
|---|
What this does not do
The list that matters most on a page about face recognition.