Dlib HOG 人脸检测算法解析

在本文中,将探讨使用Dlib HOG检测算法进行人脸检测的过程。将不仅测试正面人脸,还将测试不同角度的图像,以观察模型在哪些方面表现良好,以及在哪些方面表现不佳。同时,还将计算HOG检测模型在图像中检测人脸所需的总时间。

人脸检测的应用场景

安全目的:人脸识别正成为维护个人/组织安全最常用的方法之一。

网约车公司:它可以帮助他们检查司机是否接对了人。

智能家居:为了维护安全,尤其是在由技术驱动的家中,人脸检测和识别是必不可少的。

导入所需库

首先,将导入所需的库。

import cv2 import dlib from time import time import matplotlib.pyplot as plt

Dlib HOG 人脸检测

如果想了解HOG人脸检测,首先让分解这个术语,即方向梯度直方图,它不仅是一个人脸检测算法,也是一般对象检测方法。HOG基本上是一个特征描述符,用于图像处理计算机视觉技术。

HOG在预处理步骤中主要使用5个过滤器,如下所示:

  • 正面人脸
  • 右侧转向人脸
  • 左侧转向人脸
  • 正面但向右旋转的人脸
  • 正面但向左旋转的人脸

加载HOG人脸检测器

已经理解了什么是HOG人脸检测器,但要使用它,首先需要加载人脸检测器,即dlib.get_frontal_face_detector()函数,这是一个预训练的方法,这个函数之前已经有了dlib库,所以甚至不需要包括主模型文件。

hog_face_detector = dlib.get_frontal_face_detector()

输出:

<_dlib_pybind11.fhog_object_detector at 0x1d669827770>

HoG人脸检测函数

现在是创建一个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函数获取图像的heightwidth

创建图像的副本,以便可以在副本上执行所有任务,而不是在原始图像上。

然后将样本图像从BGR格式转换为RGB格式。

在本文中,正在计算算法的检测时间,因此访问当前时间。

现在将使用hog_face_detector执行人脸检测。

除了开始时间,还将检索end time

现在将循环遍历边界框并检索(X1, Y1)(X2, Y2)坐标的边界框,然后根据这些坐标绘制边界框。

这里有一个轻微的validation部分,将检查否要显示输入和结果图像。

如果是,将给出算法执行人脸检测所需的exact time,然后显示两个图像。

否则,将简单地给出results和输出图像。

已经测试了函数,该函数建立在DLIB人脸检测器之上,也看到了它的局限性和优势。现在让看看已经涵盖了什么。

本文的第一个收获是,学到了完全不同的算法/方法来进行人脸检测,即HOG face detection

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485