Benchmarks

Measured, not marketed.

Every number below comes from a harness that ships in a public repository, with the dataset and conditions stated next to it. The raw results are downloadable under CC BY 4.0. Where we don't have externally validated numbers yet, we say so instead of inventing them.

Latency

What a check actually takes.

Full pipeline — decode, detect, embed, match, anti-spoof, sign — in one process. No queue between you and the model.

~0.7s

full face match, shared cloud tier (measured 2026-08-29)

<200ms

same release binary, dedicated hardware

Cloud figure: server-side, request-in to signed-response-out, measured 2026-08-29 on the shared 2-vCPU virtual machine that serves liveliness.neetix.in (793ms cold, ~685ms warm; lighter checks like AML screening return in tens of milliseconds). Dedicated figure: the same CPU-only release binary on M1-class hardware. Your numbers depend on hardware, image size and network path — the binary exposes per-route latency histograms at /metrics so you can measure yours, not trust ours.

Face verification · LFW View-2

3.05% EER on LFW — and you can check it.

The full 6,000-pair LFW View-2 protocol, engine-side detect and align, 512-d cosine matching. We moved production off a stronger research-only model onto a fully licensable one and lost nothing measurable.

3.05%

EER @ cosine 0.126

0

detect failures (6,000 / 6,000 scored)

≥0.28

cosine where observed FMR hits 0

MIT

+ Apache-2.0 stack, no research-only license

StackLicenseEER (@ cosine)FNMR @ low FMRDetect fails
YuNet + AdaFace IR-50 (Rust engine)ShippedMIT + Apache-2.03.05% @ 0.1263.67%0
InspireFace Megatron (previous prod)research-only3.23% @ 0.1464.22%19
AdaFace IR-50 (Python cross-check)MIT + Apache-2.03.33% @ 0.1223.67%0
AdaFace IR-101 (Python)MIT3.30% @ 0.1073.63%0
AdaFace IR-50, plain YuNet alignMIT4.90%5.53%0
SFace + YuNetApache-2.05.50%0
AdaFace IR-50, MTCNN alignMIT6.34%39

EER = equal-error rate (lower is better); the cosine threshold at the crossover is shown beside it. The shipped clean stack is the Rust engine re-run over all 6,000 pairs; its per-pair parity against the Python harness (3.33%) is a median cosine difference of 0.002. “FNMR @ low FMR” is the friction a genuine user feels near a zero-false-match operating point (Python rows at FMR≈0.1%; the Rust row at its zero-observed-FMR threshold, cosine 0.32). The two research-only Megatron rows skipped their hardest pairs (19, and 39 for MTCNN alignment); every MIT/Apache-2.0 stack scored all 6,000. Fusing SFace or IR-101 into the clean stack was tested and rejected — it didn't help. An older 2026-08-13 Megatron run measured 3.26% EER; both are in the downloadable results.

Before you cite these numbers

LFW is not your users.

LFW is a celebrity, largely non-Indian, near-frontal dataset. These numbers say nothing about selfie-vs-Aadhaar matching, low light, aging or Indian demographics. Do not treat them as KYC-grade accuracy.

0 observed false matches is not 0% FMR.

With 0 of 3,000 impostor pairs matched, the 95% (Wilson / rule-of-three) upper bound on the true FMR is about 0.10%. Never quote a 0% FMR — a KYC-grade claim needs millions of impostor pairs.

~3% EER is honest, not state of the art.

Large modern proprietary packs report under 0.5% EER on LFW. We publish the real number, not the best-looking one — and we swapped a stronger research-only model for a licensable one on purpose.

We hold no certification.

No iBeta, NIST FRVT or FIDO result backs these numbers. Third-party PAD/accuracy testing is planned and will ship with dataset, protocol and demographic breakdown attached.

AML screening

Sanctions screening, tuned in the open.

Fuzzy name matching against the consolidated OFAC and UN lists — 18,079 entries. We ship a match threshold of 0.90 and publish exactly why.

MeasureThreshold 0.850.90 (shipped)
Exact-name recall100%100%
Typo recall (one adjacent-character swap)100%100%
False positives — two-token clean names17.5%1.25%
False positives — three-token clean names4.3%0.08%

Moving from 0.85 to 0.90 cuts false positives roughly 14× with no loss of typo recall. Above ~0.92, genuinely misspelled sanctioned names start slipping through — which is why 0.90 is the shipped default, not a bigger, better-looking number.

