Google+ Seguidores

domingo, 18 de junio de 2017

Detección de rostros con Python y OpenCV

La la entrada de hoy veremos un sencillo script en Python para detectar rostros, hacer reconocimiento facial, que utiliza la librería OpenCV.
La librería OpenCV está escrita en C, pero existe una extensión para trabajar con Python.

Vamos al grano. Para hacer que el script funcione, debemos de tener instalado Python y OpenCV. Imagino que python ya lo tienes instalado, pero quizá OpenCV no, para esos utilizaremos PIP

-- pip install opencv-python

Bien, ahora debemos descargar el siguiente XML que contiene lo necesario para detectar rostros de frente: http://eclecti.cc/files/2008/03/haarcascade_frontalface_alt.xml

Ingresas a la URL, click derecho, guardar como (necesitas saber donde lo guardas para pasar la ruta al Script)

Como dije anteriormente, este XML nos servirá para detectar rostros frontales, pero existen otros archivos XML como el anterior con más funcionalidades, por ejemplo para detectar manos, perfiles, etc.

Aquí tienes un montón de ejemplos máshttps://gist.github.com/npinto/3632388

Para el ejemplo utilice la siguiente imagen:


Y el resultado fue el siguiente:


Como podrás observar, uno de los rostros no fue detectado. También podrás observar que el rostro que no fue detectado utiliza gafas y está un poco más oscuro.
Por lo tanto también podemos decir que la detección no es perfecta, no es algo fácil ni exacto.

Ahora el código:

import cv2

def detect(path):
    img = cv2.imread(path)
    # Pasamos la ruta del XML
    cascade = cv2.CascadeClassifier("C:\Users\Admin\Desktop\haarcascade_frontalface_alt.xml")
    rects = cascade.detectMultiScale(img, 1.3, 4, cv2.CASCADE_SCALE_IMAGE, (20,20))

    if len(rects) == 0:
        return [], img
    rects[:, 2:] += rects[:, :2]
    return rects, img

def box(rects, img):
    for x1, y1, x2, y2 in rects:
        cv2.rectangle(img, (x1, y1), (x2, y2), (127, 255, 0), 2)
    # Ruta donde guardaremos la imagen con la deteccion de rostros
    cv2.imwrite('C:\Users\Admin\Desktop\prueba.jpg', img);

# Pasamos la imagen que quremos detectar
rects, img = detect("C:\Users\Admin\Desktop\Imagen.jpg")
box(rects, img)

Y esto es todo amigos, espero esta entrada sea de su agrado y pueda ser de guía para sus futuros proyectos de detección de rostros!!!

Fuente: http://fideloper.com/facial-detection

2 comentarios :
Write comentarios
  1. Felicidades por el articulo, tengo que pulir mis conocimientos pero me encararía probarlo. Gracias por su labor.

    ResponderEliminar
    Respuestas
    1. Gracias Joan por visitar el blog!!! De seguro podrás probarlo. Saludos

      Eliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Entradas más recientes

Powered by Blogger .