[计算机视觉]人脸应用:人脸检测人脸对比五官检测眨眼检测活体检测疲劳检测

浩瀚之水_csdn 浩瀚之水_csdn     2022-12-29     659

关键词:

人脸应用在计算机视觉体系中占很大一块,在深度学习火起来之前,基于传统机器学习的人脸应用就已经很成熟了,有很多商用应用场景。本文用一个可以实际运行的Demo来说明人脸应用中常见的技术概念,包含‘人脸检测’、‘人脸对比’、‘人脸表征检测(五官定位)’、‘眨眼检测’、‘活体检测’以及‘疲劳检测’。

人脸检测

严格来讲,人脸检测只包含对照片中的人脸进行定位,人脸检测只获取照片中人脸的矩形方框(Left、Top、Right、Bottom),再没有其他的内容。现如今网上大部分“人脸检测”概念模糊,包含的东西很多,比如除了刚才说的定位,还包括后面要说的人脸对比,这个严格上讲是错的。

人脸对比

当你使用人脸检测技术发现图片(视频帧)中包含一个人脸,那么如何判断该人脸是谁呢?这个就是我们常见的人脸授权应用,将一个人脸与数据库的其他人脸进行对比,看它与数据库中已有人脸哪个最相似。传统机器学习中,人脸对比过程需要先提取人脸特征编码,寻找一个特征向量来代替原有人脸RGB图片,再通过计算两个人脸特征向量距离来判断人脸是否相似(传统机器学习中的特征工程可以参考上一篇文章)。如果距离小于某值,则认为是同一个人脸,反之亦然。

上图显示传统机器学习方法中人脸对比的过程,过程相对来说比较复杂,需要提取合适的特征向量,该特征对原RGB人脸图片有一定代表性。基于深度学习的方式去做人脸对比就相对来说简单很多,可以直接是一个端到端的流程:

当然也有的做法是先通过神经网络提取人脸特征,然后再用传统机器学习的方式去训练类似SVM模型去做分类。

人脸表征检测(五官定位)

一般人脸应用使用前面说到的‘人脸检测’、‘人脸对比’两种技术就足够了,比如人脸打卡、人脸自动马赛克、人脸开锁等应用。但是更复杂的一些人脸应用只有人脸检测和对比是不够的,比如后面要说的活体检测、疲劳检测等场景。这些时候不仅要判断人脸的位置(矩形方框),还需要检测出人脸五官位置,比如眉毛形状、眼睛区域、鼻子位置、嘴巴位置等等,有了五官位置数据之后,我们就可以基于这些数据做一些更复杂的应用了,比如实时判断视频中的人是否眨眼、是否闭眼、是否说话、是否低头抬头等等。下图为人脸表征检测得到的结果:

上图显示通过机器学习提取到一张人脸表征的68个点,分别为:

(1)左眉毛5个点

(2)右眉毛5个点

(3)左眼睛6个点

(4)右眼睛6个点

(5)鼻梁4个点

(6)鼻尖5个点

(7)上嘴唇/下嘴唇20个点

(8)下巴17个点

我们可以通过下标(python中可以使用切片)快速获取对应的坐标点,该坐标点代表脸部表征在原输入图片中的实际位置(像素单位)。

眨眼检测

对视频每帧做人脸表征检测,得到视频每帧画面中人脸五官的位置数据后,我们可以通过分析人眼区域(六个点组成一个闭合的椭圆形)的闭合程度来判断是否发生眨眼,那么如何衡量每个眼睛的闭合程度呢?根据前人研究:http://vision.fe.uni-lj.si/cvww2016/proceedings/papers/05.pdf可知,通过每只眼的6个点即可判断眼睛的闭合程度:

眼睛在打开到闭合时,下面这个表达式的值快速趋近于零:

上面表达式EAR(Eye Aspect Ratio)的值等于垂直方向两个线段长度之和除以水平方向线段长度*2,这个值在闭眼的瞬间可以趋近于零,在睁眼的瞬间,恢复到原来值。EAR的变化过程如下图所示:

