这一篇文章就要开始正式用分类器运行人脸检测和笑容检测、眼睛检测等不同的检测。
第四步:人脸检测
人脸识别的最基础任务是「人脸检测」。你必须首先「捕捉」人脸(第 1 阶段)才能在未来与捕捉到的新人脸对比时(第 3 阶段)识别它。这一段代码便是增加了人脸分类器进行人脸检测:
import numpy as np
import cv2
faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml') #加载人脸检测分类器
cap = cv2.VideoCapture(0)
cap.set(3,640)
cap.set(4,480)
while True:
ret, img = cap.read()
img = cv2.flip(img, -1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray, #表示输入 grayscale 图像
scaleFactor=1.2, #表示每个图像缩减的比例大小
minNeighbors=5, #表示每个备选矩形框具备的邻近数量。数字越大,假正类越少
minSize=(20, 20) #表示人脸识别的最小矩形大小
)
for (x,y,w,h) in faces: #标记人脸
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) #绘制矩形框
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
cv2.imshow('video',img)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
笑脸检测
使用笑脸检测,我们仍然需要首先检测人脸,然后再检测人是否在笑,这就要求同时要加入人脸检测分类器和笑脸检测分类器,这样的计算力对于树莓派的性能是一种挑战...
smileCascade = cv2.CascadeClassifier('Cascades/haarcascade_smile.xml')
smile = smileCascade.detectMultiScale(
roi_gray,
scaleFactor= 1.5,
minNeighbors=15,
minSize=(25, 25),
for (xx, yy, ww, hh) in smile:
cv2.rectangle(roi_color, (xx, yy), (xx + ww, yy + hh), (0, 255, 0), 2)
本文链接:
https://www.zaigie.com/archives/161/