Code C++ Nhận dạng khuôn mặt trên video trong đồ họa máy tính

Thứ tư , 15/03/2017, 07:55 GMT+7
     

Các bài trước chúng ta đã đi qua một số hướng dẫn code các bài tập về xư lý ảnh trong đồ họa máy tính

         + Code chương trình vẽ đồ thị hàm số bằng C#

         + Code chương trình phân đoạn video trong xủa lý video

         + Chương trình xử lý ảnh code C# bằng OpenCV trong đồ họa máy tính

 

Nhận dạng khuôn mặt trên video  sử dụng opencv 1.0 (ngôn ngữ C++)

B1. Tạo project mới:

B2. Add thư viện của opencv vào project:

 1. Projcet -> Properties -> Configuration Properties -> C/C++-> General -> Additional Include Directories

2. Add lần lượt các thư mục:

   C:Program FilesOpenCVcvsrcinclude

   C:Program FilesOpenCVcvauxinclude

   C:Program FilesOpenCVcxcoreinclude

   C:Program FilesOpenCVotherlibshighgui

Nhấn OK

 

3.  Tiếp tục chọn Linker -> Input -> Addional Depencies

Add thêm các file :

    "C:Program FilesOpenCVlibcv.lib"

    "C:Program FilesOpenCVlibcvaux.lib"

    "C:Program FilesOpenCVlibcxcore.lib"

    "C:Program FilesOpenCVlibcvcam.lib"

    "C:Program FilesOpenCVlibhighgui.lib"

B3.  Add file nhận diện:       

Copy file

     C:Program FilesOpenCVdatahaarcascadeshaarcascade_frontalface_alt2.xml

Vào thư mục chứa project

     Add Exising Item… chọn haarcascade_frontalface_alt2.xml

 

 

B4:  Xây dựng code:

1. Khai báo thư viện và biến:

       #include"cv.h"

       #include"highgui.h"

       #include"stdio.h"

       #ifdef_EiC

       #define WIN32

       #endif

       staticCvMemStorage* storage = 0;

       staticCvHaarClassifierCascade* cascade = 0;

       voiddetect_and_draw( IplImage* image );

       constchar* cascade_name ="haarcascade_frontalface_alt2.xml";

2. Hàm chính:

       intmain()

       {     // khai bao va duong dan den file nhan dang

           CvCapture* capture = 0;

           IplImage *frame, *frame_copy = 0;

           cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );

          storage = cvCreateMemStorage(0);

             //lay file video

           capture = cvCaptureFromAVI( Link đến file video );

           cvNamedWindow( "result", 1 );

             //xu ly tung frane cua video

           if( capture )

          {

              for(;;)

               {

                   if( !cvGrabFrame( capture ))

                       break;

                   frame = cvRetrieveFrame( capture );

                   if( !frame )

                       break;

                  if( !frame_copy )

                       frame_copy = cvCreateImage( cvSize(frame->width,frame->height),IPL_DEPTH_8U, frame->nChannels );

                   if( frame->origin == IPL_ORIGIN_TL )

                      cvCopy( frame, frame_copy, 0 );

                  else

                       cvFlip( frame, frame_copy, 0 );       

                   detect_and_draw( frame_copy );

                  if( cvWaitKey( 10 ) >= 0 )

                       break;

               }

              cvReleaseImage( &frame_copy );

               cvReleaseCapture( &capture );

           }

       }

3.  Hàm nhận diễn và vẽ lên đối tượng tìm thấy:

       voiddetect_and_draw( IplImage* img )

       {

             //khai bao mang mau

          static CvScalar colors[] =

           {

              {{0,0,255}},//red

               {{0,128,255}},//orange

               {{0,255,255}},//cyan

               {{0,255,0}},//green

               {{255,128,0}},//blue

               {{255,255,0}},//yellow

               {{255,0,0}},//blue+

               {{255,0,255}}//pink

          };

          double scale = 1.3;

             IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 );

             IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale),cvRound (img->height/scale)),8, 1 );

           int i;

           cvCvtColor( img, gray, CV_BGR2GRAY );

          cvResize( gray, small_img, CV_INTER_LINEAR );

           cvEqualizeHist( small_img, small_img );

           cvClearMemStorage( storage );

           //nhan dien va ve

             if( cascade )

           {

               double t = (double)cvGetTickCount();

               CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage,

                                            1.1, 2, 0/*CV_HAAR_DO_CANNY_PRUNING*/,

                                            cvSize(30, 30) );

               t = (double)cvGetTickCount() - t;

               //printf( "detection time = %gmsn", t/((double)cvGetTickFrequency()*1000.) );

               for( i = 0; i < (faces ? faces->total : 0); i++ )

               {

                   CvRect* r = (CvRect*)cvGetSeqElem( faces, i );

                   CvPoint center;

                  int radius;

                   center.x = cvRound((r->x + r->width*0.5)*scale);

                   center.y = cvRound((r->y + r->height*0.5)*scale);

                   radius = cvRound((r->width + r->height)*0.25*scale);

                   cvCircle( img, center, radius, colors[i%8], 3, 8, 0 );

               }

           }

          cvShowImage( "result", img );

           cvReleaseImage( &gray );

          cvReleaseImage( &small_img );

       }

Phụ lục

1.  Đọc file hình ảnh và hiển thị

       #include"highgui.h"

       intmain(){

            IplImage* img=cvLoadImage("c:/a1.jpg");

             cvNamedWindow("test1",CV_WINDOW_AUTOSIZE);

             cvShowImage("test1",img);

            cvWaitKey(0);

            cvReleaseImage(&img);

             cvDestroyWindow("test1");

       }

2. Đọc và hiển thị hình ảnh từ video:

       #include<highgui.h>

       intmain() {

           cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE);

             CvCapture* capture = cvCreateFileCapture("test.avi");

           IplImage* frame;

            while(1) {

               frame = cvQueryFrame(capture);

              if(!frame) break;

              cvShowImage("Example2", frame);

               char c = cvWaitKey(33);

               if(c==27) break;

          }

           cvReleaseCapture(&capture);

          cvDestroyWindow("Example2");

       }

Download Source: Nhận dạng khuôn mặt trên video

Keyword: Code C++, Opencv, thư viện opencv,nhan dang khuan mat, nhận dạng mặt trong vide, code c++ nhan dang khuon mat, code chuong trinh chinh sua anh, code mon do hoa may tinh, đồ họa máy tính,huongdanfacedetect, hướng dẫn code face detect

Code C++ Opencv thư viện opencv facedetect nhan dang khuan mat nhận dạng mặt trong video