小白必看!关于人脸检测你需要知道的三件事!

1,154 阅读8分钟

本文适用于希望通过了解什么是人脸检测、其类型及其工作原理来在计算机视觉或 AI 领域开始他们的载体的初学者。

在过去的几年里,人脸识别受到了广泛的关注,被认为是图像分析领域最有前途的应用之一。人脸检测可以考虑人脸识别操作的很大一部分。根据其强度将计算资源集中在持有人脸的图像部分。图片中的人脸检测方法很复杂,因为人脸存在可变性,例如姿势、表情、位置和方向、肤色、眼镜或面部毛发的存在、相机增益的差异、照明条件和图像分辨率。

物体检测是计算机技术中的一种,它与图像处理和计算机视觉相联系,它与人脸、建筑物、树木、汽车等物体的检测实例相互作用。人脸检测算法的主要目的是确定图像中是否有任何人脸。

近年来,在人脸识别和人脸检测领域提出了很多研究工作,以使其更加先进和准确,但是当 Viola-Jones 推出实时人脸检测器时,它在该领域掀起了一场革命,它是能够实时、高精度地检测人脸。

人脸检测是人脸识别的第一步,也是必不可少的一步,用于检测图像中的人脸。它是物体检测的一部分,可用于许多领域,例如安全、生物识别、执法、娱乐、人身安全等。

它用于实时检测人脸,以对人或物体进行监视和跟踪。它广泛用于相机以识别框架中的多个外观 Ex-Mobile 相机和 DSLR。 Facebook 也在使用人脸检测算法来检测图像中的人脸并进行识别。

人脸检测方法:

Yan、Kriegman 和 Ahuja 提出了人脸检测方法的分类。 这些方法分为四类,人脸检测算法可以属于两组或更多组。 这些类别如下:

1.基于知识:

基于知识的方法依赖于规则集,它基于人类知识来检测人脸。 Ex- 一张脸必须有一个鼻子、眼睛和嘴巴,它们彼此之间一定的距离和位置。这些方法的一个大问题是难以建立一套合适的规则。如果规则太笼统或太详细,可能会有很多误报。仅此方法是不够的,无法在多张图像中找到许多人脸。

2.基于特征:

基于特征的方法是通过提取人脸的结构特征来定位人脸。它首先作为分类器进行训练,然后用于区分面部和非面部区域。这个想法是为了克服我们对面孔的本能知识的限制。这种方法分为几个步骤,甚至有很多人脸的照片,他们报告的成功率为 94%。

3.模板匹配:

模板匹配方法使用预定义或参数化的人脸模板,通过模板和输入图像之间的相关性来定位或检测人脸。例如,人脸可以分为眼睛、面部轮廓、鼻子和嘴巴。此外,可以仅通过使用边缘检测方法通过边缘构建人脸模型。这种方法实现起来很简单,但是对于人脸检测来说是不够的。然而,已经提出了可变形模板来处理这些问题。

4.基于外观:

基于外观的方法依赖于一组委托训练人脸图像来找出人脸模型。 基于外观的方法优于其他性能方法。 一般来说,基于外观的方法依赖于统计分析和机器学习的技术来寻找人脸图像的相关特征。 该方法也用于人脸识别的特征提取。

基于外观的模型进一步分为用于人脸检测的子方法,如下所示

4.1. 基于特征脸:

用于人脸识别的基于特征脸的算法,它是一种使用主成分分析有效地表示人脸的方法。

4.2.基于分布:

PCA 和 Fisher 判别式等算法可用于定义表示面部模式的子空间。有一个经过训练的分类器,它可以从背景图像模式中正确识别目标模式类的实例。

4.3. 神经网络:

神经网络已经成功解决了许多检测问题,如物体检测、人脸检测、情感检测和人脸识别等。

4.4.支持向量机:

支持向量机是线性分类器,可最大化决策超平面和训练集中示例之间的余量。奥苏纳等人。首先将此分类器应用于人脸检测。

4.5.Winnows 的稀疏网络:

他们定义了一个由两个线性单元或目标节点组成的稀疏网络;一个代表面部图案,另一个代表非面部图案。它耗时少,效率高。

