Programming/openCV2012. 2. 4. 22:32

$ cat opencv.c
/**
 * Display video from webcam and detect faces
 */
#include <stdio.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>
 
CvHaarClassifierCascade *cascade;
CvMemStorage            *storage;
 
void detectFaces( IplImage *img );
 
int main( int argc, char** argv )
{
    CvCapture *capture;
    IplImage  *frame;
    int       key;
    char      *filename = "haarcascade_frontalface_alt.xml";
 
    /* load the classifier
       note that I put the file in the same directory with
       this code */
    cascade = ( CvHaarClassifierCascade* )cvLoad( filename, 0, 0, 0 );
 
    /* setup memory buffer; needed by the face detector */
    storage = cvCreateMemStorage( 0 );
 
    /* initialize camera */
    capture = cvCaptureFromCAM( 0 );
 
    /* always check */
    assert( cascade && storage && capture );
 
    /* create a window */
    cvNamedWindow( "video", 1 );
 
    while( key != 'q' ) {
        /* get a frame */
        frame = cvQueryFrame( capture );
 
        /* always check */
        if( !frame ) break;
 
        /* 'fix' frame */
//      cvFlip( frame, frame, -1 );
        frame->origin = 0;
 
        /* detect faces and display video */
        detectFaces( frame );
 
        /* quit if user press 'q' */
        key = cvWaitKey( 10 );
    }
 
    /* free memory */
    cvReleaseCapture( &capture );
    cvDestroyWindow( "video" );
    cvReleaseHaarClassifierCascade( &cascade );
    cvReleaseMemStorage( &storage );
 
    return 0;
}
 
void detectFaces( IplImage *img )
{
    int i;
 
    /* detect faces */
    CvSeq *faces = cvHaarDetectObjects(
            img,
            cascade,
            storage,
            1.1,
            3,
            0 /*CV_HAAR_DO_CANNY_PRUNNING*/,
            cvSize( 40, 40 ) );
 
    /* for each face found, draw a red box */
    for( 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 ), 1, 8, 0 );
    }
 
    /* display video */
    cvShowImage( "video", img );
} 

[링크 :  http://nashruddin.com/OpenCV_Face_Detection]
[링크 : http://opencv.willowgarage.com/wiki/FaceDetection]  

$ gcc opencv.c -o opencv -lcv -lhighgui
$ ./opencv  

인식이 좀 느려서 잘은 모르겠지만 뒤집히면 얼굴을 인식하진 못한다. 
(컴퓨터가 느려서 캡쳐하다가 밀림 ^^; 아무튼 인식하면 저렇게 빨간색 박스가 쳐진다.)
(화면색이 이런건 IR 카메라로 개조한 녀석이라.. OTL)

위에서 cvFlip() 함수를 주석처리 하면 상하 반전이 되지 않고 제대로 나온다.
[링크 : http://nashruddin.com/OpenCV_Examples_Part_2]


 

[링크 : http://www.mediafire.com/?01434w7wwe1db11] haarcascade_frontalface_alt.xml 파일
 

'Programming > openCV' 카테고리의 다른 글

Cmake로 openCV 컴파일 설정 및 설치하기  (0) 2012.02.12
ubuntu opencv 패키지 버전 정보  (0) 2012.02.12
우분투에서 openCV 설치하기  (0) 2012.02.04
openCV  (0) 2012.02.04
openCV OCR 예제  (0) 2011.07.17
Posted by 구차니