Skip to main content

Búsqueda de coincidencias faciales ultra rápida (OpenCV YuNet + SFace + FAISS).

Project description

face-match

English (summary): Small, dependency-light CLI to find the most visually similar faces in a folder of images (OpenCV YuNet + SFace). It does not prove legal identity, is not a certified biometric system, and must be used with a clear legal basis and governance. See Disclaimer below.


Qué es

Herramienta de línea de comandos que, dada una foto de consulta, recorre una carpeta de imágenes (incluye subcarpetas), detecta rostros y ordena las fotos por similitud al rostro de la consulta. Pensada como base técnica para integraciones (no sustituye un producto completo de control de acceso o RR.HH.).

Requisitos

  • Python 3.9 o superior
  • Conexión a Internet la primera vez (descarga ~40 MB de modelos ONNX de OpenCV Zoo; luego quedan en caché local)

Instalación

git clone https://github.com/Moca9801/face-match.git
cd face-match
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -e ".[dev]"

Instalación solo de ejecución (sin tests):

pip install .

Uso

  1. Coloca las imágenes de la galería en la carpeta database del directorio actual o indica otra con --db.
  2. Ejecuta:
# Búsqueda estándar (usa umbral por defecto 0.363 para coseno)
face-match consulta.jpg

# Búsqueda en una carpeta específica con más resultados
face-match consulta.jpg --db C:\ruta\galeria -n 20

# Búsqueda estricta (solo coincidencias muy altas)
face-match consulta.jpg --threshold 0.5

# Reconstruir la base de datos (ignorar caché)
face-match consulta.jpg --rebuild

Uso como Librería (SDK)

Puedes integrar el motor de búsqueda en tus propios scripts para recibir resultados estructurados (diccionarios y listas) sin ensuciar la consola:

from pathlib import Path
from face_match import find_matches

# Ejecutar búsqueda programática
data = find_matches(
    query=Path("rostro.jpg"),
    db=Path("./galeria"),
    top=5,
    threshold=0.4
)

print(f"Escaneadas: {data['total_scanned']} fotos")
for res in data["results"]:
    print(f"Coincidencia: {res['path']} (Distancia: {res['distance']:.4f})")

Opciones:

Opción (CLI) Parámetro (SDK) Atajo Descripción
query query - Imagen con el rostro a buscar (obligatorio)
--db db - Carpeta de la galería (por defecto ./database)
--top top -n Máximo de resultados (por defecto 10)
--threshold threshold -t Umbral de similitud (def: 0.363 / 1.128)
--metric distance - cosine (0) o l2 (1)
--device device - cpu o gpu
--rebuild rebuild_cache - Ignora la caché y vuelve a extraer embeddings

¿Cuándo usar CPU vs GPU?

El sistema es muy eficiente por defecto, pero puedes optimizarlo según tu hardware:

  • Usar CPU (Por defecto):
    • Galerías pequeñas o medianas (< 10,000 fotos).
    • Si no tienes una tarjeta NVIDIA configurada con CUDA.
    • Para uso general en laptops, ya que consume menos energía.
  • Usar GPU (--device gpu):
    • Galerías masivas (> 100,000 fotos).
    • Cuando realizas un escaneo inicial pesado (--rebuild) y tienes una tarjeta NVIDIA.
    • Nota: Requiere drivers de NVIDIA instalados y que las librerías (opencv-python con CUDA y faiss-gpu) sean compatibles con tu sistema. Si pides gpu y no está disponible, el sistema hará un fallback automático a cpu.

Cómo interpretar los resultados

Este sistema soporta dos métricas de comparación:

  • Métrica Coseno (Recomendada): Los valores suelen ir de 0 a 1. Mayor es mejor. Un valor > 0.363 suele indicar que es la misma persona.
  • Métrica L2 (Norma): Distancia euclídea entre vectores. Menor es mejor. Un valor < 1.128 suele indicar coincidencia.

Caché y Estabilidad

  • Caché Inteligente: Se genera .face_embeddings_cache.json en la carpeta --db. Solo se recalculan las fotos modificadas, permitiendo búsquedas en milisegundos.
  • Descarga Segura: Los modelos ONNX se descargan de OpenCV Zoo con validación de integridad y timeouts para mayor fiabilidad.

Desarrollo

pip install -e ".[dev]"
pytest

Seguridad y Privacidad de Datos

[!CAUTION] Datos Biométricos en Disco: El archivo .face_embeddings_cache.json generado en la carpeta de la base de datos contiene representaciones matemáticas de rostros (embeddings) y rutas relativas de archivos de la galería.

  • No compartas este archivo.
  • Trátalo como información confidencial según las leyes de protección de datos de tu región.
  • La caché es en formato JSON (seguro) para evitar riesgos de ejecución de código, pero el acceso al archivo debe estar restringido mediante permisos de sistema.

Aviso legal, privacidad y uso responsable

  • El reconocimiento facial y los datos biométricos están sometidos a leyes estrictas en muchos países (p. ej. RGPD en la UE, leyes locales en Latinoamérica). No uses este software sin base legal clara, política de privacidad, minimización de datos y, donde proceda, consentimiento informado de las personas afectadas.
  • Esta herramienta devuelve similitud visual entre fotos, no certifica identidad ni debería usarse como única prueba en empleo, vigilancia o procesos judiciales sin controles humanos y procedimientos definidos por tu organización y asesoría jurídica.
  • Los falsos positivos (personas distintas con rostro parecido) y falsos negativos son posibles; la iluminación, calidad, edad, accesorios y sesgos del modelo afectan el resultado.
  • Los autores no se hacen responsables del uso que terceros hagan del software; se ofrece «tal cual» según la licencia MIT.

Licencia

MIT — ver LICENSE.

Créditos

  • Detección y reconocimiento basados en modelos publicados en OpenCV Zoo (YuNet, SFace).

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.0.tar.gz (17.4 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.0-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: moca_face_matcher-0.2.0.tar.gz
  • Upload date:
  • Size: 17.4 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.0.tar.gz
Algorithm Hash digest
SHA256 18bff51955d5086d39e61ab7a59b6e65452afc893dd670b082d69aefa5f85ab6
MD5 61ad98f40a2d697ea11fad026a80fb16
BLAKE2b-256 5127a706f1a096cafa8e1b53ede39c4fb94a6a93956b298247cdf82ebfbf8459

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for moca_face_matcher-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2875cdd27d990ef516915030017807044fdd8e3a38f99a46169bf0004ab156f8
MD5 f02f10941e2698c2e5174c02bc8baf0b
BLAKE2b-256 ce90aed384085ea0eb80ac78a90c8a965257f14c02c73dbcb720ca3b07d95b03

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