Reconocimiento facial usando OpenCV | Crea un sistema de reconocimiento facial

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp

Contenidos

Este artículo fue publicado como parte del Blogatón de ciencia de datos

– Comprensión básica de la clasificación de imágenes.

– Conocimiento de Python y Deep Learning

– Comprensión conceptual de varios módulos de aprendizaje profundo.

Introducción

En este artículo vamos a ver ¿qué es el reconocimiento facial? ¿Y en qué se diferencia también de la detección de rostros? ¡Comprenderemos brevemente la teoría del reconocimiento facial y luego saltaremos a la sección de codificación! Al final de este artículo, podrás desarrollar un programa de reconocimiento facial para reconocer rostros en imágenes !!!

Orden del día de este artículo

1. Descripción general de la detección de rostros

2. Descripción general del reconocimiento facial

3. Comprenda qué es OpenCV

4. Implementación con Python

Descripción general de la detección de rostros

¿Qué pasa si la máquina es capaz de detectar objetos automáticamente en una imagen sin participación humana? Veamos: la detección de rostros puede ser un problema cuando detectamos rostros humanos en una imagen. Puede haber ligeras diferencias en los rostros humanos, pero después de todo, es seguro decir que hay características específicas que están asociadas con todos los rostros humanos. Hay varios algoritmos de detección de rostros, pero el Viola-Jones El algoritmo es el método más antiguo que también se utiliza en la actualidad.

La detección de rostros es generalmente el primer paso hacia muchas aplicaciones relacionadas con el rostro, como el reconocimiento de rostros o la verificación de rostros. Pero la detección de rostros tiene aplicaciones muy útiles. Una de las aplicaciones de detección de rostros más exitosas es probablemente la «toma de fotografías».

Ejemplo: cuando hace clic en una foto de sus amigos, la cámara en la que se ha incorporado el algoritmo de detección de rostros detecta dónde están los rostros y ajusta el enfoque en consecuencia.

Descripción general del reconocimiento facial

Ahora hemos visto que nuestros algoritmos pueden detectar rostros, pero ¿podemos también reconocer de quién son los rostros? ¿Y si un algoritmo es capaz de reconocer rostros?

Generalmente, el reconocimiento facial es un método para identificar o verificar el identidad de un individuo usando su rostro. Existen varios algoritmos para el reconocimiento facial, pero su precisión puede variar. Aquí voy a discutir con ustedes cómo podemos hacer el reconocimiento facial usando el aprendizaje profundo.

Ahora, comprendamos cómo podemos reconocer rostros mediante el aprendizaje profundo. Aquí usamos incrustaciones de caras en las que cada cara se convierte en un vector. La técnica de convertir la cara en un vector se llama aprendizaje métrico profundo. Permítanme dividir este proceso en tres pasos simples para una mejor y más fácil comprensión:

1. Detección de rostro:

La primera tarea que realizamos es detectar rostros en la imagen (fotografía) o secuencia de video. Ahora sabemos que las coordenadas / ubicación exactas de la cara, por lo que extraemos esta cara para su posterior procesamiento.

2. Extracción de funciones:

Ahora vea que hemos recortado la cara de la imagen, por lo que extraemos características específicas de ella. Aquí vamos a ver cómo usar incrustaciones faciales para extraer estas características de la cara. Como sabemos, una red neuronal toma una imagen del rostro de la persona como entrada y genera un vector que representa las características más importantes de un rostro. En el aprendizaje automático, este vector no es más que llamado incrustación y por eso llamamos a este vector incrustación de cara. Ahora bien, ¿cómo ayudará esto a reconocer los rostros de diferentes personas?

Cuando entrenamos la red neuronal, la red aprende a generar vectores similares para rostros que se parecen. Consideremos un ejemplo, si tengo varias imágenes de rostros dentro de un lapso de tiempo diferente, es obvio que algunas características pueden cambiar, pero no demasiado. Entonces, en este problema, los vectores asociados con las caras son similares o podemos decir que están muy cerca en el espacio vectorial.

