Tecnología y parecidos

La tecnología detrás del parecido

Entre que sacas la foto y aparece tu igualito pasan varias cosas: una red neuronal localiza tu cara, extrae 128 números que la representan matemáticamente y los compara con los de 3.574 actores o 1.151 futbolistas del Mundial. Todo en tu dispositivo, sin mandar nada a ningún servidor.

Lo que ves antes de empezar

La pantalla inicial no es decorativa. La nube de puntos que hace morphing entre caras usa MediaPipe FaceLandmarker para extraer 478 landmarks 3D de cada cara de referencia, y Three.js para interpolar suavemente entre ellas en tiempo real. Cada transición es una interpolación real entre dos geometrías faciales, no una animación pregrabada.

El efecto tiene un doble propósito: mostrar que el motor está listo y dar una idea visual de cómo el sistema ve las caras, no como fotos sino como estructuras geométricas.

Cómo tu cara se convierte en 128 números

Cuando confirmas la foto, el motor ejecuta tres pasos en secuencia, todos en el navegador:

  1. Localización de cara. Una red SSD MobileNet detecta dónde está la cara en la imagen y recorta esa región.
  2. Detección de 68 landmarks. Un segundo modelo identifica puntos clave del rostro: esquinas de ojos, contorno de nariz, mandíbula, cejas, boca. Estos puntos permiten normalizar la cara independientemente del ángulo o el tamaño en la foto.
  3. Embedding de 128 dimensiones. La red FaceNet, ejecutada con TensorFlow.js, procesa la cara normalizada y produce un vector de 128 números. Ese vector es la «huella matemática» de tu cara: dos caras parecidas tienen vectores cercanos; dos caras distintas, vectores lejanos.

La comparación se hace calculando la distancia coseno entre tu vector y el de cada persona del dataset. El que queda más cerca es tu igualito.

Por qué FaceNet y no otra cosa

Hay tres restricciones que definen qué modelo puede usarse aquí: tiene que funcionar en el navegador sin servidor, tiene que ser suficientemente preciso para que los resultados sean razonables, y tiene que pesar lo suficientemente poco para cargar en segundos en móvil.

FaceNet en TensorFlow.js es el único punto del triángulo que cierra: suficientemente preciso, suficientemente ligero y completamente client-side. Modelos más potentes como los que usa la industria de reconocimiento facial requieren GPU de servidor y no son viables en este contexto.

El problema de fondo: matemáticas vs. percepción humana

La distancia coseno entre embeddings no es lo mismo que el parecido que percibe un humano. La IA puede considerar que dos personas son muy similares matemáticamente pero que visualmente no se parezcan tanto, y viceversa: dos caras que intuitivamente parecen gemelas pueden tener vectores alejados si la pose o la iluminación son muy distintas.

Para calibrar esto, se usaron varias familias reales con parecido documentado (los Baldwin, los Bridges, los Arquette, entre otras) como banco de pruebas. El objetivo era encontrar ponderaciones y umbrales que hicieran que el resultado matemático y el resultado visual se alinearan en la mayoría de los casos. No es perfecto, pero es considerablemente mejor que usar los números directamente sin calibración.

También existe el problema de pose: la misma persona fotografiada de frente y de tres cuartos puede producir embeddings distintos. El sistema funciona mejor con fotos frontales, buena iluminación y expresión neutra.

Los dos especiales

Actualmente hay dos datasets activos:

  • Mundial 2026 — 1.151 jugadores de los 48 países clasificados. Las fotos vienen de fuentes públicas y se procesaron con el mismo pipeline de extracción de embeddings. El especial se lanzó aprovechando el Mundial, de ahí el nombre.
  • Hollywood — 3.574 actores y actrices. Un corpus más amplio que aumenta las posibilidades de encontrar un parecido real y permite filtrar resultados por género.

Ambos datasets son estáticos: se generaron offline con un pipeline de Python y Node.js y se sirven como archivos precomputados. No hay servidor procesando nada en tiempo real.

Qué no es esto

Importa dejarlo claro: igualito.es es entretenimiento, no identificación biométrica.

  • No verifica si una persona es quien dice ser.
  • No asocia tu cara con ninguna base de datos persistente.
  • No guarda ni transmite las fotos que usas.
  • Los resultados pueden ser razonables, graciosos o completamente absurdos. Los tres son válidos.

La calidad del resultado depende principalmente de la calidad de la foto: iluminación, ángulo y que haya una sola cara bien recortada. Una foto en penumbra o girada 45 grados va a dar resultados peores, no porque el modelo falle, sino porque tiene menos información con la que trabajar.

El stack, para quien quiera profundizar

  • Detección y landmarks: @vladmandic/face-api (FaceNet + SSD MobileNet + 68-point model), ejecutado con TensorFlow.js en el navegador.
  • Animación intro: MediaPipe FaceLandmarker (478 puntos 3D) + Three.js para la nube de caras en morphing.
  • Embeddings precomputados: Pipeline en Python + Node.js, exportados en formato binario Float32 comprimido con gzip (~1.7 MB para Hollywood).
  • Frontend: Vanilla JS con Vite como bundler. Sin frameworks.

Si quieres profundizar en el proceso de construcción y las decisiones técnicas detrás de igualito.es, hay una entrada más extensa en el blog: ¿A qué futbolista (o actor) te pareces?