Reconocimiento facial | Aplicación de reconocimiento facial

Contenidos

Introducción

¿Sabías que cada vez que subes una foto a Facebook, la plataforma utiliza algoritmos de reconocimiento facial para identificar a las personas en esa imagen? ¿O que ciertos gobiernos de todo el mundo utilizan tecnología de reconocimiento facial para identificar y atrapar a los delincuentes? ¡No necesito decirte que ahora puedes desbloquear teléfonos inteligentes con tu cara!

Las aplicaciones de este subdominio de la visión por computadora son vastas y las empresas de todo el mundo ya están cosechando los beneficios. El uso de modelos de reconocimiento facial solo aumentará en los próximos años, así que ¿por qué no aprender a construir uno desde cero?

face-4642753

En este artículo, vamos a hacer precisamente eso. Primero entenderemos el funcionamiento interno del reconocimiento facial y luego tomaremos un caso de estudio simple y lo implementaremos en Python. ¡Al final del artículo, habrás construido tu primer modelo de reconocimiento facial!

Tabla de contenido

  • Comprender cómo funciona el reconocimiento facial
  • Caso de estudio
  • Implementación en Python
  • Entendiendo el código Python
  • Aplicaciones de los algoritmos de reconocimiento facial

Comprender cómo funciona el reconocimiento facial

Para comprender cómo funciona el reconocimiento facial, primero tengamos una idea del concepto de vector de características.

Cada algoritmo de aprendizaje automático toma un conjunto de datos como entrada y aprende de estos datos. El algoritmo pasa por los datos e identifica patrones en los datos. Por ejemplo, supongamos que deseamos identificar qué rostro está presente en una imagen determinada, hay varias cosas que podemos considerar como un patrón:

  • Alto / ancho del rostro.
  • Es posible que la altura y el ancho no sean fiables, ya que la imagen se puede cambiar a una cara más pequeña. Sin embargo, incluso después del cambio de escala, lo que permanece sin cambios son las relaciones: la relación entre la altura de la cara y el ancho de la cara no cambiará.
  • Color de la cara.
  • Ancho de otras partes de la cara como labios, nariz, etc.

Claramente, hay un patrón aquí: diferentes caras tienen diferentes dimensiones como las de arriba. Las caras similares tienen dimensiones similares. La parte desafiante es convertir una cara en particular en números: los algoritmos de aprendizaje automático solo entienden números. Esta representación numérica de una «cara» (o un elemento en el conjunto de entrenamiento) se denomina como vector de característica. Un vector de características se compone de varios números en un orden específico.

Como ejemplo simple, podemos mapear una «cara» en un vector de características que puede comprender varias características como:

  • Altura de la cara (cm)
  • Ancho de cara (cm)
  • Color medio de la cara (R, G, B)
  • Ancho de labios (cm)
  • Altura de la nariz (cm)

Esencialmente, dada una imagen, podemos trazar varias características y convertirlas en un vector de características como:

Altura de la cara (cm) Ancho de cara (cm) Color medio de la cara (RGB) Ancho de labios (cm) Altura de la nariz (cm)
23,1 15,8 (255, 224, 189) 5.2 4.4

Entonces, nuestra imagen ahora es un vector que podría representarse como (23.1, 15.8, 255, 224, 189, 5.2, 4.4). Por supuesto, podría haber innumerables otras características que podrían derivarse de la imagen (por ejemplo, color de cabello, vello facial, gafas, etc.). Sin embargo, para el ejemplo, consideremos solo estas 5 características simples.

Ahora, una vez que hemos codificado cada imagen en un vector de características, el problema se vuelve mucho más simple. Claramente, cuando tenemos 2 caras (imágenes) que representan a la misma persona, los vectores de características derivados serán bastante similares. Dicho de otra manera, la «distancia» entre los 2 vectores de características será bastante pequeña.

El aprendizaje automático puede ayudarnos aquí con 2 cosas:

  1. Derivando el vector de características: es difícil enumerar manualmente todas las funciones porque hay muchas. Un algoritmo de aprendizaje automático puede etiquetar de forma inteligente muchas de estas características. Por ejemplo, una característica compleja podría ser: relación entre la altura de la nariz y el ancho de la frente. Ahora será bastante difícil para un ser humano enumerar todas esas características de «segundo orden».
  2. Algoritmos coincidentes: Una vez que se han obtenido los vectores de características, un algoritmo de aprendizaje automático debe hacer coincidir una nueva imagen con el conjunto de vectores de características presentes en el corpus.

Ahora que tenemos una comprensión básica de cómo funciona el reconocimiento facial, creemos nuestro propio algoritmo de reconocimiento facial utilizando algunas de las bibliotecas de Python más conocidas.

Caso de estudio