4.6. 朴素贝叶斯分类器:

他们通过计算训练图像上一系列模式的出现频率来计算一张脸出现在图片中的概率。分类器捕获面部局部外观和位置的联合统计数据。

4.7. 隐马尔可夫模型:

模型的状态是面部特征,通常被描述为像素条。 HMM 通常与其他方法一起使用来构建检测算法。

4.8. 信息理论方法:

马尔可夫随机场 (MRF) 可用于面部图案和相关特征。马尔可夫过程使用 Kullback-Leibler 散度最大化类之间的区分。因此该方法可用于人脸检测。

4.9. 归纳学习:

这种方法已被用于检测人脸。 Quinlan 的 C4.5 或 Mitchell 的 FIND-S 等算法用于此目的。

人脸检测的工作原理:

检测人脸的技术有很多,借助这些技术,我们可以更准确地识别人脸。 这些技术具有几乎相同的人脸检测程序,例如 OpenCV、神经网络、Matlab 等。人脸检测的工作原理是检测图像中的多个人脸。 这里我们使用 OpenCV 进行人脸检测,并且有一些人脸检测操作的步骤,如下所示 -

首先,通过提供图像的位置来导入图像。 然后将图片从RGB转换为灰度,因为在灰度中很容易检测人脸。

之后,使用图像处理,其中根据需要对图像进行调整大小、裁剪、模糊和锐化。 下一步是图像分割,用于轮廓检测或分割单个图像中的多个对象,以便分类器可以快速检测到图片中的对象和人脸。

下一步是使用 Haar-Like 特征算法,该算法由 Voila 和 Jones 提出用于人脸检测。该算法用于查找帧或图像中人脸的位置。 所有的人脸都具有人脸的一些普遍特性,例如眼睛区域比其相邻像素更暗,鼻子区域比眼睛区域更亮。

haar-like算法也用于对图像中的物体进行特征选择或特征提取,借助边缘检测、线检测、中心检测来检测图片中的眼睛、鼻子、嘴巴等。 它用于选择图像中的基本特征并提取这些特征进行人脸检测。

下一步是给出x、y、w、h的坐标,这在图片中形成一个矩形框来显示人脸的位置,或者我们可以说是显示图像中的感兴趣区域。 之后,它可以在检测到人脸的感兴趣区域中制作一个矩形框。 还有许多其他检测技术一起用于检测,例如微笑检测、眼睛检测、眨眼检测等。

如何实时运行人脸检测器(网络摄像头):

运行代码的要求 - Python、OpenCV、网络摄像头、Numpy。

#import libraries
import cv2
import numpy as np
#import classifier for face and eye detection
face_classifier = cv2.CascadeClassifier(‘Haarcascades/haarcascade_frontalface_default.xml’)
# Import Classifier for Face and Eye Detection
face_classifier = cv2.CascadeClassifier(‘Haarcascades/haarcascade_frontalface_default.xml’)
eye_classifier = cv2.CascadeClassifier (‘Haarcascades/haarcascade_eye.xml’)
def face_detector (img, size=0.5):
# Convert Image to Grayscale
gray = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
faces = face_classifier.detectMultiScale (gray, 1.3, 5)
If faces is ():
return img
# Given coordinates to detect face and eyes location from ROI
for (x, y, w, h) in faces
x = x — 100
w = w + 100
y = y — 100
h = h + 100
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]
eyes = eye_classifier.detectMultiScale (roi_gray)
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,0,255),2)
roi_color = cv2.flip (roi_color, 1)
return roi_color
# Webcam setup for Face Detection
cap = cv2.VideoCapture (0)
while True:
ret, frame = cap.read ()
cv2.imshow (‘Our Face Extractor’, face_detector (frame))
if cv2.waitKey (1) == 13: #13 is the Enter Key
break
# When everything done, release the capture
cap.release ()
cv2.destroyAllWindows ()

最近几个月我们更新了不少关于行人分析的相关研发过程,对于TSINGSEE青犀视频的各大平台来说,在不久后也逐步将智能分析的功能融合进去,形成新的智能分析平台,欢迎大家关注我们的更新。