Match a selfie to an ID photo right on the device.
On-device face detection and 1:1 matching that returns a single accuracy score from 0 to 100, with clear reliability bands so your flow knows when to accept, when to route to manual review, and when to decline. It runs entirely on the handset with no upload, across iOS, Android, Flutter and React Native, so a face never has to leave the device to be verified.
Detect a face, compare two, get one clear score
A focused verification engine that answers the one question an onboarding or login flow needs: is this the same person? It computes the answer locally on the phone with no server round-trip.
Face detection
Find the face in a photo, an ID card or a selfie and get its location, so you can confirm a usable face is present before you try to match anything.
1:1 matching
Compare two faces, one from the ID document and one from the live selfie, and get a similarity result. No database, no gallery search, just the two faces you present.
Accuracy score 0–100
Every match returns a single number from 0 to 100. The higher it is, the more alike the two faces are, giving you a threshold you can tune to your risk appetite.
Reliability bands
The score maps to plain-language bands, from highly reliable down to no match, so your rules can accept, review or decline without anyone eyeballing a raw number.
Fully on-device
Detection and matching both run on the handset. No face image, template or score has to be sent anywhere for the decision to be made, which keeps sensitive biometrics local.
Duplicate detection
Because you control both inputs, you can also compare a new applicant's face against one you captured earlier to catch the same person applying twice under different details.
Decision-support, tuned to your risk
The accuracy score is a strong signal, not a verdict on its own. Set the threshold that fits your flow, and for the highest-assurance cases pair the on-device result with a backend verification step. Because the match runs locally, you get the signal at the moment of capture, before any personal data leaves the phone.
What the score means
One number, five bands. Wire these to your accept / review / decline rules so the outcome is consistent every time, whatever the score.
| Score | Reliability | Recommended action |
|---|---|---|
| 90–100 | Highly reliable | Strong, confident match. Suitable for straight-through verification. |
| 75–89 | Strong | Confident match. Accept for most onboarding and login flows. |
| 65–74 | Moderate | Plausible match. Route to manual review before you accept it. |
| 50–64 | Low | Weak signal. Treat as unverified; retry the capture or review. |
| 0–49 | No match | The two faces do not match. Decline or restart the check. |
For exceptionally high assurance, add a backend check
The bands above are a practical default for on-device decisions. Where a false accept would be costly, keep the on-device match as the fast first gate and confirm the borderline and high-value cases with a server-side verification step as well.
Detect, then match, in a few lines
- ✓ Detect the face in each image first to confirm a usable face is present
- ✓ Match two faces and read back a single 0–100 accuracy score
- ✓ Compare the score to your own thresholds to accept, review or decline
- ✓ A Plus, license-gated feature: activate the license once at startup
- ✓ One integration ships to iOS, Android, Flutter and React Native
// Plus feature — activate the license once at startup Config.License.Activate(this, licenseString); HumanFaceHelper faces = new HumanFaceHelper(this); // 1. Detect the face in each image (ID photo + selfie) faces.detectHumanFaces(idCardBitmap, r -> { // r.FACE_DATA: boxes + IDs, r.DOC_ID }); // 2. Match the two faces — returns a 0–100 accuracy score faces.matchHumanFaces(doc1, face1, doc2, face2, r -> { int accuracy = r.ACCURACY; // 0..100 similarity if (accuracy >= 75) { /* accept */ } else if (accuracy >= 65) { /* manual review */ } });
Three steps to an offline face check
Face match is the last step of a capture pipeline you can build entirely from the same SDK: get the ID photo, get the selfie, then compare them, all on the device.
1 · Capture the ID
Photograph the identity card and crop the exact region, then use the portrait on it as the reference face.
2 · Capture the selfie
Take a quality-gated selfie with centring, distance and lighting checks, so the live face is clean enough to compare.
3 · Match on-device
Compare the ID portrait with the selfie and read the accuracy score. Accept, review or decline right there in the flow.
You are here
Where an on-device face match earns its place
Offline face verification
Confirm the person holding the phone is the person on the ID, right at signup, with no upload. The accuracy score gates straight-through approval, and borderline scores go to review.
Presence checks at capture
Pair the match with a fresh, quality-gated selfie so the face being compared is captured live in the session, a strong liveness-adjacent signal that raises the bar for impostors.
Re-verification at sign-in
Ask a returning user for a quick selfie and match it against the face on file to step up a sensitive action, all decided on the device in the moment.
Duplicate-applicant detection
Compare a new applicant's face with faces captured earlier to spot the same person applying twice under different identities, before an account or a loan is opened.
Verification with no signal
Agents in low-connectivity areas can still verify a face against an ID on the spot, because the whole check runs offline on the handset.
Fast gate, backed by the server
Use the on-device match as an instant first gate, then confirm the high-value and borderline cases with a backend verification step for belt-and-braces assurance.
Every major mobile platform · one license can cover all
iOS
Swift · UIKit · SwiftUI
Android
Kotlin · Java · Jetpack Compose
Cross-platform
React Native · Flutter
Part of the Plus tier
Face match is a Plus, license-gated feature of the mobile SDK, alongside the other advanced AI and fraud-signal capabilities. One flat license, no per-match metering. Pricing shown in your local currency.
Affordable to all
The same on-device face verification a bank ships is priced so a lending startup or a single onboarding app can ship it too. Flat annual license, unlimited matches.
Common questions
Explore the rest of the Mobile SDK
One license, every capability — take this and you also get all of these.