Nos dan un montón de caras, posiblemente de celebridades como Mark Zuckerberg, Warren Buffett, Bill Gates, Shah Rukh Khan, etc. Llame a este montón de caras como nuestro «corpus». Ahora, se nos da la imagen de otra celebridad («nueva celebridad»). La tarea es simple: identificar si esta «nueva celebridad» se encuentra entre los presentes en el «corpus».

Estas son algunas de las imágenes del corpus:

face1-7270292

Como puede ver, tenemos celebridades como Barack Obama, Bill Gates, Jeff Bezos, Mark Zuckerberg, Ray Dalio y Shah Rukh Khan.

Ahora, aquí está la «nueva celebridad»:

face2-3172275

Nota: todas las imágenes anteriores se han tomado de imágenes de Google.

Es obvio que este es Shah Rukh Khan. Sin embargo, para una computadora esta es una tarea desafiante. El desafío se debe al hecho de que para nosotros, los humanos, es fácil combinar tantas características de las imágenes para ver cuál es qué celebridad. Sin embargo, para una computadora, no es sencillo aprender a reconocer estas caras.

Existe una biblioteca de Python increíblemente simple que encapsula todo lo que aprendimos anteriormente: crear vectores de características a partir de caras y saber cómo diferenciar entre caras. Esta biblioteca de Python se llama como Reconocimiento facial y en el fondo, emplea dlib – un conjunto de herramientas C ++ moderno que contiene varios algoritmos de aprendizaje automático que ayudan a escribir aplicaciones sofisticadas basadas en C ++.

Reconocimiento facial La biblioteca en Python puede realizar una gran cantidad de tareas:

  • Encuentra todas las caras en una imagen determinada
  • Encuentra y manipula rasgos faciales en una imagen.
  • Identificar caras en imágenes
  • Reconocimiento facial en tiempo real

Aquí, hablaremos sobre el tercer caso de uso: identificar caras en imágenes.

Puede encontrar el código fuente de Reconocimiento facial biblioteca aquí en Github: https://github.com/ageitgey/face_recognition.

De hecho, también hay un tutorial sobre cómo instalar Reconocimiento facial Biblioteca: https://github.com/ageitgey/face_recognition#installation-options. Antes de instalar Reconocimiento facial, necesitas instalar dlib así como. Puedes encontrar las instrucciones para instalar dlib aqui: https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf.

Implementación en Python

Esta sección contiene el código para la construcción de un sistema de reconocimiento facial sencillo usando el Reconocimiento facial Biblioteca. Esta es la parte de implementación, repasaremos el código para entenderlo con más detalle en la siguiente sección.

# import the libraries
import os
import face_recognition

# make a list of all the available images
images = os.listdir('images')

# load your image
image_to_be_matched = face_recognition.load_image_file('my_image.jpg')

# encoded the loaded image into a feature vector
image_to_be_matched_encoded = face_recognition.face_encodings(
    image_to_be_matched)[0]

# iterate over each image
for image in images:
    # load the image
    current_image = face_recognition.load_image_file("images/" + image)
    # encode the loaded image into a feature vector
    current_image_encoded = face_recognition.face_encodings(current_image)[0]
    # match your image with the image and check if it matches
    result = face_recognition.compare_faces(
        [image_to_be_matched_encoded], current_image_encoded)
    # check if it was a match
    if result[0] == True:
        print "Matched: " + image
    else:
        print "Not matched: " + image

La estructura de carpetas es la siguiente:

reconocimiento facial:

  • fr.py
  • my_image.jpg
  • imágenes /
    • barack_obama.jpg
    • bill_gates.jpg
    • jeff_bezos.jpg
    • mark_zuckerberg.jpg
    • ray_dalio.jpg
    • shah_rukh_khan.jpg
    • warren_buffett.jpg

Nuestro directorio raíz, reconocimiento facial contiene:

  • Nuestro código de reconocimiento facial anterior en forma de fr.py.
  • my_image.jpg: la imagen que se va a reconocer («nueva celebridad»).
  • imágenes / – el «corpus».

Cuando crea la estructura de carpetas como arriba y ejecuta el código anterior, esto es lo que obtiene como resultado:

Matched: shah_rukh_khan.jpg
Not matched: warren_buffett.jpg
Not matched: barack_obama.jpg
Not matched: ray_dalio.jpg
Not matched: bill_gates.jpg
Not matched: jeff_bezos.jpg
Not matched: mark_zuckerberg.jpg

Claramente, la «nueva celebridad» es Shah Rukh Khan y nuestro sistema de reconocimiento facial es capaz de detectarla.

Entendiendo el código Python

Ahora, repasemos el código para entender cómo funciona:

# import the libraries
import os
import face_recognition

