Introduction
UFME (Universal Face Matching Engine) is an open-source biometric face matching engine built for large-scale deployments.
Design targets: ~200 million face gallery, 60 million annual 1:N searches, sub-second end-to-end latency.
What it does
Section titled “What it does”UFME receives a probe image, runs it through a quality-gated biometric pipeline, and searches a sharded FAISS vector index to return ranked candidate matches — or performs enrolment, verification, or deletion against the gallery.
Key capabilities
Section titled “Key capabilities”- 1:N face search against galleries up to 200M entries using sharded FAISS IndexIVFPQ
- Presentation attack detection (PAD) — physical and digital spoofs rejected before matching
- Morphing attack detection (MAD) — blended document photos rejected at enrolment
- ISO/IEC 29794-5 quality gates — configurable accept/reject policy, not hardcoded thresholds
- Hexagonal architecture — any detection model, vector store, or transport layer is swappable
Quick start
Section titled “Quick start”# Install Python dependenciesmake install
# Download modelsmake models
# Run testsmake test
# Start the API servermake demoThe REST gateway starts on http://localhost:8080. See the Architecture page for endpoint documentation.
Project layout
Section titled “Project layout”src/├── core/ # Domain logic — zero external dependencies│ ├── ports/ # Protocol interfaces for all operations│ ├── domain/ # Pure data types, template operations, scoring│ └── orchestration/ # Search / Verify / Enrol / Delete orchestrators├── adapters/│ ├── inbound/ # REST gateway, gRPC gateway│ └── outbound/ # FAISS client, ONNX inference, PAD, MAD, OFIQ├── pipeline/ # Detection → Alignment → Quality → Extraction stages└── infra/ # Config, logging, health checksrust/ # Rust hot-path modules (FAISS bindings, SIMD ops)deploy/ # Dockerfiles, Kubernetes manifests, Helm charts