Reconocimiento facial con Python y OpenCV

Compartir

.

Facebook
Twitter
WhatsApp

En este artículo, sabremos qué es el reconocimiento facial y en qué se diferencia de la detección facial. Repasaremos brevemente la teoría del reconocimiento facial y luego pasaremos a la sección de codificación. Al final de este artículo, usted será capaz de hacer un programa de reconocimiento de caras en las imágenes, así como en la alimentación de la cámara web en vivo.

  1. ¿Qué es la detección de la cara?
  2. ¿Qué es el reconocimiento de la cara?
  3. Reconocimiento de caras usando Python
    1. Reconocimiento de caras en la alimentación de la webcam
    2. Reconocimiento de caras en imágenes

¿Qué es la detección de caras?

En la visión por ordenador, un problema esencial que estamos tratando de averiguar es detectar automáticamente los objetos en una imagen sin intervención humana. La detección de rostros puede considerarse un problema de este tipo en el que detectamos rostros humanos en una imagen. Puede haber ligeras diferencias en las caras de los seres humanos, pero en general, se puede decir que hay ciertas características que se asocian con todas las caras humanas. Hay varios algoritmos de detección de rostros, pero el Algoritmo de Viola-Jones es uno de los métodos más antiguos que también se utiliza hoy en día y lo utilizaremos más adelante en el artículo. Usted puede ir a través del Algoritmo de Viola-Jones después de completar este artículo como voy a enlazar al final de este artículo.

La detección de la cara es generalmente el primer paso hacia muchas tecnologías relacionadas con la cara, como el reconocimiento de la cara o la verificación. Sin embargo, la detección de caras puede tener aplicaciones muy útiles. La aplicación más exitosa de la detección de rostros sería probablemente la toma de fotografías. Cuando tomas una foto de tus amigos, el algoritmo de detección de caras integrado en tu cámara digital detecta dónde están los rostros y ajusta el enfoque en consecuencia.

Para un tutorial sobre sólo la detección de caras, haz clic aquí

¿Qué es el reconocimiento de caras?

Ahora que tenemos éxito en la fabricación de dichos algoritmos que pueden detectar caras, ¿podemos también reconocer las caras de quiénes son?

El reconocimiento de caras es un método de identificación o verificación de la identidad de un individuo utilizando su cara. Hay varios algoritmos que pueden hacer el reconocimiento de la cara, pero su precisión puede variar. Aquí voy a describir cómo hacemos el reconocimiento de la cara utilizando el aprendizaje profundo.

Así que ahora vamos a entender cómo reconocemos las caras utilizando el aprendizaje profundo. Hacemos uso de la incrustación de la cara en la que cada cara se convierte en un vector y esta técnica se llama aprendizaje métrico profundo. Permítanme dividir este proceso en tres sencillos pasos para una fácil comprensión:

Detección de caras: La primera tarea que realizamos es detectar las caras en la imagen o el flujo de vídeo. Ahora que sabemos la ubicación/coordenadas exactas de la cara, extraemos esta cara para su posterior procesamiento.

Extracción de características: Ahora que hemos recortado la cara de la imagen, extraemos las características de la misma. Aquí vamos a utilizar incrustaciones de cara para extraer las características de la cara. Una red neuronal toma una imagen de la cara de una persona como entrada y produce un vector que representa las características más importantes de una cara. En el aprendizaje automático, este vector se llama incrustación y, por lo tanto, lo llamamos incrustación facial. ¿Cómo ayuda esto a reconocer las caras de diferentes personas?

Mientras se entrena la red neuronal, la red aprende a producir vectores similares para las caras que se parecen. Por ejemplo, si tengo varias imágenes de rostros en diferentes periodos de tiempo, por supuesto, algunas de las características de mi rostro pueden cambiar, pero no en gran medida. Así que en este caso los vectores asociados a las caras son similares o, en pocas palabras, están muy cerca en el espacio vectorial. Observa el siguiente diagrama para hacerte una idea aproximada:

Ahora, después de entrenar la red, ésta aprende a dar salida a vectores que están más cerca unos de otros (similares) para las caras de la misma persona (que se parecen). Los vectores anteriores se transforman ahora en:

No vamos a entrenar una red de este tipo aquí, ya que se necesita una cantidad significativa de datos y potencia de cálculo para entrenar dichas redes. Utilizaremos una red pre-entrenada por Davis King en un conjunto de datos de ~3 millones de imágenes. La red produce un vector de 128 números que representan las características más importantes de un rostro.

Ahora que sabemos cómo funciona esta red, veamos cómo la utilizamos en nuestros propios datos. Pasamos todas las imágenes de nuestros datos a esta red preentrenada para obtener las incrustaciones respectivas y guardamos estas incrustaciones en un archivo para el siguiente paso.

