一、opencv中的haar模型进行检测
import cv2
img=cv2.imread('../image/img.jpg')
img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
casc=cv2.CascadeClassifier("../model/haarcascade_frontalface_default.xml")
faces=casc.detectMultiScale(img,1.3,4)
face_num=0
for face in faces:
x=list(face)[0]
y=list(face)[1]
w=list(face)[2]
h=list(face)[3]
face_num+=1
# print(da,x,y,w,h)
cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2,1)
print("face_num:",face_num)
cv2.imshow('img',img)
cv2.waitKey()
scaleFactor 指定检测图像选择框的缩小比例。
minNeighbors 指定检测目标候选框达到多少应保留。
人脸数目: 33
运行时间: 1.4092044830322266
二、dlib检测
2.1 get_frontal_face_detector
import cv2
import dlib
detector=dlib.get_frontal_face_detector()
img=cv2.imread('../image/img.jpg')
b,g,r=cv2.split(img)
dets=detector(img,1)
# print(dets)
face_num=0
for i ,face in enumerate(dets):
pt1=(face.left(),face.top())
pt2=(face.right(),face.bottom())
face_num+=1
cv2.rectangle(img,pt1,pt2,(0,0,255),2)
print("face_num:",face_num)
cv2.imwrite('dlib_face.jpg',img)
cv2.imshow('img',img)
cv2.waitKey()
cv2.destroyAllWindows()
人脸数目: 34
运行时间: 0.8732187747955322
2.2 mmod_human_face_detector
import cv2
import dlib
cnn_detector=dlib.cnn_face_detection_model_v1("../model/mmod_human_face_detector.dat")
img=cv2.imread('../image/ab.jpg')
dets=cnn_detector(img,1)
print(dets)
for i ,data in enumerate(dets):
face=data.rect
pt1=(face.left(),face.top())
pt2=(face.right(),face.bottom())
cv2.rectangle(img,pt1,pt2,(0,0,255),2)
cv2.imshow('img',img)
cv2.waitKey()
cv2.destroyAllWindows()
人脸数目: 37
运行时间: 3.888331651687622
对比分析参考: 人脸检测学习笔记(数据集-DLIB人脸检测原理-DLIB&OpenCV人脸检测方法及对比) - dskit - 博客园