我们只需要监控EAR的值是否快速波动并且趋近于零来判断是否闭眼,是否快速恢复来判断是否睁眼。如果闭眼和睁眼时间间隔很短(只占几个视频帧,每秒25帧算),那么就认定为眨眼。

活体检测

人脸应用中,为了防止人们使用照片等伪造人脸通过授权,一般都需要对画面中的人脸进行活体过滤,即判断当前视频画面中的人脸是否是真人,而不是照片等其他代替物。通过前面介绍的眨眼检测技术,我们可以实现一个非常简单的‘活体检测’算法,算法每隔一个随机时间段(比如几秒,时间不固定,防止人们录制视频来伪造)就要求视频画面中的人眨眼,如果画面中的人积极配合算法发出的指令,那么可以认为画面中是真人,否则可能就是伪造人脸。

需要说明的是,活体检测仅仅通过以上这种方式可能还不是足够安全,一般还可以结合其他活体检测技术,比如相机深度检测、脸部光线检测、以及利用深度学习技术直接对人脸进行二分类(活体/非活体)。

疲劳检测

疲劳检测这个应用场景太大了,比如可以用于长途汽车司机疲劳监控告警、值班人员疲劳监控告警等。主要原理还是通过前面介绍的眨眼检测技术,将其稍微改进一下,我们就可以对闭眼进行检测,如果闭眼超过一段时间(比如1秒),那么就认为疲劳发生,发出告警。眨眼判断很简单,闭眼判断更简单,这些所有的判断逻辑全部基于人脸表征提取的数据:

 

需要明确的是,本文所有算法的准确性全部依赖于模型训练的好坏,人脸检测是否准确、人脸特征提取是否合适、人脸表征检测结果是否准确。机器学习就是这样,结果的好坏完全取决于模型训练的好坏(特征提取的好坏)。比如本文这个demo中可以容易看到,人脸表征检测对戴眼镜的人脸效果不是很好,需要更多这方面的训练数据。有问题的朋友请留言,感兴趣的朋友请关注公众号,分享原创CV/DL相关文章。

用于从数据库进行人脸检测和识别的计算机视觉应用程序(+web 界面)

】用于从数据库进行人脸检测和识别的计算机视觉应用程序(+web界面)【英文标题】:ComputerVisionapplication(+webinterface)forfacedetectionandrecognitionfromdatabase【发布时间】:2012-04-1111:02:53【问题描述】:我的项目是一个计算机视觉Java应... 查看详情

[译]人脸检测与人脸识别简介(代码片段)

...mami.co.cc/faceRecognition.htmlTranslatedby11“人脸识别”是一个在计算机视觉和生物特征识别领域十分活跃的话题。这个主题已经被给力地研究了25年,并且最终在安全、机器人学、人机交互、数码摄像机、游戏和娱乐领域得到了广... 查看详情

图像处理——基于机器视觉技术的人脸在线识别系统设计(代码片段)

...套人脸在线检测识别系统,系统将由以下几个部分构成:计算机图像预处理、数据收集和预处理、人脸图像定位检测、人脸识别模型训练、人脸识别。经过实验,确定该系统可对本人的人脸进行快速并准确的检测与识别。关键词... 查看详情

浅谈人脸识别技术的方法和应用

...、视频会议、人机交互系统等各个方面。 人脸识别技术计算机人脸识别技术也就是利用计算机分析人脸图象,进而从中提取出有效的识别信息,用来“辨认”身份的一门技术.虽然人类的人脸识别能力很强,能够记住并辨别上千个不... 查看详情

ai人脸检测和人脸识别是一个概念吗?有什么区别?

人脸检测-也称为面部检测-是一种基于人工智能(AI)的计算机技术,用于在数字图像中查找和识别人脸。人脸检测技术可应用于各个领域——包括安全、生物识别、执法、娱乐和个人安全——以提供对人员的实时监控和跟踪。... 查看详情

人脸关键点的应用场景及重难点解析丨devfordev专栏

