上一节博文介绍了利用opencv来进行视频的读取,本节中将在读取视频的基础上,利用opencv自带的人脸识别分类器haarcascade_frontalface_alt2.xml将人脸识别出来,并且将每一张人脸保存为图片,用于训练。
一、获取视频数据
获取视频时同上一节,具体参考:http://blog.csdn.net/yunge812/article/details/79444172
二、读取分类器函数
classifier=cv2.CascadeClassifier('/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt2.xml')
这个分类器是opencv自带的人脸检测分类器
三、加载分类器
#图像灰度化
grey=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
#加载分类器 opencv自带
faceRects = classifier.detectMultiScale(grey, scaleFactor=1.2,
minNeighbors=3, minSize=(32, 32))
faceRects 中存储的就是人脸的x,y,w,h
四、将得到的人脸存储为图片
#这里为每个捕捉到的图片进行命名,每个图片按数字递增命名。
image_name='traindata/%d.jpg' % num
image=frame[y-5:y+h+5,x:x+w]#将当前帧含人脸部分保存为图片
cv2.imwrite(image_name,image)
num+=1
cv2.rectangle(frame,(x,y),(x+w,y+h),color,2) #画出矩形框
font = cv2.FONT_HERSHEY_SIMPLEX #获取内置字体
cv2.putText(frame,('%d'%num),(x+30,y+30),font,1,(255,0,255),4)
#对人脸坐标位置,添加一个(x+30,y+30)的矩形框用于显示当前捕捉到了多少人脸图片
五、结果
识别出来的人脸
保存的人脸照片
只保留了人脸的照片
最后我们分别保存训练照片和测试照片,训练照片为正样本,即我们识别的人的照片,测试样本为负样本,是随机人物的照片,我们最终的目的是在众多的人脸中识别出来正样本。