Detección de rostros desde una fotografía
Uno de los primeros objetivos para un proyecto de visión artificial , es la creación de sistemas expertos capaces de poder detectar rostros humanos partiendo desde la captura de imágenes en tiempo real , en este caso una cámara web que se conecta a una computadora , o el análisis de un archivo de video . Muchas veces los algoritmos para esta tarea necesitan realizar una gran cantidad de cálculos y decisiones para determinar que es un rostro y que no lo es. El uso de OpenCV para este tipo de proyectos , brinda un soporte excelente ya que algunas de sus librerías contienen funciones optimizadas que nos permiten obtener resultados muy buenos.

Para este ejemplo de la detección de múltiples rostros en una imagen , utilizamos como entrada esta fotografía donde aparecen 8 personas , y como vemos el detector encuentra los rostros de cada uno de estos individuos.
-
// Librerias ...
-
#include "stdafx.h"
-
#include "cv.h"
-
#include "highgui.h"
-
// Variables Globales , Cascada de Clasificacion de Rostros
-
CvHaarClassifierCascade *cascade_f;
-
CvMemStorage *storage; // Almacenamiento de informacion
-
void detectFaces(IplImage *img); // Metodo para detectar Rostros
-
// Metodo Principal
-
-
int main( int argc, char** argv ) {
-
// Archivos de cascada de caracteristicas para ...
-
char *file1 = "haarcascade_frontalface_alt.xml"; // Deteccion de Rostros
-
-
/* Cargar Clasificador de Rostros */
-
cascade_f = (CvHaarClassifierCascade*)cvLoad(file1, 0, 0, 0);
-
/* Inicializar el Modulo de Memoria, Necesario para el Detector de Rostros */
-
storage = cvCreateMemStorage(0);
-
-
// Creamos ventana
-
cvNamedWindow( "Window", CV_WINDOW_AUTOSIZE );
-
-
// Creamos una variable para almacenar una imagen.
-
IplImage* img = cvLoadImage( "prueba.jpg" );
-
detectFaces(img);
-
cvShowImage( "Window", img );
-
-
cvWaitKey(0);
-
-
cvReleaseImage( &img );
-
cvDestroyWindow( "Window" ); // Destruir la Ventana
-
} // fin del metodo principal
-
-
void detectFaces(IplImage *img) {
-
-
-
CvSeq* faces = cvHaarDetectObjects( img, cascade_f, storage,
-
1.1, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize(20, 20) );
-
-
for( int i = 0; i <(faces ? faces->total : 0); i++ ) {
-
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
-
cvRectangle( img, cvPoint(r->x,r->y),
-
cvPoint(r->x+r->width,r->y+r->height),
-
CV_RGB(255,0,0), 3 );
-
}
-
-
cvClearMemStorage(storage);
-
}
Enlaces : OpenCV Wiki FaceDetection
Blog
Foro
Codes
Feed rss