Python下应用opencv 实现人脸检测功能
使用OpenCV'sHaarcascades作为人脸检测,因为他做好了库,我们只管使用。
代码简单,除去注释,总共有效代码只有10多行。
所谓库就是一个检测人脸的xml文件,可以网上查找,下面是一个地址:
https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml
如何构造这个库,学习完本文后可以参考:
http://note.sonots.com/SciSoftware/haartraining.html
https://www.instructables.com/id/Create-OpenCV-Image-Classifiers-Using-Python/
知道构造库,就可以检测各种你想要检测的东西了。
人脸检测不是人脸识别,但是人脸识别的前提。
运行效果如下:
前提:
这个原始代码来自 https://www.pyimagesearch.com/2016/11/21/raspbian-opencv-pre-configured-and-pre-installed/ 的一个教学讲稿。
你需要下载haarcascade_frontalface_default.xml以及准备你要检测的文件,我这里是family.jpg,放在python文件detect_faces.py所在目录(工作目录)的子目录images下。haarcascade_frontalface_default.xml是放在工作目录。
如果加上摄像头连接程序,也可实时检测,另文介绍。
代码1介绍
导入库,并做命令行参数处理。你在命令行可以输入如下:
pythondetect_faces.py--imageimage/family.jpg--detectorhaarcascade_frontalface_default.xml
我在程序中都有缺省参数处理,你如果集成测试或命令行不输参数的话,就要修改好你的缺省值。
这样命令行就是pythondetect_faces.py,同时也可以输入命令行输入参数。
#USAGE使用方法是: #pythondetect_faces.py--imageimages/family.jpg\ #--detectorhaarcascade_frontalface_default.xml #importthenecessarypackages输入包 #importimutils importargparse importcv2 #constructtheargumentparserandparsethearguments//构造命令行参数分析 #为了集成测试,或者命令行输入的简单,这里都有缺省参数 #image是images/family.jpg #detector是haarcascade_frontalface_default.xml ap=argparse.ArgumentParser() ap.add_argument("-i","--image",default='images/family.jpg', help="pathtotheinputimage") ap.add_argument("-d","--detector",default='haarcascade_frontalface_default.xml', help="pathtoHaarcacscadefacedetector") args=vars(ap.parse_args()) 导入图形文件,并灰度处理 #loadourimageandconvertittograyscale导入图形文件,并灰度化 image=cv2.imread(args["image"]) #image=imutils.resize(image,width=800) gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) 导入检测文件,检测图中人脸,显示检测到的人脸数 #loadthefacedetectoranddetectfacesintheimage #导入脸部检测文件 detector=cv2.CascadeClassifier(args["detector"]) #检测图形中的脸部 rects=detector.detectMultiScale(gray,scaleFactor=1.05,minNeighbors=9, minSize=(40,40),flags=cv2.CASCADE_SCALE_IMAGE) #显示检测到的人脸数目 print("[INFO]detected{}faces".format(len(rects))) 循环,绘图每个检测到的人脸框,并图形显示 #loadthefacedetectoranddetectfacesintheimage #导入脸部检测 detector=cv2.CascadeClassifier(args["detector"]) #检测图形中的脸部 rects=detector.detectMultiScale(gray,scaleFactor=1.05,minNeighbors=9, minSize=(40,40),flags=cv2.CASCADE_SCALE_IMAGE) #显示检测到的人脸数目 print("[INFO]detected{}faces".format(len(rects)))
最后串接所有代码如下:
#USAGE使用方法是: #pythondetect_faces.py--imageimages/family.jpg\ #--detectorhaarcascade_frontalface_default.xml #importthenecessarypackages输入包 #importimutils如果需要成比例缩放图形才需要,这里不需要 importargparse importcv2 #constructtheargumentparserandparsethearguments//构造命令行参数分析 #为了集成测试,或者命令行输入的简单,这里都有缺省参数 #image是images/family.jpg #detector是haarcascade_frontalface_default.xml ap=argparse.ArgumentParser() ap.add_argument("-i","--image",default='images/family.jpg', help="pathtotheinputimage") ap.add_argument("-d","--detector",default='haarcascade_frontalface_default.xml', help="pathtoHaarcacscadefacedetector") args=vars(ap.parse_args()) #loadourimageandconvertittograyscale导入图形文件,并灰度化 image=cv2.imread(args["image"]) #image=imutils.resize(image,width=800) gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #loadthefacedetectoranddetectfacesintheimage #导入脸部检测文件 detector=cv2.CascadeClassifier(args["detector"]) #检测图形中的脸部 rects=detector.detectMultiScale(gray,scaleFactor=1.05,minNeighbors=9, minSize=(40,40),flags=cv2.CASCADE_SCALE_IMAGE) #显示检测到的人脸数目 print("[INFO]detected{}faces".format(len(rects))) #loopovertheboundingboxesanddrawarectanglearoundeachface #循环rects,绘图每个检测到的人脸框 for(x,y,w,h)inrects: cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2) #showthedetectedfaces cv2.imshow("Faces",image) cv2.waitKey(0)
总结
以上所述是小编给大家介绍的Python下应用opencv实现人脸检测功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。