Medidor de Similitud Facial
Herramienta gratuita con IA que compara la similitud entre dos rostros. Sube dos fotos y deja que la IA calcule cuánto se parecen los rostros. Funciona offline en el navegador.
Sobre el Medidor de Similitud Facial
El Medidor de Similitud Facial compara dos fotos y reporta cuánto se parecen visualmente los rostros como un porcentaje del 0% al 100%. Funciona enteramente en tu navegador vía @vladmandic/face-api (un fork mantenido de face-api.js). Ambas imágenes se decodifican localmente, los rostros se detectan con un detector estilo MobileNet, cada rostro se codifica como un descriptor de 128 dimensiones por una red inspirada en FaceNet, y la distancia coseno entre los dos descriptores se convierte en un porcentaje de similitud. Ningún byte de imagen sale de tu dispositivo: no hay procesamiento del lado del servidor, ni subida, ni registro.
Úsalo para exploración casual: '¿mis dos primos realmente se parecen?', '¿esa selfie todavía se parece a mí cinco años después?', '¿estas dos celebridades no relacionadas se ven similares?'. Es divertido, rápido y te da un número. Hemos elegido intencionalmente un modo de operación permisivo (un solo rostro mejor por imagen, sin verificación de vivacidad, sin filtrado de calidad) para que las fotos pequeñas o de baja calidad sigan produciendo un resultado en lugar de un error. Eso lo hace amigable pero también significa que los porcentajes no están calibrados para autenticación biométrica. Trata el puntaje como un indicador relativo de similitud visual, no como prueba de identidad.
Los mejores resultados requieren fotos frontales, bien iluminadas, a resolución decente donde el rostro ocupe una parte significativa del encuadre. Fotos con gafas de sol, mascarillas, maquillaje pesado, sombreros que cubran las cejas, ángulos laterales o baja resolución distorsionarán el descriptor y bajarán el puntaje, incluso cuando la misma persona aparezca en ambas fotos. A la inversa, gemelos idénticos, padres e hijos, e incluso personas no relacionadas de edad, etnia y peinado similares pueden producir puntajes sorprendentemente altos. Cirugía plástica, cambio de peso significativo, envejecimiento de diez o más años, o filtros fuertes / software face-tune también importan — el modelo no fue entrenado para ser invariante a esos.
Hemos diseñado deliberadamente esta herramienta como una curiosidad y no como un sistema de verificación. No es adecuada para verificación de identidad biométrica, KYC (know-your-customer), control fronterizo, vigilancia, selección laboral, verificación en apps de citas, o cualquier situación donde el resultado se use para permitir o denegar algo a una persona. Para esos casos de uso necesitas un sistema de proveedor que haya sido evaluado bajo NIST FRVT 1:1, que admita detección de vivacidad (anti-spoofing), evaluación de equidad demográfica, inscripción segura y revocación. Una demo gratuita en navegador no puede satisfacer esos requisitos operativos, legales o de auditoría.
La privacidad es por diseño. Los pesos del modelo se descargan a tu navegador una vez (unos 6 MB, en caché para futuras visitas) y toda la comparación corre localmente como JavaScript. No hay paso de subida, no hay caché temporal del lado del servidor, no hay llamada a API. La página usa analítica estándar solo para conteos de tráfico. Cerrar la pestaña limpia todo el estado. No almacenamos, registramos, vendemos ni compartimos las fotos que comparas.
Cómo funciona la comparación
El pipeline tiene tres etapas — detección, alineamiento + codificación, y puntuación de distancia — y cada etapa usa una red neuronal de código abierto establecida. El detector es un SSD MobileNetV1 entrenado en WIDER FACE. Devuelve uno o más cuadros delimitadores por imagen con puntajes de confianza; conservamos el rostro más confiable por foto para la comparación. Para flujos de trabajo con varios rostros, ver el Predictor de Edad y Género que itera sobre cada detección.
Cada rostro detectado se alinea. Un detector de 68 landmarks (una ConvNet pequeña entrenada en iBUG 300-W) predice coordenadas de landmarks: comisuras externas e internas de los ojos, puente y punta de la nariz, comisuras de la boca y línea de la mandíbula. El rostro se rota y recorta para que los ojos queden horizontales y la distancia interpupilar se normalice. La alineación importa: la red de codificación fue entrenada en rostros alineados y producirá descriptores inconsistentes con entrada no alineada.
El recorte alineado pasa por una red de codificación facial — en face-api.js esto es una arquitectura ResNet-34 inspirada en FaceNet (Schroff, Kalenichenko & Philbin, 2015) y entrenada con triplet loss para producir vectores unitarios de 128 dimensiones que se agrupen estrechamente dentro de la misma identidad y se dispersen entre identidades. ArcFace (Deng et al., 2019) es una mejora más reciente que usa pérdida de margen angular aditivo; el fork de vladmandic admite backbones más nuevos de estilo ArcFace para mayor precisión cuando se necesite. Usamos el modelo ResNet-34 por defecto por compatibilidad con navegador y huella.
Dos descriptores de 128 dimensiones se comparan con distancia coseno: distance = 1 − (dot(a,b) / (|a||b|)). Menor distancia = más similar. El umbral estándar de face-api.js para 'misma persona' es aproximadamente 0,6 (una distancia de 0,6 significa aproximadamente 70% de similitud en nuestro display). Mapeamos la distancia a un porcentaje de similitud usando una curva suave: 0,0 → 100%, 0,4 → ~70%, 0,6 → ~50%, 1,0 → 0%. Este mapeo es empírico y amigable más que calibrado contra un estándar biométrico, así que un puntaje del 85% debe leerse como 'muy similar' pero no como una probabilidad de ser la misma persona.
Todos los pesos se cuantizan a flotante de 32 bits para el runtime de TensorFlow.js en navegador; descarga total ~6 MB. La inferencia corre en WebGL cuando está disponible (acelerado por GPU) y cae a CPU vía WebAssembly. La comparación de extremo a extremo de dos rostros suele tomar 200 ms a 1 s en un portátil moderno, más en móvil. La UI muestra una barra estilo confianza y una de cinco bandas cualitativas (muy similar, similar, algo similar, no similar, muy diferente) elegidas por amabilidad, no por rigor biométrico.
Precisión, umbrales y dónde falla esta herramienta
En el benchmark académico LFW (Labelled Faces in the Wild), los codificadores faciales de 128 dimensiones bien entrenados alcanzan ~99% de precisión de verificación en pares emparejados. Ese número no es la precisión que debes esperar en fotos arbitrarias de internet. Los pares LFW están preseleccionados por calidad de imagen y pose frontal; el rendimiento in-the-wild es mucho más ruidoso. NIST FRVT 1:1 — que evalúa decenas de proveedores comerciales sobre cientos de miles de fotos operativas — muestra que incluso los sistemas líderes tienen valores de FAR (False Acceptance Rate) y FRR (False Rejection Rate) que varían en un orden de magnitud con demografía, edad y calidad de imagen. Nuestro backbone open-source es más antiguo y más pequeño que los líderes en FRVT.
Modos de fallo concretos que encontrarás: gemelos idénticos casi siempre puntúan por encima del 80% — el codificador no puede distinguirlos de manera confiable. Padres e hijos adultos, hermanos, o personas no relacionadas de la misma etnia y edad y peinado similares pueden puntuar 70–85%. La misma persona fotografiada con diez años de diferencia puede caer al 50% si las características faciales han cambiado. Filtros fuertes (FaceTune, Snapchat, beauty filters) editan efectivamente otro rostro en la foto y bajarán el puntaje significativamente. Gafas, mascarillas, barbas, hijabs, sombreros y oclusión parcial reducen la precisión porque ocultan landmarks informativos.
La equidad demográfica es una limitación conocida. Buolamwini & Gebru (2018), NIST FRVT (2019, 2024) y muchas otras auditorías han mostrado que los modelos de reconocimiento facial entrenados predominantemente con sujetos de piel más clara producen tasas de error más altas para rostros de piel más oscura, mujeres y niños. El descriptor de face-api.js usado aquí hereda esos sesgos. Trata cualquier comparación individual con cautela, especialmente cuando uno o ambos sujetos pertenecen a grupos sub-representados en sets de entrenamiento públicos estándar.
No uses esta herramienta como autenticador biométrico, sistema de prueba de identidad, verificación anti-fraude, coincidencia de vigilancia, filtro de selección laboral o verificador de apps de citas. Para esos usos necesitas un sistema comercial auditado con detección de vivacidad (para que una foto impresa o un video deepfake no pase), un pipeline de revocación y una evaluación de sesgo documentada. No tenemos esas garantías y te decimos explícitamente que no despliegues esto en producción. Es una herramienta de curiosidad, y el puntaje es una guía, no un veredicto.
- Los gemelos idénticos puntúan típicamente 85–95% — el modelo no puede distinguirlos de manera confiable.
- La misma persona con 10+ años de diferencia puede bajar a 50–70% de similitud por envejecimiento natural.
- Gafas de sol, mascarillas, barbas, sombreros u otras oclusiones bloquean landmarks y reducen el puntaje.
- Filtros fuertes (FaceTune, beauty filters, lentes Snapchat) editan efectivamente el rostro y distorsionan el descriptor.
- La equidad demográfica es desigual: tonos de piel oscuros, mujeres y niños tienen tasas de error más altas por desbalance del set de entrenamiento.
- La herramienta reporta el rostro más confiable por imagen; las fotos de grupo deben recortarse a un solo rostro primero.
- No hay detección de vivacidad — una foto impresa de un rostro produce el mismo descriptor que una captura en vivo.
- No es adecuada para verificación de identidad biométrica, KYC, control fronterizo, empleo o chequeos de seguridad de apps de citas.
- El mapeo de distancia coseno a porcentaje es amigable y no está calibrado contra un estándar biométrico.
Glosario
- Embedding facial (descriptor)
- Vector numérico de longitud fija — aquí, 128 números flotantes — producido por una red neuronal que codifica la identidad visual de un rostro. Fotos de la misma persona deberían tener embeddings similares; fotos de personas diferentes, embeddings disímiles.
- Similitud coseno / distancia coseno
- Medida geométrica de cuán alineados están dos vectores. Similitud coseno = dot(a,b) / (|a||b|), rango [-1, 1]; distancia coseno = 1 − similitud coseno. Se usa porque los descriptores viven en una hiperesfera de alta dimensión.
- Umbral
- La distancia coseno por debajo de la cual se declara coincidencia entre dos descriptores. face-api.js usa ~0,6 por defecto; corresponde a aproximadamente 50% en nuestra escala UI amigable. Bajarlo hace la herramienta más estricta (menos coincidencias falsas, más perdidas).
- FAR (False Acceptance Rate)
- Tasa con la que un comparador facial dice incorrectamente que dos personas distintas son la misma. Crítica para sistemas de seguridad — una FAR alta significa que los impostores pasan.
- FRR (False Rejection Rate)
- Tasa con la que un comparador facial dice incorrectamente que fotos de la misma persona son distintas. Una FRR alta significa que usuarios genuinos sufren molestias.
- FaceNet
- Paper hito de 2015 de Schroff, Kalenichenko & Philbin (Google) que introdujo el esquema de entrenamiento por triplet loss para producir embeddings faciales de 128 dimensiones en una hiperesfera unitaria.
- ArcFace
- Función de pérdida de reconocimiento facial de 2019 (Deng et al., InsightFace) que usa un margen angular aditivo para separar más las clases de descriptores en la hiperesfera. Estado del arte en benchmarks académicos como LFW e IJB-B.
- LFW / NIST FRVT
- Benchmarks académicos y gubernamentales para sistemas de reconocimiento facial. LFW (Labelled Faces in the Wild, 2007) es pequeño y de alta calidad. NIST FRVT (Face Recognition Vendor Test) es la evaluación gubernamental estándar de oro, con cientos de miles de fotos operativas y publicación continua.
Preguntas Frecuentes
¿Cómo compara la IA dos rostros?
Detecta un rostro por imagen, alinea cada uno usando 68 landmarks faciales, codifica cada rostro alineado como un vector de 128 dimensiones con un ResNet estilo FaceNet, y calcula la distancia coseno entre los dos vectores. La distancia coseno se mapea a un puntaje amigable de 0–100% de similitud. Toda la inferencia es JavaScript en tu navegador vía @vladmandic/face-api sobre TensorFlow.js.
¿Qué significa realmente el porcentaje?
Es un mapeo suave de distancia coseno a una escala de 0–100. En términos generales: 90–100% = visualmente casi idénticos (misma persona, gemelos o un parecido extremo); 70–90% = misma persona probable, o parientes cercanos; 50–70% = algunas características compartidas pero no necesariamente la misma persona; por debajo del 50% = personas distintas. NO es una probabilidad y NO es un resultado de verificación biométrica.
¿Por qué personas no relacionadas puntúan 60%?
Porque el descriptor codifica la forma general del rostro — separación de los ojos, ancho de la nariz, ángulo de la mandíbula, etnia, edad — y muchas personas no relacionadas comparten suficientes de esas características para caer en una región similar del espacio de embeddings. Es una propiedad fundamental de los descriptores faciales de 128 dimensiones, no un fallo.
¿Por qué mi propia foto puntúa solo 75% contra otra foto mía?
Causas comunes: (1) iluminación o ángulo de cámara distintos; (2) edad distinta (más de unos pocos años puede mover los descriptores significativamente); (3) gafas o vello facial solo en una de las fotos; (4) filtros fuertes o FaceTune en una foto; (5) una foto está en mucha menor resolución; (6) llevas maquillaje en una y en la otra no. Prueba otro par de fotos con condiciones similares.
¿Mis fotos se suben?
No. Toda la detección, codificación y comparación facial ocurre localmente en tu navegador vía TensorFlow.js. Los pesos del modelo se descargan una vez (unos 6 MB, en caché) y la inferencia corre sobre los JPEGs que selecciones. Los bytes de las fotos nunca dejan el dispositivo. No almacenamos, registramos ni compartimos fotos.
¿Puedo usarlo para verificación de identidad?
No. No uses esta herramienta para verificar la identidad de alguien, controlar acceso a un servicio, prevenir fraude o filtrar empleados / citas. No tiene detección de vivacidad, no tiene umbral calibrado, no tiene auditoría de equidad demográfica y usa un modelo open-source más pequeño que los sistemas comerciales. Para verificación de identidad necesitas un proveedor evaluado bajo NIST FRVT con FAR/FRR documentados y garantías operativas.
¿Por qué los gemelos idénticos no son distinguibles?
El descriptor facial está entrenado para ser invariante a iluminación, expresión y pose, pero no está diseñado para capturar microcaracterísticas que incluso los humanos usan para distinguir gemelos (un lunar pequeño, una asimetría leve). La discriminación de gemelos es un área de investigación activa; los codificadores faciales estándar generalmente fallan en ella.
¿Puede distinguir entre padres e hijos?
A menudo, pero no siempre. Padres e hijos adultos comparten muchas características faciales genéticas y pueden puntuar 60–80%. El modelo está entrenado para acercar la misma identidad, pero no tiene una noción de 'parecido familiar' versus 'identidad', así que puntajes altos entre parientes son comunes y esperables.
¿Soporta múltiples rostros en una foto?
Actualmente toma el rostro más confiable por imagen y compara esos dos. Si tus fotos son de grupo, recorta cada una a un solo rostro primero. Para flujos con múltiples rostros tenemos un Predictor de Edad y Género dedicado que itera sobre cada rostro detectado en una imagen.
¿Y si no se detecta rostro?
La herramienta reporta 'no se detectó rostro' para esa imagen. Causas comunes: rostro demasiado pequeño (por debajo del tamaño mínimo del detector), rostro en ángulo extremo, iluminación demasiado oscura o brillante, imagen muy borrosa o la imagen no es realmente una foto de un rostro. Prueba con una foto más clara, más grande, frontal.
Referencias y fuentes académicas
- Schroff, F., Kalenichenko, D., & Philbin, J.. (2015). FaceNet: A Unified Embedding for Face Recognition and Clustering IEEE CVPR.
- Deng, J., Guo, J., Xue, N., & Zafeiriou, S.. (2019). ArcFace: Additive Angular Margin Loss for Deep Face Recognition IEEE CVPR (proyecto InsightFace).
- Huang, G. B., Ramesh, M., Berg, T., & Learned-Miller, E.. (2007). Labeled Faces in the Wild: A Database for Studying Face Recognition in Unconstrained Environments Universidad de Massachusetts Amherst Technical Report.
- Grother, P., Ngan, M., & Hanaoka, K.. (2024). NIST Face Recognition Vendor Test (FRVT) Instituto Nacional de Estándares y Tecnología de EE. UU..
- Buolamwini, J., & Gebru, T.. (2018). Gender Shades: Disparidades intersectional de precisión en clasificación de género comercial Proceedings of Machine Learning Research.
- Mandic, V.. (2024). @vladmandic/face-api — fork TypeScript mantenido de face-api.js Proyecto open source, licencia MIT.
Last reviewed: · Reviewed by Equipo de Ética e Ingeniería de IA de WuTools
