人脸检测和人脸识别是不一样的,人脸检测是在图像中定位人脸区域的过程。
人脸识别是比较收集的人脸中那个和摄像机中的人脸最相似。
在识别之前,计算机需要学习什么是人脸,那种图片才算是人脸而不是其他的东西。怎样学习呢,就是通过大量的图片的学习,就像小孩子一样,每个人生下来的时候,什么都不认识,什么都不知道。我们是慢慢通过学习才知道这个世界, 见到一个东西,第一次不认识,就第二次,第三次,,,,几百次,上千次过后就记住了。计算机也一样。在告诉计算机什么图片是人脸后,识别的可能性很小,但是,通过几万,几十万,的次数过后,识别的可能性就非常大了。
在这里我们不讨论怎样识别,我们利用opencv里面已经训练好的人脸识别器。这个文件地址在open文件下的data文件夹下面:
C:\Python27\Lib\site-packages\cv2\data
该文件下面有很多的内置分类器。
OpenCV安装目录中的\data\ haarcascades目录下的haarcascade_frontalface_alt.xml与haarcascade_frontalface_alt2.xml都是用来检测人脸的Haar分类器。
人脸的Haar特征分类器就是一个XML文件,该文件中会描述人脸的Haar特征值。当然Haar特征的用途可不止可以用来描述人脸这一种,用来描述眼睛,嘴唇或是其它物体也是可以的。
代码:
# -*- coding: cp936 -*-
import cv2
capture = cv2.VideoCapture(0)
#加载模型
face = cv2.CascadeClassifier("C:\\Python27\\Lib\site-packages\\cv2\\data\\haarcascade_frontalface_alt2.xml")
#创建窗口
cv2.namedWindow("image")
while True:
ret,frame = capture.read()
#灰色处理
gray = cv2.cvtColor(frame,cv2.COLOR_RGB2GRAY)
#检测人脸(多张人脸)
faces = face.detectMultiScale(gray,1.1,3,0,(100,100))
#标记人脸
for (x,y,w,h) in faces:
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),10 )
#显示图片
cv2.imshow("image",frame)
#暂停窗口
if cv2.waitKey(10) & 0xFF == ord("q"):
break
#释放资源
capture.release()
cv2.destroyAllWindows()
再检测到人脸后,会有一个蓝色框框将人脸框起来。