Ultra-fast face matching (OpenCV YuNet + SFace + FAISS).
Project description
moca-face-matcher
Ultra-fast face matching library using OpenCV's YuNet for detection, SFace for recognition, and FAISS for high-performance vector search. Designed as both a production-grade SDK and a powerful CLI tool.
Features
- Blazing Fast: Integrated with FAISS for near-instant search in large databases.
- State-of-the-Art Models: Uses YuNet (fastest detection) and SFace (robust recognition).
- GPU Ready: Hardware acceleration support via OpenCV DNN/CUDA.
- Developer First: Clean SDK interface with strict type hinting (Mypy) and JSON-based secure cache.
- Secure by Design: Automatic SHA-256 model verification and no insecure serialization (no
pickle). - Portable Cache: Uses relative paths in the JSON cache, making it portable across different machines.
Requirements
- Python 3.9 or superior.
- Internet connection for the first run (downloads ~40 MB of ONNX models from OpenCV Zoo).
Installation
pip install moca-face-matcher
For local development:
git clone https://github.com/Moca9801/face-match.git
cd face-match
pip install -e ".[dev]"
Usage
Command Line Interface (CLI)
Search for a face in a gallery folder:
face-match path/to/query.jpg --db path/to/gallery/
Library Usage (SDK)
The core function is find_matches. It returns a structured dictionary and does not print to the console, making it ideal for integration into other systems.
from pathlib import Path
from face_match import find_matches
results = find_matches(
query=Path("query.jpg"),
db=Path("./gallery"),
top=3,
threshold=0.4
)
print(f"Scanned {results['total_scanned']} images.")
for match in results['results']:
print(f"Match found: {match['path']} (Distance: {match['distance']})")
CLI vs SDK Mapping
| CLI Option | SDK Parameter (find_matches) |
Description |
|---|---|---|
query |
query (Path) |
Path to the query image. |
--db |
db (Path) |
Path to the gallery/database folder. |
--top |
top (int) |
Number of results to return. |
--metric |
distance (int) |
0 for Cosine (default), 1 for L2. |
--threshold |
threshold (float) |
Similarity threshold. |
--device |
device (str) |
cpu (default) or gpu. |
--rebuild |
rebuild_cache (bool) |
Force rescan of all images. |
Technical Details
Metrics and Thresholds
The library uses predefined thresholds based on the SFace model's official recommendations:
- Cosine Similarity (
--metric coseno): Matches range from-1to1. Higher is better. Recommended threshold:0.363. - L2 Distance (
--metric l2): Matches start from0. Lower is better. Recommended threshold:1.128.
Development and Testing
Contributors are welcome! To run quality checks locally:
# Run Linting
ruff check src tests
# Run Type Checking
mypy src/face_match
# Run Tests
pytest
Security and Data Privacy
[!CAUTION] Biometric Data on Disk: The
.face_embeddings_cache.jsonfile generated in your database folder contains mathematical representations (embeddings) and relative file paths.
- Do not share this file.
- Treat it as sensitive personal data.
- Access to the file should be restricted using system-level permissions.
Disclaimer
- This software is not a certified biometric identification system.
- It is intended for research and low-risk identification tasks.
- The author is not responsible for misuse or legal implications of using biometric data.
Versión en Español (Resumen)
moca-face-matcher es una librería de búsqueda de coincidencias faciales ultra rápida.
Instalación rápida
pip install moca-face-matcher
Características
- Búsqueda vectorial con FAISS.
- Modelos YuNet + SFace.
- Soporte para GPU.
- Caché segura en JSON con rutas relativas.
Seguridad
Este software maneja datos biométricos. El archivo de caché .face_embeddings_cache.json es sensible y no debe ser compartido.
License
Distributed under the MIT License. See LICENSE for more information.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file moca_face_matcher-0.2.2.tar.gz.
File metadata
- Download URL: moca_face_matcher-0.2.2.tar.gz
- Upload date:
- Size: 16.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5719f9c811ab3e101f3dee2e2dbc9cf819a379b8fa86790c75523897a510b06e
|
|
| MD5 |
ca79a30d6cd8aa5d871cc391fe747a90
|
|
| BLAKE2b-256 |
25c5d24993520565500ca24941d9cc5b1e1e83d6ea332a2a56fb53e3117b90c5
|
File details
Details for the file moca_face_matcher-0.2.2-py3-none-any.whl.
File metadata
- Download URL: moca_face_matcher-0.2.2-py3-none-any.whl
- Upload date:
- Size: 11.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7a33538aa3564a65f795c12a6a5c7aac648f6867e2af1aa1439c10b9f108c03
|
|
| MD5 |
66f493a187f5776ce900f5887522a469
|
|
| BLAKE2b-256 |
28ba9d88a6414fb23b292078b1bfd5eaf7fdfb0bf5574f13e11c722898b59915
|