Estas son simplemente las importaciones. Usaremos el incorporado os biblioteca para leer todas las imágenes de nuestro corpus y usaremos Reconocimiento facial con el fin de escribir el algoritmo.

# make a list of all the available images
images = os.listdir('images')

Este sencillo código nos ayuda a identificar la ruta de todas las imágenes del corpus. Una vez ejecutada esta línea, tendremos:

images = ['shah_rukh_khan.jpg', 'warren_buffett.jpg', 'barack_obama.jpg', 'ray_dalio.jpg', 'bill_gates.jpg', 'jeff_bezos.jpg', 'mark_zuckerberg.jpg']

Ahora, el siguiente código carga la imagen de la nueva celebridad:

# load your image
image_to_be_matched = face_recognition.load_image_file('my_image.jpg')

Para asegurarnos de que los algoritmos puedan interpretar la imagen, convertimos la imagen en un vector de características:

# encoded the loaded image into a feature vector

image_to_be_matched_encoded = face_recognition.face_encodings(

    image_to_be_matched)[0]

El resto del código ahora es bastante fácil:

# iterate over each image
for image in images:
    # load the image
    current_image = face_recognition.load_image_file("images/" + image)

    # encode the loaded image into a feature vector
    current_image_encoded = face_recognition.face_encodings(current_image)[0]

    # match your image with the image and check if it matches
    result = face_recognition.compare_faces(
        [image_to_be_matched_encoded], current_image_encoded)

    # check if it was a match
    if result[0] == True:
        print "Matched: " + image
    else:
        print "Not matched: " + image

Aquí estamos:

  • Bucle sobre cada imagen.
  • Codificar la imagen en un vector de características.
  • Comparando la imagen cargada con la imagen a reconocer.
  • Si es una coincidencia, lo imprimimos. Si no coincide, también lo imprimimos.

El resultado que se muestra arriba sugiere claramente que este simple algoritmo de reconocimiento facial funciona increíblemente bien. Intentemos reemplazar Mi imagen con otra imagen:

face3-4201312

Cuando vuelva a ejecutar el algoritmo, verá el siguiente resultado:

Not matched: shah_rukh_khan.jpg
Not matched: warren_buffett.jpg
Not matched: barack_obama.jpg
Not matched: ray_dalio.jpg
Not matched: bill_gates.jpg
Not matched: jeff_bezos.jpg
Not matched: mark_zuckerberg.jpg

Claramente, el sistema no identificó a Jack Ma como ninguna de las celebridades mencionadas. Esto indica que nuestro algoritmo es bastante bueno en ambos:

  • Identificar correctamente los que están presentes en el corpus
  • Marcar un desajuste para aquellos que no están presentes en el corpus

Aplicaciones de reconocimiento facial

El reconocimiento facial es un problema bien investigado y se usa ampliamente tanto en la industria como en el mundo académico. Como ejemplo, un criminal en China fue capturado porque un sistema de reconocimiento facial en un centro comercial detectó su rostro y dio la alarma. Claramente, el reconocimiento facial se puede utilizar para mitigar la delincuencia. Hay muchos otros casos de uso interesantes del reconocimiento facial:

  • Autenticación facial: Apple ha introducido Face ID para autenticación facial en iPhones. Algunos de los principales bancos están intentando utilizar la autenticación facial para los casilleros.
  • Servicio al Cliente: Algunos de los bancos de Malasia han instalado sistemas que utilizan el reconocimiento facial para detectar clientes valiosos del banco para que el banco pueda brindar un servicio personalizado. De esta manera, los bancos pueden generar más ingresos reteniendo a esos clientes y manteniéndolos felices.
  • Suscripción de seguros: Muchas compañías de seguros utilizan el reconocimiento facial para hacer coincidir el rostro de la persona con el que se proporciona en la prueba de identificación con foto. De esta forma, el proceso de suscripción se vuelve mucho más rápido.

Notas finales

En resumen, el reconocimiento facial es un problema interesante con muchos casos de uso poderosos que pueden ayudar significativamente a la sociedad en varias dimensiones. Si bien siempre existirá un riesgo ético asociado a la comercialización de tales técnicas, ese es un debate que dejaremos de lado para otro momento.

Espero que este artículo le haya resultado útil. ¡Envíe sus comentarios y sugerencias en la sección de comentarios a continuación!

Sobre el Autor

aman-goel-5332826Aman Goel, cofundador y director ejecutivo de AllinCall Research & Solutions
Aman Goel es un ex alumno de IIT-Bombay y es un emprendedor, codificador y fanático de la investigación de accidentes aéreos. Escribe blogs de programación para Hackr.io, una comunidad de programación para encontrar los mejores tutoriales de programación. Es cofundador de AllinCall Research & Solutions y le encanta ayudar a las personas a resolver los problemas de IIT JEE.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.