首页 » 刷脸背后:人脸检测 人脸识别 人脸检索 » 刷脸背后:人脸检测 人脸识别 人脸检索全文在线阅读

《刷脸背后:人脸检测 人脸识别 人脸检索》4.1 CNN Facial Point Detection人脸检测算法

关灯直达底部

CNN Facial Point Detection人脸检测算法,是由Yi Sun等人[1]在2013年提出的。该算法主要是实现面部关键点的检测,运行速度快、执行效率高,可以检测侧脸。但如果一张图片被检测到多个人脸,那么在执行面部关键点检测前需要手动处理,比较烦琐。此外,由于Yi Sun等人只提供了算法的.exe可执行文件(只能运行在Windows平台上),所以本部分的实验只能在Windows操作系统上运行,更多内容可以参考文献[2]。本书提供的程序是调用文献[2]中的Face detector程序的可执行文件,并进一步处理。在本部分,我们实验的主要功能是人脸检测,不考虑面部关键点检测。

4.1.1 CNN Facial Point Detection人脸检测算法的使用

该算法需要在Visual Studio上配置OpenCV视觉库才能运行,本书实现的程序是在Visual Studio 2010和OpenCV2.4.9上进行测试的,该项目对应的名称为:facedetect_ windows。

打开facedet_winds.sln后,还要进行一些配置修改,具体如下。

· 在项目上单击鼠标右键,选择“属性”→“配置属性”→“VC++目录”→“包含目录和库目录”进行修改,修改为自己计算机的OpenCV对应的路径。

· 如果你使用的不是OpenCV2.4.9,则还需要在项目上单击鼠标右键,选择“属性”→“配置属性”→“连接器”→“输入”→“附加依赖项”进行修改。

检测图片在code_face/image文件夹下。

检测结果在result/文件夹下。

读者可根据实际情况,修改存放检测图片和检测结果的路径。

修改存放检测图片的路径:将code_face/imagelist.txt的内容修改为检测图片的路径和图片名,第一行指定检测的图片个数,接下来每一行是一个检测图片的路径。

修改存放检测结果的路径:修改detect_windows.cpp的filename。

选择主函数facedection.cpp,按“F5”键或者单击“运行”按钮,就可以使用CNN Facial Point Detection人脸检测算法进行人脸检测。

4.1.2 CNN Facial Point Detection人脸检测算法的原理

Yi Sun等人提出的算法本质上是检测面部关键点的,检测出左眼中心、右眼中心、鼻子尖、嘴部左角和嘴部右角,使用了三层卷积网络。为了检测效果的准确性和鲁棒性,在第一层使用整个面部区域的所有信息进行特征提取,从而得到较准确的初始估计位置。第二、三层是对初始的估计位置进行调整,达到更高的准确率。它和许多商业软件及最新算法进行对比,获得了很好的检测结果。

CNN Facial Point Detection人脸检测算法主要包括两部分,第一部分是使用人脸检测器检测人脸,标记出边界框,即文献[2]中的Face detector;第二部分是以边界框作为输入检测出面部关键点的位置,即文献[2]中的Point detector。本书中使用该算法的第一部分进行人脸检测。

我们在主函数facedection.cpp中,通过如下语句调用code_face的可执行文件,进行人脸检测。

生成bbox.txt文件,该文件中每一行包含:图片名及对应的人脸检测框。每个人脸检测框由四个数据组成,分别对应left、right、top、bottom。然后读取bbox.txt文件,对每张图片进行人脸标记。

4.1.3 CNN Facial Point Detection人脸检测算法的检测结果

经过测试发现,无论检测图片的尺寸大或者小,该算法的运行时间都较短,检测效果好、噪声少,同时可以检测侧脸,但不能很好地检测如图3-4(e)所示的那类图片。遗憾的是,作者仅公开了可执行程序,而源程序并未开源。在图4-1中,我们呈现了一些有代表性的图片的检测结果。

图4-1 CNN Facial Point Detection人脸检测算法的检测结果