python+opencv实现的简单人脸识别代码示例
发布时间:2020-12-17 07:54:31 所属栏目:Python 来源:网络整理
导读:# 源码如下: #!/usr/bin/env python#coding=utf-8import osfrom PIL import Image,ImageDrawimport cvdef detect_object(image): '''检测图片,获取人脸在图片中的坐标''' grayscale = cv.CreateImage((image.width,image.height),8,1) cv.CvtColor(image,g
# #!/usr/bin/env python #coding=utf-8 import os from PIL import Image,ImageDraw import cv def detect_object(image): '''检测图片,获取人脸在图片中的坐标''' grayscale = cv.CreateImage((image.width,image.height),8,1) cv.CvtColor(image,grayscale,cv.CV_BGR2GRAY) cascade = cv.Load("/opt/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt_tree.xml") rect = cv.HaarDetectObjects(grayscale,cascade,cv.CreateMemStorage(),1.1,2,cv.CV_HAAR_DO_CANNY_PRUNING,(20,20)) result = [] for r in rect: result.append((r[0][0],r[0][1],r[0][0]+r[0][2],r[0][1]+r[0][3])) return result def process(infile): '''在原图上框出头像并且截取每个头像到单独文件夹''' image = cv.LoadImage(infile); if image: faces = detect_object(image) im = Image.open(infile) path = os.path.abspath(infile) save_path = os.path.splitext(path)[0]+"_face" try: os.mkdir(save_path) except: pass if faces: draw = ImageDraw.Draw(im) count = 0 for f in faces: count += 1 draw.rectangle(f,outline=(255,0)) drow_save_path = os.path.join(save_path,"out.jpg") im.save(drow_save_path,"JPEG",quality=80) else: print "Error: cannot detect faces on %s" % infile if __name__ == "__main__": process("/Users/zhangdebin/Documents/checkFace2.jpg") 示例图片1: 可以看出,对于比较干净的人脸头像,使用opencv库haarcascade_frontalface_alt_tree.xml的识别精度很高(这张达到了100%),同时,对于表情变化的人脸也有很强的鲁棒性。 示例图片2: 但是,对于上传的比较随意的头像照片,比如示例图片2这些有帽子、眼镜遮挡的人脸图片,识别效果就会很差,本组只有唯一一个没有帽子遮挡的人脸被识别成功 本次只是简单的测试了下,python使用opencv库的人脸特征进行人脸识别的效果,仅供初学参考。 总结 以上就是本文关于python+opencv实现的简单人脸识别代码示例的全部内容,希望对大家有所帮助,感兴趣的朋友可以参阅本站: python图像常规操作 在Python web中实现验证码图片代码分享 Python生成数字图片代码分享 如有不足之处,欢迎留言指出。感谢朋友们对本站的支持! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |