← Back to main demo · Document scan · Liveness + doc match

Free active liveness (browser-only)

Uses Google MediaPipe Face Landmarker (WASM + model from Google CDN) — no signup, no API key. Active sequence: blink ×2turn headsmile (hold)open mouth (hold)hold still 5s → auto capture. This is practice / dev only — not certified PAD. Camera: Browsers require a secure contexthttps:// or http://localhost (not http://192.168…).

  1. Blink twice naturally.
  2. Turn head slightly left or right and hold briefly.
  3. Smile clearly and hold until the bar fills.
  4. Open mouth a bit (as if saying “ah”) and hold until the bar fills.
  5. Use even lighting, face the camera — hints may warn if it’s too dark, bright, uneven, or blurry.

1. Camera

Center your face in the oval — chin near the bottom of the ellipse, eyes in the upper third.

MediaPipe loads on “Start camera” (first time may take a few seconds).

2. Challenges

Follow the status line. If your face leaves the frame, progress on smile/mouth may reset. Use Reset to restart.

Press “Start camera”, then “Begin challenges”.

If the browser never speaks: follow the Voice line — each liveness step also plays a different beep pattern (Web Audio, not TTS).

If speech fails in the browser (common on Chromium/Linux), you still get beeps and the text under “Voice”.

No voice from the browser? (Linux / Chromium)

Natural voice uses edge-tts (neural, needs internet) via the API — install with pip install edge-tts (already in requirements.txt). If that fails, it falls back to espeak-ng (robotic, offline): sudo apt install espeak-ng, restart uvicorn. You can choose Server engine below. Or use the Voice line + beeps; or Firefox for browser TTS.

(saved in this browser)

(ignored for neural voice)

3. Capture after pass

When all four steps pass, you’ll hear “hold still”, then stay steady — the blue bar tracks accumulated time with acceptable light and sharpness (not a raw 5-second countdown). If it barely moves, improve front lighting; the final phase uses slightly relaxed checks so capture can still complete. The saved JPEG is cropped to the tracked face outline (not the full camera view).