Hasta este punto, llegamos a saber cómo funciona esta red, veamos cómo usar esta red en nuestros propios datos. Aquí pasamos todas las imágenes de nuestros datos a esta red previamente entrenada para obtener las incrustaciones respectivas y guardar estas incrustaciones en un archivo para el siguiente paso.

3. Comparación de caras:

Tenemos incrustaciones de caras para cada cara en nuestros datos guardados en un archivo, el siguiente paso es reconocer una nueva imagen que es no en nuestros datos. Por lo tanto, el primer paso es calcular la incrustación de caras para la imagen utilizando la misma red que usamos anteriormente y luego comparar esta incrustación con el resto de las incrustaciones que tenemos. Reconocemos la cara si la incrustación generada es más cercana o similar a cualquier otra incrustación.

909161_fpdngo6lm5pdeipooezk1g-7988524

Fuente de la imagen: https://cdn-media-1.freecodecamp.org/images/1*fpDngO6lM5pDeIPOOezK1g.jpeg

Comprender qué es OpenCV

En el campo de la Inteligencia Artificial, la Visión por Computador es una de las tareas más interesantes y desafiantes. La visión por computadora actúa como un puente entre el software de computadora y las visualizaciones. Computer Vision permite que el software de computadora comprenda y aprenda sobre las visualizaciones en el alrededores.

Entendamos un ejemplo: Basado en la forma, color y tamaño que determina la fruta. Esta tarea es muy fácil para el cerebro humano, pero en el proceso de Visión por Computadora, primero, necesitamos recopilar los datos, luego realizamos las operaciones de procesamiento de datos, y luego entrenamos y enseñamos al modelo para que comprenda cómo distinguir entre las frutas basadas en en su tamaño, forma y color de la fruta.

77786yolo-predictions-2660281

Fuente de la imagen: https://martinapugliese.github.io/assets/posts_images/yolo-predictions.png

Hoy en día, hay varios paquetes disponibles para realizar problemas de aprendizaje automático, aprendizaje profundo y visión por computadora. Hasta ahora, la visión por computadora es el mejor módulo para problemas tan complejos. OpenCV es una biblioteca de código abierto. Es compatible con diferentes lenguajes de programación como R, Python, etc. Probablemente se ejecute en la mayoría de plataformas como Windows, Linux y macOS.

Ventajas de OpenCV:

1. Open CV es gratuito y es una biblioteca de código abierto.

2. Open CV es rápido, ya que está escrito en lenguaje C / C ++ en comparación con otros.

3. Con menos RAM del sistema, OpenCV funciona mejor.

4. Es compatible con la mayoría de los sistemas operativos como Windows, Linux y macOS.

Implementación

En esta sección, implementaremos el reconocimiento facial usando OpenCV y Python.

Primero, veamos qué bibliotecas necesitaremos y cómo instalarlas:

1. OpenCV

2. dlib

3. Reconocimiento facial

OpenCV es una biblioteca de procesamiento de imágenes y videos y se utiliza para análisis de imágenes y videos, como detección facial, lectura de matrículas, edición de fotos, visión robótica avanzada y muchos más.

los dlib La biblioteca contiene nuestra implementación de ‘aprendizaje métrico profundo’ que se utiliza para construir nuestras incrustaciones faciales utilizadas para el proceso de reconocimiento real.

los Reconocimiento facial es muy fácil trabajar con la biblioteca y la usaremos en nuestro código. Primero, recuerde instalar la biblioteca dlib antes de instalar face_recognition.

El resultado de cualquier aplicación de reconocimiento facial que utilice OpenCV será así:

84749mzu1mta4mw-4842466

Fuente de la imagen: https://spectrum.ieee.org/image/MzU1MTA4Mw.jpeg

Para instalar OpenCV, dlib y reconocimiento facial, escriba los siguientes fragmentos en el símbolo del sistema.

pip install opencv-python
conda install -c conda-forge dlib
pip install face_recognition

¡Ahora hagamos el código!

Extraer características de Face

Primero, necesita un conjunto de datos o incluso crear uno propio. Solo asegúrese de organizar todas las imágenes en carpetas con cada carpeta que contenga imágenes de una sola persona.

O puede descargar el conjunto de datos de este Enlace.

