Top Ad unit 728 × 90

Recientes

recent

Curso OpenCV y C++ con Visual Studio 2013 (10-25) - Detección de Rostros desde Vídeo con OpenCv

Si queremos implementar una aplicación que pueda reconocer un conjunto de patrones específicos como rostros, ojos, cuerpos, etc, podemos utilizar Opencv que nos facilita esta tarea pues ya cuenta con clasificadores entrenados para realizar esta tarea  llamados Haar-like features,  almacenados en archivos xml.

Para detectar rostros en tiempo real solo debemos leer los frames obtenidos de la Cámara y aplicarle a cada una de ellas el procedimiento para detectar rostros desde una imagen.



Detección de Rostros desde una cámara con OpenCv


1. Para detectar un rostro desde una cámara primero debemos acceder a la cámara para poder obtener la secuencia de vídeo de la cual deseamos buscar uno o varios o rostros.
VideoCapture cap;
if (!cap.open(0))
{
      cout << "No se puede acceder a la Cámara." << endl;
}

2. Lo que hacemos después es cargar el Clasificador Haar que utilizaremos que es un archvo Xml ubicado en C:\opencv\sources\data\ aquí encontraremos varias carpetas que contienes distintos clasificadores, en la carpeta haarcascades se encuentran varios clasificadores por ejemplo haarcascade_frontalface_alt.xml para detectar rostros, para detectar cuerpo completo podemos usar haarcascade_fullbody.xml, para detectar ojos contamos con haarcascade_eye.xml, y varios más.
CascadeClassifier detector;
 if (!detector.load("C:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml"))
            cout << "No se puede abrir clasificador." << endl;

3. Obtenemos uno por uno los frame de la secuencia de vídeo y los Convertimos a escala de grises, necesario para el correcto funcionamiento de los algoritmos de detección de rostros usados por opencv. 
cap.read(imagen); 
cvtColor(imagen, gris, CV_BGR2GRAY);
4. Necesariamente después aplicaremos ecualización de histograma al frame en grises para estandarizar el contraste y brillo del frame, esto para que la detección del rostro no se vea afectada debido a distintas condiciones de iluminación.
equalizeHist(gris, destino);



5. Las caras detectadas serán almacenadas en el vector rect, solo debemos recorrerlo y dibujar un rectángulo sobre los rostros detectados en el frame correspondiente según la secuencia de vídeo capturado por la cámara.

Código: Ejemplo Detección de rostros desde Cámara con OpenCv y C++

// CursoOpenCV2410.cpp: Juan Carlos Arcila Díaz.

#include "stdafx.h"
#include "opencv2\opencv.hpp"

using namespace cv;
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
       //Declaramos una variable del tipo VideoCapture para poder acceder a la cámara
       VideoCapture cap;
       //Instanciamos al Classificador
       CascadeClassifier detector;

       if (!detector.load("C:\\OpenCV2.4.6\\data\\haarcascades\\haarcascade_frontalface_alt.xml"))
             cout << "No se puede abrir clasificador." << endl;

       //Revisamos si podemos acceder a la cámara por defecto de nuestro ordenador
       if (!cap.open(0))
       {
             cout << "No se puede acceder a la Cámara." << endl;
       }
      
       //Implementamos un bucle para ir obteniendo frame por frame e ir procesandolo independientemente
       while (true)
       {
             Mat destino, gris, imagen;
             //Copiamos el frame de la secuencia de video y lo almacenamos en el objeto imagen
             cap.read(imagen);

             //Convertimos a escala de Grises la imagen
             cvtColor(imagen, gris, CV_BGR2GRAY);
             //Ecualizamos la imagen para estandarizar el contraste
             equalizeHist(gris, destino);

             //Declaramos el vector donde se almacenarán las características de los rostros encontrados
             vector rect;
             detector.detectMultiScale(destino, rect, 1.2, 3, 0, Size(60, 60));

             for (Rect rec : rect)
             {
                    rectangle(imagen,
                          Point(rec.x, rec.y),
                          Point(rec.x + rec.width, rec.y + rec.height),
                          CV_RGB(0, 255, 0), 2);
             }
             //Mostramos uno a uno los frames con un rectángulo sobre los rostros detectados
             imshow("Deteccion de rostros", imagen);

             //Si presionamos la tecla "x" ó "X" cerramos la cámara
             if (waitKey(50) == 88 || waitKey(50) == 120) break;
       }

}

//
Saludos Imperio, un abrazo a la distancia!

Curso OpenCV y C++ con Visual Studio 2013 (10-25) - Detección de Rostros desde Vídeo con OpenCv Reviewed by Juan Carlos Arcila Díaz on 12:45 Rating: 5

No hay comentarios:

All Rights Reserved by www.IncanatoIT.com - Desarrollando Software © 2014 - 2015
Powered By Blogger, Designed by Sweetheme

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

IncanatoIt.com. Con la tecnología de Blogger.