Home / Products / Recognition Engines / Face Match Engine
ENGINE

Face Match Engine

Drop-in face recognition for your stack. The Cams Face Match Engine turns a photo into an identity, running a full detect, align, embed, and compare pipeline with ONNX ArcFace plus passive anti-spoofing โ€” all behind three simple HTTPS endpoints. Send a face image or a pre-computed embedding.

Overview

Server-side face enroll, 1:1 verify, and 1:N identify over REST โ€” with built-in ArcFace embedding, SCRFD detection, alignment, and anti-spoofing.

A standalone face-recognition service exposing enroll, verify (1:1), and identify (1:N) at /api/biometric/v1/face/. Each image runs through SCRFD detection, similarity-transform 5-point alignment, MiniFASNet-class presentation-attack detection, and ArcFace (insightface w600k_r50) 512-d embedding, then exact cosine similarity scored 0-100. Galleries are multi-tenant, scoped per tenant and user, with a warm decoded cache and a shared thread pool for fast 1:N. It is GPU-ready via a single ONNX provider switch (CPU, CUDA, TensorRT, or OpenVINO) with no code change.

ENGINERESTHTTPSJSONC++
POST /api/biometric/v1/face/identify (1:N)
curl .../api/biometric/v1/face/identify \
  -H "sn: $SN" -H "auth-token: $TOKEN" \
  -d '{ "image": "<base64 jpeg>" }'
# -> detect -> PAD anti-spoof -> align -> ArcFace -> cosine
{ "ok":true, "match":true, "score":87,
  "candidates":5312, "user_id":"1042" }

Capabilities

What it does

Enroll a Face

Store one or more faces per user from a base64 image or a precomputed 512-d embedding.

Verify (1:1)

Confirm a captured face matches a claimed user, returning a match flag and 0-100 score.

Identify (1:N)

Search a captured face against the whole tenant gallery and return the best match above threshold.

Anti-Spoofing (PAD)

MiniFASNet PAD rejects photo and screen replays on every verify and identify before any embedding is computed.

Quality Gating

Rejects faces that are too small, blurry, dark, bright, or off-angle at enroll so only clean templates enter the gallery.

Scale 1:N Matching

Warm in-memory cache and a bounded thread pool keep brute-force cosine fast into the ~1M-template range.

Features

Everything included

  • Three endpoints โ€” enroll, verify (1:1), and identify (1:N) โ€” accepting a base64 image or a precomputed 512-d embedding
  • ArcFace R50 (insightface w600k_r50) L2-normalized 512-d embeddings with cosine matching scored 0-100
  • Built-in SCRFD det_10g face detection plus closed-form 5-point alignment to ArcFace 112x112
  • Passive single-frame anti-spoofing (MiniFASNet PAD) rejects print and screen replays before embedding
  • Enroll-time quality gate: face size, sharpness, brightness, and frontality checks with tunable thresholds
  • Multi-tenant galleries scoped by tenant and user, with model-version filtering across model upgrades
  • Warm per-tenant gallery cache plus a shared thread pool for 1:N (measured ~5.3x speedup, ~104 ms over a 1M-template gallery)
  • GPU-ready ONNX provider switch (cpu/cuda/tensorrt/openvino) with CPU fallback and no code change
  • Configurable match threshold (default 60) and an input policy that can require image-only input on untrusted edges

Build with Face Match Engine

Grab a key, read the docs, and ship. Our team helps with your first integration.

FAQ

Common questions

Can I send a pre-computed embedding instead of an image?

Yes. Requests accept either a JSON embedding array or a base64 image. Embedding input is matched fully live in-engine; image input runs the full detect-align-PAD-embed pipeline. Embedding input can be disabled on untrusted edges by policy.

Does the Face Match Engine detect spoofing?

Yes. Every verify and identify runs a MiniFASNet passive anti-spoofing (PAD) check on the detected face crop before embedding, rejecting print and screen replays. It is single-frame RGB PAD; 3D masks and high-quality video replays need depth or IR hardware.

What face recognition model does it use?

ArcFace R50 (insightface w600k_r50) producing L2-normalized 512-d embeddings, with SCRFD det_10g for detection and a similarity-transform 5-point aligner.

Can it run on a GPU?

Yes. Set the ONNX provider to cuda (or tensorrt/openvino); the detector, embedder, and PAD all use the configured provider, with CPU fallback and no code change.

How large a gallery can 1:N identify handle?

It uses a warm decoded cache and a shared thread pool for brute-force cosine matching, measured at roughly 104 ms over a 1M-template gallery; an approximate-nearest-neighbor index is the path beyond that.

Related

Explore more of the platform