¿Cómo reconoce una máquina un rostro? ¿Qué detalles concretos busca y cómo los distingue? ¿De qué depende que se pueda reconocer a una persona concreta entre miles en una fotografía? Son cuestiones que quien más quien menos se ha preguntado alguna vez, especialmente ahora que tenemos sistemas de reconocimiento facial hasta en la sopa: Google Photos, Fotos para MacOS, Facebook… De hecho es difícil ver en acción estos sistemas «adivinando quién es quién» sin imaginar cómo son capaces de hacerlo.
Por eso este vídeo de Function es una estupenda explicación, que reúne las virtudes de la concisión y la explicación visual. Cubre todos los pasos y además de una forma fácil de entender. De hecho no entran en demasiados detalles matemáticos, sino que se quedan a nivel divulgativo, algo siempre de agradecer.
Todo comienza por las imágenes digitalizadas, que se convierten a blanco y negro y luego a un histograma de gradientes orientados, que básicamente son vectores que indican hacia donde van las diferencias de brillo entre píxeles. Esto permite detectar los bordes de los objetos en la imagen. Con eso es relativamente fácil explorar con una especie de «plantillas» cada zona de la imagen, intentando identificar los llamados landmarks o puntos de referencia concretos: ojos, nariz, boca, etcétera, que se corresponden con círculos, trazos verticales/horizontales y demás. Se emplean hasta unos 68 de estos puntos normalmente. Cuando se tienen varios de ellos en la misma zona es porque probablemente hay un rostro humano a su alrededor.
El siguiente paso es asegurarse de que la orientación del rostro es correcta, porque la persona puede estar «mirando» en diferentes direcciones. Dado que se sabe dónde están los puntos de referencia se puede deformar la imagen en un proceso llamado normalización, estirándola hasta que encaje. Podría decirse que no queda muy bonito pero es muy práctico. De este modo se consigue que todas «miren de frente»… Más o menos.
El último paso en el reconocimiento para distinguir unas personas de otras es la clasificación. Para esto hay diferentes algoritmos. En el vídeo ponen como ejemplo el uso de redes neuronales convolucionales, que básicamente se entrenan mediante aprendizaje automático con muchas imágenes de personas distintas, a las que se suman las de la persona que se está intentando encontrar, ya de nuevo en color. Aquí hay una combinación de estadística (cuantificar las diferencias entre los puntos de referencia de dos rostros) y factor humano (confirmar al algoritmo si ha acertado o no), lo cual se hace durante la fase de entrenamiento.
Tal y como recalcan en el vídeo los resultados serán sólo tan buenos como bueno sea el entrenamiento y la variedad de imágenes. Todo esto puede sonar muy complicado, pero se obtiene un resultado final que cuando se trata de comparar dos rostros no es más que una puntuación en forma de porcentaje de similitud, que puede traducirse también a un «sí, son iguales» o en un «no, son diferentes».
Aunque laborioso, es relativamente fácil para el algoritmo seguir todos los pasos con cualquier imagen nueva y acertar con un rostro entre los de la multitud con un alto grado de probabilidad o –al menos– hacerlo mejor y más rápido que muchas personas. A modo de ejemplo se puede probar al juego estilo ¿Dónde está Wally? que plantean en la explicación de vídeo: Where’s Munna? La verdad es que es bastante difícil hacerlo más rápido que la máquina.
Relacionado:
- El reconocimiento facial y de escenas de Amazon en la picota
- Cómo hacer volar un dron por la jeta
- El reconocimiento de rostros como sutileza en algunas aplicaciones
- Un algoritmo de código abierto para reconocimiento de imágenes
- Cómo funcionan los filtros de Snapchat y de otras apps similares
- La ética de un algoritmo que juzga a las personas por su aspecto