The Problem
Traditional fingerprint readers require physical contact with a scanner. which creates hygiene concerns, requires dedicated hardware, and makes remote identity verification impossible. The client was building a KYC platform that needed fingerprint verification to work on any smartphone camera without specialised hardware.
The challenge: contactless fingerprint capture from commodity camera hardware is hard. Image quality varies enormously by lighting, finger pressure, skin condition, and device camera quality. The SDK needed to guide users through capture, reject poor-quality images, and extract features good enough for matching against government biometric databases.
What I Built
The SDK is a React Native module with a native C++ core (via JSI) for performance-critical image processing.
Guided capture UI: an overlay shows the finger position in the frame with real-time feedback: "Bring finger closer," "Reduce glare. move away from direct light," "Hold steady." The guidance system runs inference at 15fps during the preview phase using a lightweight TensorFlow Lite model.
Quality assessment pipeline: each captured frame is scored across six criteria: focus sharpness, brightness uniformity, fingerprint ridge visibility, contact area, motion blur, and liveness score. Only frames scoring above the threshold in all six criteria proceed to feature extraction.
Liveness detection: distinguishes a live finger from a printed or displayed fingerprint image. Uses a texture-based model (LBP + CNN) trained on a dataset of live vs spoof samples. This prevents replay attacks where an attacker holds up a photo of someone's finger.
Feature extraction: extracts minutiae points (ridge endings and bifurcations) conforming to NIST's Fingerprint Minutiae Format (ISO/IEC 19794-2). These are the features that matching algorithms operate on. The extraction runs on-device for privacy. the raw finger image never leaves the phone; only the minutiae template is uploaded.
Technical Highlights
The image processing pipeline uses OpenCV (C++) via React Native JSI bindings for near-native performance. Running the full quality assessment + feature extraction pipeline on a mid-range Android device takes < 200ms per frame.
The server-side matching service (FastAPI + PostgreSQL) stores encrypted templates and performs 1:N matching against the enrolled database. Match scores are thresholded at 0.72 FMR (False Match Rate) for consumer KYC compliance.
The SDK ships as an NPM package for React Native and a Swift Package for native iOS, with the same C++ core powering both.
Outcome
The SDK was integrated into the client's KYC onboarding flow. Field testing across 1,200 enrolment sessions showed a 98.3% first-attempt capture success rate (defined as a quality-passing capture within 3 attempts). False acceptance rate was 0.012% and false rejection rate was 1.1%. both within the client's compliance requirements.
The SDK reduced KYC onboarding time by an average of 2.3 minutes per user vs the prior flow requiring users to visit an agent with a hardware scanner.