Face biometrics SDK · v1.0

Face verification
you can actually ship.

Detection, matching, and liveness for Flutter and your backend. Runs on your infrastructure, with models you actually own.

Read the docs
$flutter pub add facemetrical
Low-poly face-landmark mesh of a head in profile, with highlighted detection points
landmark mesh · 128-D

Built on

ML KitOpenCVONNX RuntimeFlutterTensorFlow Lite

What you get

Three things, done honestly.

01Detect + Match

Detection and matching that stay on the device.

On-device face detection and embeddings. 1:1 verification and 1:N identification, with permissively-licensed models. No surprise non-commercial weights buried in your build.

  • 128-D embeddings
  • 1:1 + 1:N
  • Apache / MIT-clean weights
Two face meshes compared with a match line, beside a grid of candidate faces with one highlighted
02Liveness, layered

Randomized challenges, then passive detection.

Randomized blink, turn, and nod challenges on the device, backed by server-side presentation-attack detection. Each layer has a job, and we tell you exactly what it stops.

  • Active blink / turn / nod
  • Server-side PAD
  • Honest per-layer limits
A face mesh with three challenge states below it: blink, turn, and nod
03Yours to own

Your infra. Your data. No per-check toll.

The core runs on your infra, your data, your models — no per-check toll. Plug in a certified provider only when you need fraud-grade assurance.

  • Self-hosted core
  • No vendor lock-in
  • Swap in certified PAD on demand
your perimeterdeviceyour serveryour store$ per check

How the liveness works

Three layers, each honest about its limits.

Active challenges stop a printed photo. Passive detection stops a screen or replay. For money and identity, add a certified provider.

Three-step liveness pipeline: active challenge, then passive presentation-attack detection, then an optional certified provider
1

Active challenge

Stops a printed photo

Randomized blink, turn, and nod prompts on the device. A still image can't follow the prompt.

2

Passive PAD

Stops a screen or replay

Server-side presentation-attack detection flags screens, masks, and recorded playback.

3optional

Certified provider

Handles fraud-grade

Optional. Plug in a certified vendor when money and identity are on the line.

Integration

See the API shape before you commit.

One call on the device, one call on the server. Same verdict object: a match score, a liveness result, and a PAD signal. No SDK ceremony, no callback maze.

  • Typed result: match · liveness · pad
  • Same contract, Flutter and server
  • Bring your own token and endpoint
verify.dart
1import 'package:facemetrical/facemetrical.dart';
2 
3final fm = Facemetrical();
4 
5// Detect, embed, and run a random active challenge.
6final result = await fm.verify(
7 image: frame,
8 challenge: Challenge.random(), // blink · turn · nod
9);
10 
11if (result.liveness.passed && result.match.score > 0.82) {
12 print('verified');
13}

What's free vs paid

The core is yours. Certification is opt-in.

Everything you need to ship runs self-hosted, for free. Add a certified provider only when regulation or fraud risk demands it.

CapabilityCore SDKfree · self-hostedCertified livenessbring your provider
Face detection & embeddings
1:1 verification + 1:N identification
Active liveness (blink / turn / nod)
Passive presentation-attack detectionBuilt-inEnhanced
Runs on your own infrastructureOptional
Per-check feeNoneProvider-priced
iBeta / ISO 30107 certification
Fraud-grade assurance & SLA
on-deviceface detection
128-Dembeddings
1:1 + 1:Nverify & identify
Apache / MITclean models
iOS · Android · servertargets

Get started

Ship face verification this week.

Read the docs or talk to us. The core is free, self-hosted, and honest about what it does.

Read the docs