天天看点

python人脸识别opencv_python之opencv人脸识别1

前提安装OpenCV

opencv解压后

将\opencv\build\python\2.7\x86\cv2.pyd文件拷贝到C:\Python27\Lib\site-packages\cv2.pyd

OpenCV

cascade把人脸检测问题分解为好几步。对于每个数据块,它都进行一个粗略、快速的检测。若通过,会再进行一个更仔细的检测,以此不断类推。该算法有

30到 50个这样的阶段,或者说

cascade。只有通过全部阶段,算法才会判断检测到人脸。这样做的好处是:大多数图形都会在头几步就产生否定反馈,算法因而不需要在它上面测试所有

6000个特征,大大节省了时间。相对于“正常流程”耗费数个小时,这可以实时实现人脸检测。

准备好测试图片以及haarcascade_frontalface_default.xml,

编写face.py

# coding:utf-8

import cv2

# 待检测的图片路径

imagepath = ('test.jpg')

#imagepath = r'./test.jpg'

# 获取训练好的人脸的参数数据,这里直接从GitHub上使用默认值

# 现在,我们创建一个 cascade,并用人脸 cascade 初始化。这把人脸 cascade

导入内存,所以它随时可以使用。记住,该 cascade 只是一个包含人脸检测数据的 XML 文件。

face_cascade =

cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')

# 读取图片

image = cv2.imread(imagepath)

# 灰度转换的作用就是:转换成灰度的图片的计算强度得以降低

gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

# 探测图片中的人脸

faces = face_cascade.detectMultiScale(

gray,

scaleFactor = 1.15,

minNeighbors =

5,

minSize = (30,30),

flags =

cv2.cv.CV_HAAR_SCALE_IMAGE

)

# scaleFactor调成

1.2能去除错误检测,为每一个级联矩形应该保留的邻近个数,可以理解为一个人周边有几个人脸

#

该函数做的就是检测人脸,是代码核心部分。所以,我们来过一遍选项。DetectMultiScale函数是一个检测物体的通用函数。我们在人脸

cascade上调用它,它检测的就是人脸。第一个选

项是灰度图片。第二个是

scaleFactor。有的人脸离镜头近,会比其他人脸更大。ScaleFactor对此进行补偿。检测算法使用移动窗口来检测物体。在系统宣布检测到人脸之前,minNeighbors

会对当前其周围有多少物体进行定义。MinSize给出每个窗口的大小。我用的是这些领域的常用值。现实中,你会拿不同的值试验窗口尺寸、扩展因素等参数,直到找出最比较合适的那一个。

当该函数认为它找到一张人脸时,会返回一个矩形列表。下一步,我们会进行循环,直到它认为检测出了什么。

print "found{0}faces!".format(len(faces))

for(x,y,w,h) in faces:

#方框

#该函数返回四个值:矩形的 x和 y坐标,以及它的高和宽。我们用这些值和内置的 rectangle函数,画出矩阵

cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2)

#圆形

#cv2.circle(image,((x+x+w)/2,(y+y+h)/2),w/2,(0,255,0),2)

cv2.imshow("Find Faces!",image)

cv2.waitKey(0)

python人脸识别opencv_python之opencv人脸识别1