转载自: OpenCV学堂
作者:gloomyfish
01
OpenCV中人脸检测概述
自从VJ在2004发表了关于级联分类器实时对象检测的论文以后,级联分类器就在OpenCV中落地生根了,一段时间,特别是OpenCV3.x版本中基于级联分类器的人脸检测一直是标配,虽然大家刚开始看了例子之后觉得这个是一个很实用的功能,但是在实际实用中级联分类器的人脸检测方法则是频频翻车,我自己曾经移植到Android上面玩过,日常就是两个字“翻车”,很多时候都无法达到开发者想要的稳定性与实时性能。但是这个并不妨碍它作为OpenCV3.x的一大关注点,还产生了无数的Demo演示程序。但是如今已经是OpenCV4.x的时代了,那些基于级联分类器的人脸检测演示看上去有点不合时宜,而且效果惨遭以深度神经网络模型人脸检测技术的毒打。OpenCV4中的人脸检测现在支持多种深度神经网络模型,与OpenCV3中的传统人脸检测方法形成鲜明对比。下面我们就来一一介绍一下从OpenCV3到OpenCV4中不同人脸检测技术。
02
OpenCV3 人脸检测技术
OpenCV3中人脸检测基于级联分类器不仅支持人脸检测,还支持眼睛与鼻子、嘴巴等检测、此外还支持笑脸检测,看上去非常多,实际上却很难稳定工作,此外还支持基于级联分类器的训练,这个方式要是要基于大数据才会出好的模型,但是相比深度学习,这个训练方式现在OpenCV4中自己已经把它抛弃了。
HARR特征级联分类器
HARR特征级联分类器人脸检测来自VJ的2004论文中提出,其主要思想可以通过下面一张图像解释:
LBP特征级联分类器
同样基于级联分类器,OpenCV3.x还支持基于LBP特征的人脸检测,这里也可以用图解释如
在OpenCV3.x这两种算法都支持人脸与眼睛识别,基本原理都是基于特征提取+级联分类器,它们之间有哪些异同点,下面的对比说明的很清楚:
03
OpenCV4 人脸检测技术
OpenCV3的人脸检测技术本质还是在解决OpenCV作为计算机视觉框架是否支持人脸检测功能的有无问题,本身是很难做到稳定跟可靠工业级输出。但是OpenCV4中的人脸检测算法采用深度学习技术,已经可以直接使用,达到实时跟稳定检测,在很多应用场景中无需再次训练模型。这样是极大的方便了开发者,节省了大量时间。
官方ResNet-10 SSD对象检测模型
OpenCV支持基于残差网络ResNet-10的SSD网络模型训练的人脸检测模型,分别实现了Caffe与tensorflow版本模型生成,量化为FP16与INT8,模型均小于5MB。
MTCNN支持
此外OpenCV还2016年提出的三阶段的人脸检测模型MTCNN的调用,也可以达到实时运行,MTCNN的网络结构如下:
MTCNN还是很多嵌入式设备上人脸检测选择,因为它不光支持人脸检测,还支持五点landmark输出,可以实现人脸对齐,为人脸识别做前期的处理。
OpenVINO中人脸检测模型
OpenCV4 在DNN中使用OpenVINO推理引擎模块实现对模型加速,同时支持OpenVINO的预训练模型库的加载与使用。而OpenVINO中有大量的人脸检测模型,这些模型一般都小于5MB,分别在多个垂直应用场景中训练生成,face-detection-0100到face-detection-0104都是基于MobileNetv2的SSD模型训练生成的人脸识别模型。非常实用!
OpenVINO提供模型库中总计超过10个人脸检测器,分别针对室内与室外场景,都可以直接调用。而且这些模型都是在CPU上可以实时推理运行,完成人脸检测,稳定可靠输出。
有了这些,可以说人脸检测环节基于OpenCV可以完全的自由选择,无需再重复造轮子!
推荐专栏文章
更多嵌入式AI算法部署等请关注极术嵌入式AI专栏。