Skip to main content

Ultra-fast face matching (OpenCV YuNet + SFace + FAISS).

Project description

moca-face-matcher

PyPI version License: MIT Python 3.9+

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 -1 to 1. Higher is better. Recommended threshold: 0.363.
  • L2 Distance (--metric l2): Matches start from 0. 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.json file 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

moca_face_matcher-0.2.1.tar.gz (16.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

moca_face_matcher-0.2.1-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file moca_face_matcher-0.2.1.tar.gz.

File metadata

  • Download URL: moca_face_matcher-0.2.1.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

Hashes for moca_face_matcher-0.2.1.tar.gz
Algorithm Hash digest
SHA256 e3bb26ee8a377617d608bad4156614765afef252b51221ccb68d968cc71eb44e
MD5 844f843d7c12e1ca107e3cd33a6ceeb7
BLAKE2b-256 cd84b091b4b6aa2c01107c193211993355a4063a0647b8ccd3b8df4084a30468

See more details on using hashes here.

File details

Details for the file moca_face_matcher-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for moca_face_matcher-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e5155a2c8bc9f6b8e6331e8715f3c19bebb4a04686985a0300f3b6bdff664b7d
MD5 929f26c34d850392da7c934c743998bd
BLAKE2b-256 e3dfa5949cbeecd58144078414a4ad5766ff0b13274ba9408a4808463f96663b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page