在本文中,将探讨使用Dlib HOG检测算法进行人脸检测的过程。将不仅测试正面人脸,还将测试不同角度的图像,以观察模型在哪些方面表现良好,以及在哪些方面表现不佳。同时,还将计算HOG检测模型在图像中检测人脸所需的总时间。
安全目的:人脸识别正成为维护个人/组织安全最常用的方法之一。
网约车公司:它可以帮助他们检查司机是否接对了人。
智能家居:为了维护安全,尤其是在由技术驱动的家中,人脸检测和识别是必不可少的。
首先,将导入所需的库。
import cv2
import dlib
from time import time
import matplotlib.pyplot as plt
如果想了解HOG人脸检测,首先让分解这个术语,即方向梯度直方图,它不仅是一个人脸检测算法,也是一般对象检测方法。HOG基本上是一个特征描述符,用于图像处理和计算机视觉技术。
HOG在预处理步骤中主要使用5个过滤器,如下所示:
已经理解了什么是HOG人脸检测器,但要使用它,首先需要加载人脸检测器,即dlib.get_frontal_face_detector()
函数,这是一个预训练的方法,这个函数之前已经有了dlib库,所以甚至不需要包括主模型文件。
hog_face_detector = dlib.get_frontal_face_detector()
输出:
<_dlib_pybind11.fhog_object_detector at 0x1d669827770>
现在是创建一个HOG人脸检测函数的时候了,这个函数将非常可靠;为了测试目的,将使用不同类型的头部/面部位置,所以那时不需要一次又一次地执行相同的任务。
函数的语法:
results = hog_face_detector(sample_image, up_sample)
函数参数:
这个函数将如何返回?
由于这个HOG算法是训练用于检测至少8×80大小的人脸,所以每当想要检测小于该大小的人脸时,需要上采样图像,这将增加图像的分辨率。
def hogDetectFaces(image, hog_face_detector, display=True):
height, width, _ = image.shape
output_image = image.copy()
imgRGB = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
start = time()
results = hog_face_detector(imgRGB, 0)
end = time()
for bbox in results:
x1 = bbox.left()
y1 = bbox.top()
x2 = bbox.right()
y2 = bbox.bottom()
cv2.rectangle(output_image, pt1=(x1, y1), pt2=(x2, y2), color=(0, 255, 0), thickness=width//200)
if display:
cv2.putText(output_image, text='Time taken: '+str(round(end - start, 2))+' Seconds.', org=(10, 65),
fontFace=cv2.FONT_HERSHEY_COMPLEX, fontScale=width//700, color=(0,0,255), thickness=width//500)
plt.figure(figsize=[15,15])
plt.subplot(121);plt.imshow(image[:,:,::-1]);plt.title("Original Image");plt.axis('off');
plt.subplot(122);plt.imshow(output_image[:,:,::-1]);plt.title("Output");plt.axis('off');
else:
return output_image, results
在第一步中,将使用shape
函数获取图像的height
和width
。
创建图像的副本,以便可以在副本上执行所有任务,而不是在原始图像上。
然后将样本图像从BGR
格式转换为RGB
格式。
在本文中,正在计算算法的检测时间,因此访问当前时间。
现在将使用hog_face_detector
执行人脸检测。
除了开始时间,还将检索end time
。
现在将循环遍历边界框并检索(X1, Y1)
和(X2, Y2)
坐标的边界框,然后根据这些坐标绘制边界框。
这里有一个轻微的validation
部分,将检查否要显示输入和结果图像。
如果是,将给出算法执行人脸检测所需的exact time
,然后显示两个图像。
否则,将简单地给出results
和输出图像。
已经测试了函数,该函数建立在DLIB人脸检测器之上,也看到了它的局限性和优势。现在让看看已经涵盖了什么。
本文的第一个收获是,学到了完全不同的算法/方法来进行人脸检测,即HOG face detection
。