Reconocimiento facial en Python

infografía reconocimiento facial con python

Crear un programa con reconocimiento facial en Python es posible gracias a la famosa librería OpenCV.

 

OpenCV es una biblioteca visión artificial que fue desarrollada en un principio por Intel y que gracias a los distintos contribuidores de código a nivel mundial, ha permitido el uso de muchas aplicaciones actuales, desde sistemas de seguridad, hasta reconocimiento y detección de objetos.

Que es la visión artificial

La visión artificial o visión por ordenador es una disciplina científica que incluye métodos para adquirir, procesar, analizar y comprender las imágenes del mundo real con el fin de producir datos de forma numérica o simbólica para que puedan ser tratados por un computador.

En nuestro caso nos centraremos en la detección facial o de rostros a partir de imágenes que, gracias al módulo de OpenCV en Python no será muy complicado.

Instalar OpenCV en Python

Para instalar el módulo de OpenCV de Python tenemos que usar el administrador de paquetes como en otras ocasiones:

pip install opencv-python

Descargar archivo haarcascades

Estos archivos son los “modelos” de rostros humanos. Podemos crear nuevos modelos, si queremos, para detectar peces, plátanos, gatos…

Sin embargo, estos archivos algunas veces no son importados correctamente cuando utilizamos OpenCV-Pyhton del sistema, así que recomiendo bajar las haarcascades desde este enlace y guardarlas en la misma carpeta dónde vayamos a guardar nuestro código en Python.

Programa de reconocimiento facial en python

Ahora vamos a crear un programa sencillo de reconocimiento facial en Python con OpenCV. Además del módulo ya mencionado vamos a utilizar un módulo de la librería estándar,sys , y un módulo de tratamiento de imágenes que usamos en el post anterior, pillow (si necesitas instalarlo click aquí).

El programa que os propongo es el siguiente:

import cv2  # pip install opencv-python
import sys
from PIL import Image  # pip install pillow


# Obtener nombre de la imagen  
image = sys.argv[1]
# Cargar la plantilla
face_cascade = cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_alt.xml')
# Obtener un frame
img = cv2.imread(image)
# Imagen en blanco y negro
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Buscar rostros y guardar coordenadas
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# Dibujar rectangulo en las coordenadas de cada rostro
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
# Nombre de la imagen con los rostros detectados
name = input("Introduzca el nombre de la imagen \n>  ") + '.png'
# Guardar imagen
cv2.imwrite(name, img)
# Mostrar imagen
Image.open('./'+name).show()

Los pasos que seguimos en el programa son los siguientes:

  • Obtenemos la imagen de los argumentos de ejecución, porque al ejecutar el programa introducimos el nombre de la imagen de la cual se realizará la detección facial.
  • Cargamos la plantilla, en mi caso la cargo de un directorio que he creado donde tengo todas las plantillas de OpenCV, que os recomendé descargar para evitar problemas.
  • Obtenemos un frame de la imagen.
  • Pasamos el frame obtenido anteriormente a blanco y negro.
  • A partir del frame en blanco y negro buscamos y guardamos las coordenadas de los rostros.
  • Pintamos rectángulos sobre las coordenadas anteriores.
  • Pedimos por teclado un nombre para guardar la nueva imagen detectando rostros.
  • Guardamos la imagen con el nombre obtenido en el paso anterior
  • Abrimos la imagen

Espero que os haya servido y para entenderlo mejor puedes ver el video del principio del post que, esta explicado de forma más práctica y amena 😉

Deja un comentario