👨👩 RECONOCIMIENTO FACIAL usando Face Recognition | Python – OpenCV

Por Administrador

Aplicar reconocimiento facial puede ser frustrante, ¡muchos aspectos a tomar en cuenta!. Por ello, en este tutorial te enseño como puedes aplicar reconocimiento facial usando solo una imagen del rostro de la persona que deseas reconocer, y llegar a reconocerla gracias al módulo Face Recognition. ¡Vamos a por ello!. ✨

CONTENIDO

Reconocimiento facial usando Face Recognition en Python

  • Instalación de requerimientos
  • ¡Vamos con la programación!
  • Referencias

Reconocimiento facial usando Face Recognition en Python

El reconocimiento facial es una forma de reconocer o identificar el rostro de una persona de tal modo que podamos conocer su identidad. Es decir, que dada una imagen con una persona, a esta le aplicamos detección facial para encontrar su ubicación y extraer su rostro. Este rostro es analizado y comparado con otros rostros para conocer si este le pertenece, por ejemplo, a Juan, Fausto, Danilo o es desconocido.

En un pasado tutorial ya habíamos tocado el tema de reconocimiento facial. En aquel tutorial habíamos realizado el proceso de recolectar un conjunto de imágenes de rostros de las personas que deseábamos reconocer. De tal modo que teníamos un conjunto de imágenes de Gaby, y un conjunto de imágenes de Brenda, por ejemplo. A través de algunos algoritmos que nos proveía OpenCV, podíamos llegar a reconocer los rostros, e incluso identificar si un rostro era desconocido.

En el tutorial de hoy vamos a estar usando un módulo llamado Face Recognition que va a facilitar todo este proceso, y además, obtendremos muy buenos resultados. El proceso que se llevará a cabo es el siguiente:

Figura 1: Extracción del vector de características que representa la imagen del rostro.

En primer lugar, como podemos apreciar en la figura 1, tendremos una imagen de entrada con la persona que nos gustaría reconocer. A esta imagen se le ha aplicado detección facial, para ubicar el rostro dentro de la imagen. A este rostro recortado, se lo codificará a un vector de características de 128 de dimensión (este proceso lo podremos hacer con el módulo Face Recognition). 

Después, ¿qué tendremos que hacer?. El vector en representación del rostro será muy útil, ya que con este podremos comparar los rostros y obtener True, en caso de emparejamiento, caso contrario False.

Instalación de requerimientos

A continuación procedemos a usar pip para la instalación de los módulos que necesitamos.

pip install face-recognition
pip install opencv-contrib-python

Si digitamos pip freeze podremos ver todos los paquetes instalados.

Figura 2: Lista de los módulos instalados.

Face Recognition usa entre sus requerimientos DLIB, por lo que si estás en Windows y llegas a obtener un error al querer instalarlo, puedes ir al siguiente tutorial para resolverlo: ⚙️Como instalar DLIB en Windows | Python.

¡Vamos con la programación!

Para una explicación más detallada del programa que veremos a continuación, por favor dirígete al video que he preparado en mi canal, en donde explico paso a pasito cada procedimiento efectuado. ¡Anímate a verlo 😉!.

import cv2
import face_recognition

# Imagen a comparar
image = cv2.imread("Images/Gaby.jpg")
face_loc = face_recognition.face_locations(image)[0]
#print("face_loc:", face_loc)
face_image_encodings = face_recognition.face_encodings(image, known_face_locations=[face_loc])[0]
print("face_image_encodings:", face_image_encodings)
'''
cv2.rectangle(image, (face_loc[3], face_loc[0]), (face_loc[1], face_loc[2]), (0, 255, 0))
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()'''

######################################################################################
# Video Streaming

cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)

while True:
     ret, frame = cap.read()
     if ret == False: break
     frame = cv2.flip(frame, 1)

     face_locations = face_recognition.face_locations(frame, model="cnn")
     if face_locations != []:
          for face_location in face_locations:
               face_frame_encodings = face_recognition.face_encodings(frame, known_face_locations=[face_location])[0]
               result = face_recognition.compare_faces([face_image_encodings], face_frame_encodings)
               #print("Result:", result)

               if result[0] == True:
                    text = "Gaby"
                    color = (125, 220, 0)
               else:
                    text = "Desconocido"
                    color = (50, 50, 255)

               cv2.rectangle(frame, (face_location[3], face_location[2]), (face_location[1], face_location[2] + 30), color, -1)
               cv2.rectangle(frame, (face_location[3], face_location[0]), (face_location[1], face_location[2]), color, 2)
               cv2.putText(frame, text, (face_location[3], face_location[2] + 20), 2, 0.7, (255, 255, 255), 1)


     cv2.imshow("Frame", frame)
     k = cv2.waitKey(1)
     if k == 27 & 0xFF:
          break

cap.release()
cv2.destroyAllWindows()

Con este programa podremos aplicar el reconocimiento facial para una sola persona como veremos en la siguiente figura:

Figura 3: Reconocimiento facial para una persona.

Sin embargo, para reconocer varios rostros a la vez tendremos que añadir ostros procedimientos que veremos en el siguiente post.

Y bien, esto ha sido todo por el tutorial de hoy. ¡Espero que te haya gustado! 😊 Nos vemos en el siguiente… ¡Qué te vaya súper bien!.

Referencias

Repo de face recognition: 🔗 https://github.com/ageitgey/face_recognition

Referencia: 🔗 https://pyimagesearch.com/2018/06/18/face-recognition-with-opencv-python-and-deep-learning/