Ahora, guarde el conjunto de datos en una carpeta de la misma manera que va a crear el archivo. Aquí está el código y he agregado comentarios donde sea necesario:

from imutils import paths #imutils includes opencv functions
import face_recognition
import pickle
import cv2
import os
#get paths of each file in folder named Images
#Images here that contains data(folders of various people)
imagePath = list(paths.list_images('Images'))
kEncodings = []
kNames = []
# loop over the image paths
for (i, ip) in enumerate(imagePath):
# extract the person name from the image path
name = ip.split(os.path.sep)[-2]
# load the input image and convert it from BGR
image = cv2.imread(ip)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
boxes = face_recognition.face_locations(rgb,model='hog')
# compute the facial embedding for the any face
encodings = face_recognition.face_encodings(rgb, boxes)
# loop over the encodings
for encoding in encodings:
kEncodings.append(encoding)
kNames.append(name)
#save emcodings along with their names in dictionary data
data = {"encodings": kEncodings, "names": kNames}
#use pickle to save data into a file for later use
f = open("face_enc", "wb")
f.write(pickle.dumps(data))#to open file in write mode
f.close()#to close file

Ahora vea que hemos almacenado la incrustación en un archivo llamado «face_enc“, Por lo que podemos usarlos para reconocer rostros en imágenes (fotografías) o transmisión de video en vivo.

La siguiente parte es que veremos cómo reconocer rostros a partir de imágenes.

Cómo reconocer la cara en las imágenes

El siguiente guión para detectar y reconocer rostros en imágenes. He dado comentarios al lado del código donde sea necesario. Entonces podrá comprender el código de manera eficiente.


import face_recognition
import imutils #imutils includes opencv functions
import pickle
import time
import cv2
import os
#to find path of xml file containing haarCascade file
cfp = os.path.dirname(cv2.__file__) + "/data/haarcascade_frontalface_alt2.xml"
# load the harcaascade in the cascade classifier
fc = cv2.CascadeClassifier(cfp)
# load the known faces and embeddings saved in last file
data = pickle.loads(open('face_enc', "rb").read())
#Find path to the image you want to detect face and pass it here
image = cv2.imread(Path-to-img)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
#convert image to Greyscale for HaarCascade
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = fc.detectMultiScale(gray,
scaleFactor=1.1,
minNeighbors=6,
minSize=(60, 60),
flags=cv2.CASCADE_SCALE_IMAGE)
# the facial embeddings for face in input
encodings = face_recognition.face_encodings(rgb)
names = []
# loop over the facial embeddings incase
# we have multiple embeddings for multiple fcaes
for encoding in encodings:
#Compare encodings with encodings in data["encodings"]
#Matches contain array with boolean values True and False
matches = face_recognition.compare_faces(data["encodings"],
encoding)
#set name =unknown if no encoding matches
name = "Unknown"
# check to see if we have found a match
if True in matches:
#Find positions at which we get True and store them
matchedIdxs = [i for (i, b) in enumerate(matches) if b]
count = {}
# loop over the matched indexes and maintain a count for
# each recognized face face
for i in matchedIdxs:
#Check the names at respective indexes we stored in matchedIdxs
name = data["names"][i]
#increase count for the name we got
count[name] = count.get(name, 0) + 1
#set name which has highest count
name = max(count, key=count.get)
# will update the list of names
names.append(name)
# do loop over the recognized faces
for ((x, y, w, h), name) in zip(faces, names):
# rescale the face coordinates
# draw the predicted face name on the image
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(image, name, (x, y), cv2.FONT_HERSHEY_SIMPLEX,
0.75, (0, 255, 0), 2)
cv2.imshow("Frame", image)
cv2.waitKey(0)

Producción

85438unnamed-3260817

Conclusión

Ahora puede ver que esto nos lleva al final de este artículo donde aprendimos todo sobre el reconocimiento facial. Espero que les haya gustado este artículo. ¡Gracias!

Los medios que se muestran en este artículo no son propiedad de DataPeaker y se utilizan a discreción del autor.

Suscribite a nuestro Newsletter

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

error: Alert: Content is protected !!