人脸检测和人脸识别是不一样的,人脸检测是在图像中定位人脸区域的过程。
人脸识别是比较收集的人脸中那个和摄像机中的人脸最相似。
在识别之前,计算机需要学习什么是人脸,那种图片才算是人脸而不是其他的东西。怎样学习呢,就是通过大量的图片的学习,就像小孩子一样,每个人生下来的时候,什么都不认识,什么都不知道。我们是慢慢通过学习才知道这个世界, 见到一个东西,第一次不认识,就第二次,第三次,,,,几百次,上千次过后就记住了。计算机也一样。在告诉计算机什么图片是人脸后,识别的可能性很小,但是,通过几万,几十万,的次数过后,识别的可能性就非常大了。
在这里我们不讨论怎样识别,我们利用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()再检测到人脸后,会有一个蓝色框框将人脸框起来。