文档介绍:--------------------------校验:_____________-----------------------日期:_____________python使用opencv进行人脸识别python使用opencv进行人脸识别欢迎来到小码哥的博客环境安装依赖sudoapt-getinstalllibopencv-*sudoapt-getinstallpython-opencvsudoapt-getinstallpython-numpy示例代码#!/usr/bin/envpython#coding=utf-8importosfromPILimportImage,ImageDrawimportcvdefdetect_object(image):'''检测图片,获取人脸在图片中的坐标'''result=[]forrinrect:returnresultdefprocess(infile):'''在原图上框出头像并且截取每个头像到单独文件夹'''ifimage:faces=detect_object(image)try:r(save_path)except:passiffaces:count=0forfinfaces:count+=1#printfile_nameelse:print"Error:cannotdetectfaceson%s"%infileif__name__=="__main__":转换效果原图:转换后使用感受对于大部分图像来说,只要是头像是正面的,没有被阻挡,识别基本没问题,准确性还是很高的。识别效率有点低,有时候一张图片能处理七八秒才能处理完,当然这个和机器配置有关。如果想加速的话可以使用C语言重写,经测试,C语言版的所花时间大约是python的一半~~/usr/share/opencv/haarcascades>>ll-h总用量19Mdrwxr-xr-x2roo-rw-r--r--1rootroot818K4月28201-rw-r--r--1rootroot350K4月28-rw-r--r--1roo~/usr/share/opencv/haarcascades>>根据文件名大家应该能知道是识别什么的。值得一提的是,这里面有四个关于人脸(frontalface)的识别库,根据我的使用体验,default这个xml识别的最多,这就意味着本来不是头像的也识别成头像了。alt_tree这个库虽然是最大的,但并不意味着这个库是最好的,应该说,用这个库,识别是最严格的,这就意味着,有些头像不能被识别,因为根据他的算法,他认为这不是头像。其余两个和alt_tree差不多。具体识别细节大家可以打开相应的xml看一下。上面的代码只是识别面部,并不包括头发,如果大家想抓一个完整的头像的话,可以将识别出来的矩形框的上边缘增加一定的比例,比如增加20%头像的高度。附:C++语言人脸识别代码网上找的,亲测可用,效率比python高一点。>#ifdef_EiC#defineWIN32#vMemStorage*storage=0;vHaarClassifierCascade*cascade=0;voiddetect_and_draw(IplImage*image);constchar*cascade_name=intmain(intargc,char**argv){CvCapture*capture=0;IplImage*frame,*frame_copy=0;intoptlen=strlen("--cascade=");constchar*input_name;if(argc>1&&strncmp(argv[1],"--cascade=",optlen)==0){cascade_name=argv[1]+optlen;input_name=argc>2?argv[2]:0;}else{//也可以把这个文件拷到你的工程文件夹下然后不用写路径名cascade_name="haarcascade_input_name=argc>1?argv[1]:0;}cascade=(CvHaarClassifierCascade*)cvLoad(cascade_name,0,0,0);if(!cascade){fprintf(stderr,"ERROR:Couldnotloadclassifiercascade\n");fprintf(stderr,"Usage:facedetect--cascade=\"<cascade_path>\"[filename|camera_index]\n");return-1;}storage=cvCreateMemStorage(