Sugerencias ... Si buscas algún código de programación en especifico , solo escribe alguna palabra relacionada , como por ejemplo : Calculadora , Metodo , Burbuja , Applets ... etc

Buscar

Sep
08

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.

C++:
  1. // Librerias ...
  2. #include "stdafx.h"
  3. #include "cv.h"
  4. #include "highgui.h"
  5. // Variables Globales , Cascada de Clasificacion de Rostros
  6. CvHaarClassifierCascade *cascade_f;
  7. CvMemStorage            *storage; // Almacenamiento de informacion
  8. void detectFaces(IplImage *img); // Metodo para detectar Rostros
  9. // Metodo Principal
  10.  
  11. int main( int argc, char** argv ) {
  12.     // Archivos de cascada de caracteristicas para ...
  13.     char *file1 = "haarcascade_frontalface_alt.xml"; // Deteccion de Rostros
  14.    
  15.     /* Cargar Clasificador de Rostros */
  16.     cascade_f = (CvHaarClassifierCascade*)cvLoad(file1, 0, 0, 0);
  17.     /* Inicializar el Modulo de Memoria, Necesario para el Detector de Rostros */
  18.     storage = cvCreateMemStorage(0);
  19.    
  20.     // Creamos ventana
  21.     cvNamedWindow( "Window", CV_WINDOW_AUTOSIZE );
  22.  
  23.    // Creamos una variable para almacenar una imagen.
  24.    IplImage* img = cvLoadImage( "prueba.jpg" );
  25.    detectFaces(img);
  26.    cvShowImage( "Window", img );
  27.    
  28.    cvWaitKey(0);
  29.    
  30.    cvReleaseImage( &img );
  31.    cvDestroyWindow( "Window" ); // Destruir la Ventana
  32. } // fin del metodo principal
  33.  
  34. void detectFaces(IplImage *img) {
  35.  
  36.  
  37. CvSeq* faces = cvHaarDetectObjects( img, cascade_f, storage,
  38. 1.1, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize(20, 20) );
  39.  
  40.     for( int i = 0; i <(faces ? faces->total : 0); i++ ) {
  41.         CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
  42.         cvRectangle( img, cvPoint(r->x,r->y),
  43.         cvPoint(r->x+r->width,r->y+r->height),
  44.         CV_RGB(255,0,0), 3 );
  45.     }
  46.  
  47.     cvClearMemStorage(storage);
  48. }

Enlaces : OpenCV Wiki FaceDetection


Publicado en C y C++, Codes, General, Noticias


 4 comentarios


Focker321 :

ante todo saludos y bueno mi pregunta es la sgte. derrepente ya fue preguntada antes… e leido que la ibreria que usas, esa el stdafx es una libreria que se haya solamente en visual c++ espero no estar equivocado el problema bueno mi problema radica en que yo no uso windows yo utilizo linux en el cual, bueon me costo instalar OpenCV pero es lo maximo y bueno en linux no existe esa libreria o hasta el momento no hayo como meterlo, espero puedas ayudarme sies que conoces alguna forma de utilizarlo en linux , gracias de antemano.. byebye

Duvallier :

De echo la librería es un requisito al momento de trabajar C++ con dependencias de Windows como Ventanas , Sliders , eventos etc.. aunque a un no pruebo dichos ejemplos en Linux por motivos de mi WebCam que no funciona en dicha configuración. no es un requisito agregar la libreria stdafx.h para el funcionamiento de OpenCV

julian :

Una pregunta, esos archivos de clasificación .xml donde los consigo?

Arthemysa :

Hola! Excelente tu blog. Me gustaria saber si tu tienes conocimiento a cerca de como poder hacer este tratamiento desde java. Lo que sucede esq estoy terminando mi proyecto de grado y necesito hacer tratamiento de calibracion y deteccion de formas. Ya tengo la imagen binarizada, ya la estoy detectando pero en una sola posicion. Debo mejorar el algoritmo para q la detecte en cualquier posicion.
Agradezco tu ayuda


 Deja un comentario