...I算法工程师周世付。人脸检测、人脸关键点检测,是计算机视觉的基础算法。许多酷炫应用背后,例如美颜、贴纸、人脸驱动avatar,是依赖着人脸检测、人脸关键点检测的算法。人脸检测的常规做法,是从图像中... 查看详情

使用视觉谷歌服务未检测到人脸

】使用视觉谷歌服务未检测到人脸【英文标题】:Facenotdetectedusingvisiongoogleservice【发布时间】:2016-03-1021:00:51【问题描述】:https://developers.google.com/android/reference/com/google/android/gms/vision/face/FaceDetector.Builder我在我的应用中使用上... 查看详情

人脸检测5种方法(代码片段)

众所周知,人脸识别是计算机视觉应用的一个重大领域,在学习人脸识别之前,我们先来简单学习下人脸检测的几种用法。常见的人脸检测方法大致有5种,Haar、Hog、CNN、SSD、MTCNN:注:本文章图片来源于... 查看详情

基于opencv的人脸识别,翻车了居然识别错误。(代码片段)

...gnition模块介绍1.opencv关于OpenCvOpencv是一个开源的的跨平台计算机视觉库,内部实现了图像处理和计算机视觉方面的很多通用算法,对于python 查看详情

第九节人脸检测之haar分类器

人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方向发展起来。目前人脸检测的方法主要... 查看详情

浅析人脸检测之haar分类器方法

一、Haar分类器的前世今生  人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方向发展... 查看详情

人脸关键点的应用场景及重难点解析丨devfordev专栏

...I算法工程师周世付。人脸检测、人脸关键点检测,是计算机视觉的基础算法。许多酷炫应用背后,例如美颜、贴纸、人脸驱动avatar,是依赖着人脸检测、人脸关键点检测的算法。人脸检测的常规做法,是从图像中... 查看详情

计算机视觉·opencv使用haar+cascade实现人脸检测(代码片段)

前言人脸检测的目标是找出图像中所有的人脸对应的位置,算法的输出是人脸的外接矩形在图像中的坐标。使用haar特征和cascade检测器进行人脸检测是一种传统的方式,下面将给出利用OpenCV中的haarcascade进行人脸检测的代... 查看详情

人脸检测快速视觉套件

】人脸检测快速视觉套件【英文标题】:Facedetectionswiftvisionkit【发布时间】:2017-12-3101:26:21【问题描述】:我正在尝试适用于iOS11的Vision套件。我可以使用Vision,并且可以找到边界框值face。但我不知道如何使用这些点绘制一个矩... 查看详情

Firebase 视觉人脸检测使用启发式算法 (MLK​​it) 获得人脸的紧密拟合估计

】Firebase视觉人脸检测使用启发式算法(MLK​​it)获得人脸的紧密拟合估计【英文标题】:FirebasevisionFacedetectiongettightfitestimationofthefaceusingheuristics(MLKit)【发布时间】:2020-10-0123:47:11【问题描述】:开启setContourMode(FirebaseVisionFaceDetec... 查看详情

计算机视觉项目-人脸识别与检测(代码片段)

...OpenCV的相关知识🎉作者简介:⭐️⭐️⭐️目前计算机研究生在读。主要研究方向是人工智能和群智能算法方向。目前熟悉深度学习(keras、pytorch、yolo系列),pytho 查看详情

3分钟看懂人脸识别原理

人脸识别范围很广泛,目前有十个关键技术1.人脸检测(facedetection)是检测出图像中人脸位置的技术一般输入是一张图片,输出是人脸所在位置,常用矩形框标记在原图之上;2.人脸配准(facealignment)是定位人脸五官关键点坐标... 查看详情

人脸检测中的 Haar Cascades 与 LBP Cascades [关闭]

...间】:2012-02-0603:36:56【问题描述】:我一直在OpenCV(开源计算机视觉库)中尝试人脸检测,发现可以使用Haar级联来检测人脸,因为OpenCV提供了几种人脸。但是,我注意到还有几个LBP级联。经过一番研究,我发现LBP代表Loc 查看详情