All projects
UN WFP · BIOMETRICSInternship · UN World Food Programme
World Food Programme

WFP Biometric Deduplication

An in-house fingerprint deduplication prototype so that every humanitarian aid beneficiary is registered only once: deep-learning minutiae extraction (MinutiaeNet) and Bozorth3-inspired matching, ported to Python.

Key metric
4.34%

EER in 1:1 verification · AUC 0.981 · Rank-1 94.5%

Architecture

WFP Biometric Deduplication

Components, data flows and trust boundaries of the system.

Pre-processingCoarse detection · CoarseNetPost-processingRefinement · FineNetMatching · Bozorth3 in PythonEvaluationscoremaskyesminutiaeFingerprint image512 × 512 · grayscaleEnhancementtexture · contrastOrientation fieldSTFT · direction mapCoarseNetfully convolutionalOutput mapsscore · angle · sizeSegmentationfinger vs backgroundMorphologyclose · open · dilateScore × maskcandidate minutiaeDual NMS fusionIoU 0.5 + customEnough minutiae?adaptive thresholdFiltered candidatesearly score thresholdPatch extractioncentred on (x, y)FineNetbinary patch classifierScore fusion(4 · coarse + fine) / 5Final minutiaex · y · θ · scoreIntra-tablesdistances · relative anglesCompatibilityτd · τθ thresholdsMaximum cliquecorrespondence graphSimilarity score(m + αd) / √(nA·nB)SOCOFing600 fingers · alteredComparison pairs747 genuine · 24.6k impostorVerification 1:1EER 4.34% · AUC 0.981Identification 1:NRank-1 94.5%Real WFP datanext: scale & integrate

Scroll the diagram →

Technologies

  • Python
  • MinutiaeNet · CNN
  • CoarseNet · FineNet
  • STFT enhancement
  • Bozorth3 graph matching
  • SOCOFing
  • ROC · CMC · ANOVA

Design decisions

  1. 01

    No end-to-end black box: extraction and matching stay separate, to keep control over the decision and allow each module to be replaced.

  2. 02

    Two-step extraction: CoarseNet maximizes recall over the whole image, FineNet validates each candidate on a local patch and removes 30–50% of false detections.

  3. 03

    Normalized score: a 3-minutiae clique does not mean the same between two 20-minutiae or two 100-minutiae prints, hence the division by √(nA·nB) and a density term.

  4. 04

    Thresholds set at 1% and 0.1% FAR: in humanitarian work a false rejection can deny someone aid, so the security / accessibility trade-off is made explicit.

The problem

WFP identifies beneficiaries biometrically to prevent duplicate registrations. A false negative lets fraud through, a false positive can deny aid to a legitimate person, and field captures are often degraded. Goal: assess an in-house system to reduce reliance on a commercial solution.

What I built

Two-stage hybrid pipeline. Extraction: image enhancement and an STFT orientation field, CoarseNet (fully convolutional) to propose minutiae, dual NMS and an adaptive loop, then FineNet to validate each candidate on a local patch. I fixed and adapted the MinutiaeNet implementation (pre-processing, thresholds, filtering). Matching: a Python port of Bozorth3 (intra-fingerprint tables, compatibility graph, maximum clique) with a score normalized by minutiae count.

Result and trade-off

On SOCOFing (747 genuine and 24,611 impostor comparisons): EER 4.34%, AUC 0.981, TAR 90.9% at 1% FAR and 70.3% at 0.1% FAR. Closed-set identification: Rank-1 94.5%, Rank-5 96.9%, Rank-10 98.4%. FineNet removes 30–50% of candidates with no finger-type bias, and alterations have only a small effect (η² ≈ 0.04–0.05).

Scope and limitations

Evaluated on a modest public dataset with synthetic alterations, not on WFP data. EER remains above the ~2% literature target, and TAR drops to 70.3% at 0.1% FAR. Proposed next steps: validation on real data, large-scale testing, cloud deployment and integration into WFP’s identity platform.
Next project
JobCopilot