面向初学者的面部检测

nanqi 2018-04-28

面向初学者的面部检测

过去的几年中,人脸识别受到了很大的关注,被视为图像分析领域最成功的应用之一。根据人脸检测可以将计算资源集中在包含人脸图像的部分上的能力,可以将其视为人脸识别系统的基础部分。由于人脸中存在诸如姿势,表情,位置和方向,肤色,眼镜或面部毛发的存在,相机增益的差异,照明条件和图像分辨率等因素,所以图像中的人脸检测过程很复杂。

目标检测是计算机技术之一,它与图像处理和计算机视觉相关联,并与检测物体如人脸,建筑物,树木,汽车等的实例进行交互。人脸检测算法的主要目标是确定图像中是否有任何人脸。

近年来,在人脸识别和人脸检测领域提出了许多研究工作,使其更加先进和准确,但是当Viola-Jones带有其实时人脸检测器时,这一领域发生了革命性的变化,它能够以高精度实时检测人脸。

人脸检测是人脸识别的第一步,也是重要的一步,用于检测图像中的人脸。它是对象检测的一部分,可用于许多领域,如安全性,生物指标,执法,娱乐,个人安全等。

它用于实时检测人脸以监视和追踪人员或物体。它被广泛用于相机中,用于检测Ex-Mobile相机和数码单反相机中的多个脸部。Facebook还使用人脸检测算法来检测图像中的人脸并识别他们。

人脸检测方法:

Yan,Kriegman和Ahuja提出了一种面部检测方法的分类。这些方法分为四类,并且人脸检测算法可以属于两个或更多个类别。这些类别如下

面向初学者的面部检测

1.Knowledge-Based: -

基于知识的方法取决于一组规则,它基于人类的知识来检测人脸。Ex-A face必须有一定的距离和相互位置的鼻子,眼睛和嘴巴。这些方法的一个大问题是难以建立一套合适的规则。如果规则过于笼统或过于详细,可能会有很多误报。单靠这种方法是不够的,无法在多个图像中找到许多面孔。

2.Feature-Based: -

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

3.Template Matching -

模板匹配方法使用预定义或参数化的人脸模板通过模板和输入图像之间的相关性来定位或检测人脸。除了人脸可以分为眼睛,脸部轮廓,鼻子和嘴巴。而且,只需使用边缘检测方法就可以通过边缘建立人脸模型。这种方法实施起来很简单,但它不适合人脸检测。然而,已经提出可变形模板来处理这些问题。

4.Appearance-Based: -

基于外观的方法取决于一组代表训练人脸图像来找出人脸模型。基于外观的方法比其他性能方法更好。总的来说,基于外观的方法依靠统计分析和机器学习的技术来发现人脸图像的相关特征。该方法也用于人脸识别的特征提取。

基于外观的模型进一步分为使用面部检测的子方法,如下所述 -

  • 1.Eigenface-Based: 基于特征脸的算法用于人脸识别,它是一种使用主成分分析高效地表示人脸的方法。

  • 2.Distribution-Based:像PCA和Fisher's Discriminant这样的算法可以用来定义表示面部图案的子空间。有一个训练有素的分类器,可以从背景图像模式中正确识别目标模式类的实例。

  • 3.Neural-Networks: 神经网络已经成功地应用了对象检测,人脸检测,情感检测和人脸识别等众多检测问题。

  • 4.Support Vector Machine: 支持向量机是线性分类器,它可以最大化决策超平面和训练集中的例子之间的界限。Osuna等人 首先将这个分类器应用于人脸检测。

  • 5.Sparse Network of Winnows: 他们定义了一个由两个线性单元或目标节点组成的稀疏网络; 一个表示面部图案,另一个表示非面部图案。它不那么耗时和高效。

  • 6.Naive Bayes Classifiers: 他们通过计算训练图像上一系列图案出现的频率来计算出图片中出现人脸的概率。分类器获取了脸部局部外观和位置的联合统计数据。

  • 7.Hidden Markov Model: 模型的状态将是面部特征,通常将其定义为像素条。HMM通常与其他方法一起使用来构建检测算法。

  • 8.Information Theoretical Approach: 马尔可夫随机场(MRF)可用于人脸模式和相关特征。马尔可夫过程使用Kullback-Leibler分歧最大化类间的区分。因此,此方法可用于人脸检测。

  • 9.Inductive Learning:: 这种方法已被用于检测人脸。算法如Quinlan的C4.5或Mitchell的FIND-S用于此目的。

人脸检测如何工作: -

有许多技术可以检测人脸,借助这些技术,我们可以更准确地识别人脸。这些技术对于人脸检测(例如OpenCV,神经网络,Matlab等)具有几乎相同的程序。人脸检测用于检测图像中的多个人脸。我们在这里研究OpenCV的人脸检测,并且有一些步骤可以实现人脸检测的工作方式,如下所示 -

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

面向初学者的面部检测

将RGB图像转换为灰度

之后,使用图像处理,如果需要,图像的大小调整,裁剪,模糊和锐化都会完成。下一步是图像分割,用于轮廓检测或将多个对象分割为单个图像,以便分类器可以轻松检测图像中的对象和面部。

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

Haar-like算法还用于图像中的对象的特征选择或特征提取,借助于边缘检测,线条检测,用于检测图像中的眼睛,鼻子,嘴巴等的中心检测。它用于选择图像中的重要特征并提取这些特征用于人脸检测。

面向初学者的面部检测

边缘,线条,中心检测的Haar-like算法功能

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

面向初学者的面部检测

成功检测图像中的脸部

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

运行代码的要求 - Python,OpenCV,Webcam,Numpy。

#导入库

Import cv2

Import numpy as np

#导入脸部和眼部检测分类器

face_classifier = cv2.CascadeClassifier(‘Haarcascades/haarcascade_frontalface_default.xml’)

eye_classifier = cv2.CascadeClassifier (‘Haarcascades/haarcascade_eye.xml’)

def face_detector (img, size=0.5):

#将图像转换为灰度

gray = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)

faces = face_classifier.detectMultiScale (gray, 1.3, 5)

If faces is ():

return img

#给定坐标以从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

#网络摄像头设置为人脸检测

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

#当一切完成后,释放捕获

cap.release ()

cv2.destroyAllWindows ()

相关推荐

nanqi / 0评论 2018-10-16

jiesuocr / 0评论 2018-10-11