首页AI技术供需平台OpenCV中人脸检测代码实现站长QQ:926563750

浏览

0

回复

OpenCV中人脸检测代码实现

作者:admin | 分类:AI技术供需平台 | 标签:

声明:本文代码来源于http://www.cognotics.com/opencv/servo_2007_series/,实现平台为Linux+OpenCV,共分为两部分:人脸检测与人脸识别。本文为前半部分的代码,关于第二部分请参见http://blog.csdn.net/liudekuan/article/details/8560553。话不多言,以下给出代码及相关注解。

  1. #include "cv.h"  

  2. #include "highgui.h"  

  3. #include <stdio.h>  

  4.   

  5. using namespace cv;  

  6.   

  7. int main(int argc, char** argv)  

  8. {  

  9.     CvHaarClassifierCascade * pCascade = 0;  // the face detector  

  10.     CvMemStorage * pStorage = 0;        // expandable memory buffer  

  11.     CvSeq * pFaceRectSeq;               // list of detected faces  

  12.     int i;  

  13.   

  14.     // initializations  

  15.     IplImage * pInpImg = (argc > 1) ? cvLoadImage(argv[1], CV_LOAD_IMAGE_COLOR) : 0;  

  16.     pStorage = cvCreateMemStorage(0);  

  17.     pCascade = (CvHaarClassifierCascade *)cvLoad  

  18.         (("/home/ldk/OpenCV-2.4.3/data/haarcascades/haarcascade_frontalface_alt.xml"), 0, 0, 0 );  

  19.   

  20.   

  21.     // validate that everything initialized properly  

  22.     if( !pInpImg || !pStorage || !pCascade ){  

  23.         printf("Initialization failed: %s \n",  

  24.             (!pInpImg)?  "didn't load image file" :  

  25.             (!pCascade)? "didn't load Haar cascade -- "  

  26.                 "make sure path is correct" :  

  27.             "failed to allocate memory for data storage");  

  28.         exit(-1);  

  29.     }  

  30.   

  31.     // detect faces in image  

  32.     pFaceRectSeq = cvHaarDetectObjects  

  33.         (pInpImg, pCascade, pStorage,  

  34.         1.1,                       // increase search scale by 10% each pass     

  35.         3,                         // drop groups of fewer than three detections     

  36.         CV_HAAR_DO_CANNY_PRUNING,  // skip regions unlikely to contain a face     

  37.         cvSize(0,0));              // use XML default for smallest search scale  

  38.   

  39.     // create a window to display detected faces  

  40.     cvNamedWindow("Haar Window", CV_WINDOW_AUTOSIZE);  

  41.   

  42.     // draw a rectangular outline around each detection  

  43.     for(i=0;i<(pFaceRectSeq? pFaceRectSeq->total:0); i++ ){  

  44.         CvRect * r = (CvRect*)cvGetSeqElem(pFaceRectSeq, i);  

  45.         CvPoint pt1 = { r->x, r->y };  

  46.         CvPoint pt2 = { r->x + r->width, r->y + r->height };  

  47.         cvRectangle(pInpImg, pt1, pt2, CV_RGB(0,255,0), 3, 4, 0);  

  48.     }  

  49.   

  50.     // display face detections  

  51.     cvShowImage("Haar Window", pInpImg);  

  52.     cvWaitKey(0);  

  53.     cvDestroyWindow("Haar Window");  

  54.   

  55.     // clean up and release resources  

  56.     cvReleaseImage(&pInpImg);  

  57.     if(pCascade) cvReleaseHaarClassifierCascade(&pCascade);  

  58.     if(pStorage) cvReleaseMemStorage(&pStorage);  

  59.     return 0;  

  60. }  


相关注解:

代码15行:加载待检测的图像;

代码17-18行:加载人脸特征数据(以xml文件形式存储)。在OpenCV中提供了四个描述正面人脸的数据文件,分别为haarcascade_frontalface_alt.xml,haarcascade_

                frontalface_default.xml,haarcascade_frontalface_alt_tree.xml,haarcascade_frontalface_alt2.xml。除此之外还提供了用以检测人眼区域、上下半身等特征数据;

                其中第18行中的文件存放地址要根据自己的情况进行更改;

代码31-37行:利用cvHaarDetectObjects函数进行人脸检测。显然从此函数名称即可看出,此函数可用以检测图像中的各种物体而不限于人脸。具体检测何种物体则由加载的

                xml特征描述文件决定;

代码42-48行:对检测到的人脸区域进行标注。

代码运行结果如下所示:

 

 

附录:ubuntu中opencv类库的安装(参考http://www.cnblogs.com/JohnShao/archive/2011/09/22/2184653.html

1.首先在终端运行下列命令进行必要的编译环境安装。

sudo apt-get installbuild-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg62-dev libtiff4-dev cmake libswscale-dev libjasper-dev

2.下载相应的版本到电脑里面,这里我们以下载OpenCV-2.3.1为例。

cd 命令进入相应的下载目录。依次运行下列命令

  1. tar xf OpenCV-2.3.1.tar.bz2  

  2. cd OpenCV-2.3.1  

3.终端运行

  1. mkdir build //build目录名称可任意指定,存放路径也可任意  

  2. cd build  

  3. cmake ..   //cmake命令后的参数为OpenCV-2.3.1目录,因为build为OpenCV-2.3.1的子目录,所以这里为".."表示build的父目录  

4.依次运行

  1. make  

  2. sudo make install  

此时编译成功。

5 现在需要配置必要的库。运行 sudogedit /etc/ld.so.conf.d/opencv.conf

添加这句命令到文件中,/usr/local/lib,文件或许是空的,不影响。

6  运行此命令  sudoldconfig

7 现在运行这条命令 sudogedit /etc/bash.bashrc,添加下面两行到文件的末尾并保存。

  1. PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  

  2. export PKG_CONFIG_PATH  

8 运行例程测试

  1. cd ~  

  2. mkdir openCV_samples  

  3. cp OpenCV-2.3.1/samples/c/* openCV_samples  

  4. cd openCV_samples/  

  5. chmod +x build_all.sh  

  6. ./build_all.sh  

  7. ./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 lena.jpg  

 

在人脸识别过程中,人脸检测只是第一步,后续部分请参见http://blog.csdn.net/liudekuan/article/details/8560553


本文链接:http://cvchina.net/post/4.html
原创文章如转载请注明:转载自计算机视觉网-AI技术供需平台-计算机视觉论坛谢谢!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。