A camera check that resists photos, replayed video and masks.
CAPTCHAs are beaten by bots and by paid humans. Camera checks can be beaten by feeding in a recorded video instead of a live one.
Everything runs in this page. No image, video or measurement is sent anywhere.
Every instruction is spoken aloud and a tone rises as you get into position, so the check can be completed without looking at the screen.
Correlation between the emitted colour sequence and the light measured off the skin.
Residual after fitting a homography between head poses, as a percentage of face width. A flat surface fits well and so scores low.
Trivially bypassable. Recorded for interest, deliberately excluded from the score.
The screen steps through a random sequence of colours. Skin reflects it; a phone screen replaying a video is emissive and barely reflects anything. Measured as the correlation between what was emitted and what the camera saw, plus the lag between them.
A flat surface can only change by a single projective transform when it rotates. A real face cannot. So a homography is fitted between your landmarks at two head angles and the leftover error is measured: low error means flat, high error means genuine depth. Only the 2D landmark coordinates are used - the tracker also reports a z value, but that comes from fitting a canonical 3D face model, so it would describe depth even for a flat photo and defeat the whole test.
A video on a phone screen defeats a pulse check but fails both of these. A moulded 3D mask passes parallax but fails illumination. Each covers the other's blind spot. Neither covers a virtual camera.
Every measurement runs inside the page, so anyone can patch it out, hook the camera, or feed the page a synthetic video stream. A real deployment must generate the challenge on a server, verify the captured frames on that server, and treat the result as one score inside a risk decision - never as a gate decided by the client. Treat this as a measurement instrument, not a product.
Nothing has been calibrated against real spoofs. The pass marks come from synthetic geometry, not from captures of an actual phone screen or print held up to a camera. Export the JSON from a genuine run and from a spoof attempt to compare them properly.
The movement test needs enough neck rotation to register, so it will fail some users for reasons that have nothing to do with liveness. Any real deployment needs an alternative route, and that route then becomes the weakest link.