Conditions: derived with our open aml_audit harness (cargo run --release --bin aml_audit -- tune) against the full 18,079-entry ingested OFAC + UN list. Typo recall uses a single adjacent-character transposition on real listed names; false-positive rates use synthetic realistic two- and three-token clean names, not customer data. Exact matches score 1.0 and are recalled at every threshold. The table is re-derived whenever the list is re-ingested.

Liveness & PAD

Two error rates we publish. Two we won't fake.

Face-verification error rates (FMR, FNMR) are measured and downloadable above. Presentation-attack rates (APCER, BPCER) are not — an attack-detection number without an accredited lab and a stated attack set is marketing, not measurement.

FMR

Measured above

False-match rate

Impostor pairs — two different people — that the face matcher scores as the same person. The security failure.

FNMR

Measured above

False-non-match rate

Genuine pairs — the same person twice — scored as different people. The friction failure your users feel.

APCER

Pending lab

Attack presentation classification error rate

Presentation attacks — prints, replays, masks — that the liveness check accepts as genuine. ISO/IEC 30107-3's security metric.

BPCER

Pending lab

Bona fide presentation classification error rate

Real, live people the liveness check rejects as attacks. ISO/IEC 30107-3's usability metric — the one vendors don't quote.

How we evaluate

The evaluation harness ships as a binary (src/bin/eval). It takes a CSV of image pairs labeled genuine or impostor, extracts a 512-d embedding per image with the same engine that serves production, and reports FMR and FNMR across cosine thresholds plus the equal-error crossover (EER) — the exact process that produced the LFW View-2 numbers above. Liveness is reported as APCER/BPCER per ISO/IEC 30107-3 — attack acceptance and genuine-user rejection, always as a pair, because either one alone can be gamed.

Third-party PAD testing (iBeta, ISO/IEC 30107-3) is planned. We will publish presentation-attack numbers after external validation — with the dataset, protocol and demographic breakdown attached, the same way every other figure on this page is reported.

Until then, this section deliberately contains no presentation- attack percentages. If a vendor quotes an anti-spoofing number without telling you the lab and the attack set, ask for the BPCER that came with it.

Reproduce this

The only benchmark you can actually check.

No re-hosted data, no private weights, no hand-waving. Here is everything you need to reproduce the LFW View-2 numbers above from scratch.

01

The harness

Public and open: neetixai/liveness-benchmark. The LFW driver is scripts/clean_swap_bench.py; the shipped engine re-runs it via the eval binary.

02

The data

LFW from UMass Amherst, View-2 pairs (pairs.txt). Fetch via scikit-learn's md5-verified mirrors — we re-host nothing.

03

The models

YuNet from OpenCV Zoo (Apache-2.0) and AdaFace IR-50 / WebFace4M (MIT), exported to ONNX opset 14 (parity 7e-7).

Python harness — full 6,000-pair run
python scripts/clean_swap_bench.py \
  --lfw ~/lfw/lfw --pairs ~/lfw/pairs_view2.txt \
  --yunet models/clean/yunet.onnx \
  --adaface-onnx adaface_ir50.onnx \
  --tta --detect-upscale 2.0
Shipped Rust engine — cross-check
LV__ENGINE__BACKEND=clean ./target/release/eval \
  ~/lfw/pairs_full.csv --dump scores.csv

Same 6,000 pairs, same engine-side detect + align protocol. The Rust run re-verifies the Python harness in the exact binary that serves production — median per-pair cosine difference 0.002.

Cite / link

Link the benchmark, not a screenshot.

A permanent URL, a citation line and a one-line embed. All results are CC BY 4.0 — reuse the numbers, just point back here.

Permalink
https://liveliness.neetix.in/benchmarks/
Citation
Neetix (2026). Neetix Liveliness LFW View-2 face-verification benchmark [dataset]. https://liveliness.neetix.in/benchmarks/ CC BY 4.0.
HTML embed
<a href="https://liveliness.neetix.in/benchmarks/">Neetix Liveliness — LFW View-2 face verification: 3.05% EER (YuNet + AdaFace, MIT), 0 detect failures on 6,000 pairs</a>

The machine-readable dataset (JSON / CSV) carries the same figures, the protocol, the honesty caveats and the CC BY 4.0 license as structured fields — safe to parse and re-publish with attribution.

Run it yourself

Don't take our word for it.

The engine ships as one binary and the harnesses ship in the open. Benchmark on your own hardware, with your own data.

1000 free credits at signup · API key is shown once at signup.