返回 登录
0

浅析哈尔级联人脸检测与混合整数线性规划

简介
笔者曾在《Face swapping》一文中提到过人脸检测,使用流行的“哈尔特征(Haar-like features)级联”算法逐步执行,就能在图像中获得初级的人脸轮廓。

在本文中,笔者将会详细介绍一个转化这种人脸检测算法的自制脚本:取代原本在图像中确认是否包含人脸的做法,这种新办法会通过单纯的级联数据生成一张人脸图片。

跟其他文章一样,这篇文章的全部代码也能在GitHub下载到。

哈尔级联(Haar Cascades)
在2001年,Viola和Jones两位大牛推出了革命性的对象检测算法,这种算法基于哈尔特征级联,首次支持实时监测视频数据中的人脸(及其他对象)。

其核心在于通过一张小图片(一般是20x20)与一些预先算好的级联数据(见下文描述),返回对象是否存在的信息。之后用多个大小与位置不同的窗口使用核心算法对完整图片进行检测,区分目标与非目标:

图片描述

笔者尝试修改的就是这个核心算法。不过,如何操作呢?实际上是基于所谓的“哈尔特征”:

图片描述图片描述
图片描述图片描述

每个特征都与构成所谓“弱分类器”的阈值相关。如果用黑色区域的单个像素点总和减去白色区域的单个像素点总和,结果超出阈值的话则代表通过了弱分类器。例如,在第一张图片中,弱分类器检测到,与脸颊上方对比,眼睛周围有一片深色区域。

所有特征均由轴对齐矩形定义,采用如上图所示的基本形式之一。检测窗口使用与输出图片尺寸相同的小型网格(比如20x20)。

弱分类器组合成阶段。该阶段是否通过取决于相关的弱分类器是否通过;每个弱分类器都有相关权值,如果所有通过的弱分类器总和的权值超过了阶段阈值,那么就表示这个阶段通过了。

阶段、若分类器与相关权值通过运行训练算法来计算,可以在Viola和Jones的论文中查看更多信息。

如果所有阶段都通过

评论