#
源码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#!/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 , 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实现的简单人脸识别代码示例的全部内容,希望对大家有所帮助,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
原文链接:https://www.cnblogs.com/zhangdebin/p/5567934.html