Comparación de caras: Ahora que tenemos incrustaciones de caras para cada cara en nuestros datos guardados en un archivo, el siguiente paso es reconocer una nueva imagen t que no está en nuestros datos. Así que el primer paso es calcular la incrustación de la cara para la imagen usando la misma red que usamos antes 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 como se muestra a continuación:

Así que pasamos dos imágenes, una de las cuales es de Vladimir Putin y otra de George W. Bush. En nuestro ejemplo anterior, no guardamos las incrustaciones de Putin pero sí las de Bush. Por lo tanto, cuando comparamos las dos nuevas incrustaciones con las existentes, el vector de Bush está más cerca de las otras incrustaciones de la cara de Bush, mientras que las incrustaciones de la cara de Putin no están más cerca de cualquier otra incrustación y por lo tanto el programa no puede reconocerlo.

Reconocimiento de la cara usando Python

En esta sección, vamos a implementar el reconocimiento de la cara utilizando OpenCV y Python. En primer lugar, veamos las librerías que necesitaremos y cómo instalarlas:

  • OpenCV
  • dlib
  • Face_recognition

OpenCV es una librería de procesamiento de imágenes y vídeos y se utiliza para el análisis de imágenes y vídeos, como la detección facial, la lectura de matrículas, la edición de fotografías, la visión robótica avanzada, el reconocimiento óptico de caracteres y un largo etcétera.

La biblioteca dlib, mantenida por Davis King, contiene nuestra implementación de «aprendizaje métrico profundo» que se utiliza para construir nuestras incrustaciones faciales utilizadas para el proceso de reconocimiento real.

La biblioteca face_recognition, creada por Adam Geitgey, envuelve la funcionalidad de reconocimiento facial de dlib, y esta biblioteca es súper fácil de trabajar y la utilizaremos en nuestro código. Recuerda instalar primero la librería dlib antes de instalar face_recognition.

Para instalar OpenCV, escribe en el símbolo del sistema

pip install opencv-python

He probado varias formas de instalar dlib en Windows pero la más fácil de todas es a través de Anaconda. Primero, instala Anaconda (aquí tienes una guía para instalarlo) y luego utiliza este comando en tu símbolo del sistema:

conda install -c conda-forge dlib

A continuación, para instalar face_recognition, escribe en símbolo del sistema

pip install face_recognition

Ahora que tenemos todas las dependencias instaladas, vamos a empezar a codificar. Tendremos que crear tres archivos, uno tomará nuestro conjunto de datos y extraerá la incrustación de la cara para cada cara usando dlib. A continuación, vamos a guardar estas incrustaciones en un archivo.

En el siguiente archivo vamos a comparar las caras con la existente el reconocer las caras en las imágenes y el siguiente vamos a hacer lo mismo, pero reconocer las caras en la alimentación de la cámara web en vivo

Extracción de las características de la cara

En primer lugar, usted necesita para obtener un conjunto de datos o incluso crear uno propio. Sólo asegúrese de organizar todas las imágenes en carpetas con cada carpeta que contiene las imágenes de una sola persona.

A continuación, guarde el conjunto de datos en una carpeta la misma que va a hacer el archivo. Ahora aquí está el código:

Ahora que hemos almacenado las incrustaciones en un archivo llamado «face_enc», podemos utilizarlas para reconocer las caras en imágenes o flujo de vídeo en directo.

Reconocimiento de rostros en la transmisión de la cámara web en vivo

Aquí está el script para reconocer rostros en una transmisión de la cámara web en vivo:

Aunque en el ejemplo anterior hemos utilizado haar cascade para detectar rostros, también se puede utilizar face_recognition.face_locations para detectar una cara como hemos hecho en el script anterior

Reconocimiento de caras en imágenes

El script para detectar y reconocer caras en imágenes es casi similar al que has visto arriba. Pruébalo tú mismo y si no puedes echa un vistazo al código de abajo:

Salida:

  • Input
  • Output

Con esto llegamos al final de este artículo donde aprendimos sobre el reconocimiento de caras. Puedes conseguir un curso gratuito en Great learning academy en varios cursos. Haz clic en el siguiente banner para saber más

También puedes actualizar tus conocimientos con el curso PGP de Inteligencia Artificial y Aprendizaje Automático de Great Learning. El curso ofrece tutoría de líderes de la industria, y también tendrás la oportunidad de trabajar en proyectos relevantes para la industria en tiempo real.

Más lecturas

  1. Detección de rostros usando el algoritmo de Viola-Jones
  2. Detección de rostros en tiempo real | Detección de máscaras faciales usando OpenCV
  3. Detección de objetos en tiempo real usando TensorFlow
  4. Detección de objetos YOLO usando OpenCV
  5. Detección de objetos en Pytorch | ¿Qué es la detección de objetos?

Deja una respuesta

Tu dirección de correo electrónico no será publicada.