基于ROS 系统的人脸识别算法研究

2021-01-20 08:44王增喜张庆余张苏林邵宁华
科学技术创新 2021年1期
关键词:校验肤色分类器

王增喜 张庆余 张苏林 贾 通 邵宁华

(中汽数据有限公司,天津300304)

1 概述

人脸识别在当今社会已经被广泛应用,是一项高速发展与被研究的模式识别与图像处理领域的技术。其广义上指针对某一项人体生物特征提取和识别的技术,其目的在于区分不同生物身份或个体模式。目前广义的人脸识别技术是指人脸识别系统构建所需要的一系列技术,包括人脸的图像信息采集技术、人脸图像定位技术和人脸识别信息处理技术等。本文采用单目摄像头,基本ROS 平台的集成计算机视觉库OpenCV 实现人脸识别;人脸定位的步骤包括视频数据实时获取、人脸定位、人脸校验、人脸输出等[1-3]。

2 实验平台

2.1 硬件平台

实验的平台为Ubuntu 14.04 系统下的ROS 操作系统,采用的版本为Indigo 版,其中集成了计算机视觉库OpenCV 2.0,进行人脸定位与性别识别均需要调用OpenCV 库,而且ROS 的该版本已完成了OpenCV 的配置。

2.2 ROS 的人脸定位

利用ROS 进行人脸定位的首要任务是USB 摄像头连接以及图像显示,然后通过C++程序订阅image_raw主题实时获取视频图像数据,逐帧进行处理,调用OpenCV 库进行人脸定位。如图1 所示为基于ROS 的人脸定位流程图。

图1 基于ROS 的人脸定位流程图

3 人脸定位方案

人脸定位的步骤包括,视频数据实时获取、人脸定位、人脸校验、人脸输出。实际操作为运行log_haar_person_detection.launch。具体流程如图2 所示:

图2 人脸定位的流程

3.1 视频数据实时获取

由以上可知usb_cam 发布了/usb_cam/image_raw 主题,只需订阅该主题,即可实现视频数据实时获取。详细方法请参看hog_haar_person_detection.cpp 文件。

3.2 人脸定位

本实验采用的是基于Haar-like 特征的Adaboost 人脸识别,Adaboost 为一种分类器,需先经过大样本长时间的特征提取以及训练得到特征文件.xml 文件,然后对待检测的图像进行多尺度的检测,包括特征提取与分类。最后得到被判定为人脸的区域。本实验未经过训练过程,而是采用OpenCV 已经训练好的识别率较高的haarcascade_frontalface_alt2.xml 文件。只需利用该特征进行检测即可。

3.2.1 Haar-like 特征提取与计算

对于一幅灰度图像,Haar-like 特征利用白色和黑色矩形组合成特征模板,每一种特征都是黑色矩形内的像素值之和与白色矩形内的像素值之和的差值,而计算出来的这个差值就是提取到的Haar-like 特征的特征值。Haar-like 特征值反映的是图像的灰度变化,但一般对线段、边缘较为敏感[4-6]。

为了加快特征计算,Viola 和Jones 引入了积分图。

3.2.2 Adaboost 分类器介绍

AdaBoost 是一种强学习算法,利用了迭代方法,核心思想是根据同一个训练集训练不同的弱分类器,一个弱分类器对应一个特征,将所有的弱分类器集合起来组成一个更强的分类器。算法是通过改变数据的分布实现的,算法统计每次训练结束后每个样本的分类的准确情况以及上次分类的总体分类的准确率,从而更新样本的权重。将更新完权重的新的数据传送至下一层分类器进行训练,最后将训练得到的所有分类器融合起来,作为最终的决策分类器。

简单来说,AdaBoost 分类器通过最后的多个弱分类器来投票决定最终的分类结果,但每个弱分类器所占的权重不同。算法中包含权重的更新过程,如果一个训练样本在前一层分类器中被误分,那么它的权重在下一层分类器中会被加重,同时,被正确分类的样本的权重会降低,其目的是使下一层分类器会更重视被误分的样本,从而随着新的分类器的不断增加,误识别率会随之下降。AdaBoost 强分类器的训练过程示意图,输入训练样本,通过k 次迭代生成k 个弱分类器,k 个弱分类器组合成一个强分类器。每个弱分类器对应一维特征,一个强分类器即对应多维级联的特征。

3.2.3 人脸检测

在检测的最初,检测窗口和样本大小(20*20)一致,然后按照一定的尺度参数(即每次移动的像素个数,向左然后向下)进行移动,遍历整个图像,标出可能的人脸区域。遍历完以后按照指定的放大的倍数参数放大检测窗口,然后在进行一次图像遍历;这样不停的放大检测窗口对检测图像进行遍历,直到检测窗口超过原图像的一半以后停止遍历。在检测窗口遍历完一次图像后,处理重叠的检测到的人脸区域,进行合并等操作。

3.3 肤色校验

为了降低误检概率,得到更精确的检测结果,需要对检测结果进行校验。本方法首先进行肤色校验。如果存在一个误检区域,该种情况可以通过肤色校验进行去除。

将利用Adaboost 检测的人脸区域提取感兴趣区域,获得人脸图像,对人脸图像进行肤色检测。首先统计人脸图像内的像素点总数M,将人脸图像由RGB 颜色空间转到YCrCb 颜色空间,然后获取Cr 与Cb 颜色通道的值,使得(Cb >77 and Cb <127) 且(Cr >133 and Cr <173),统计符合上述范围的像素点的个数m,利用m/M 计算肤色占整个检测区域的比例,若比例大于0.4,则进行下一步判断,否则认为该区域为非人脸,进行去除。

3.4 人眼校验

完成肤色校验后,可能仍然存在误检情况,图中包括正确检测的人脸,但还有一个肤色检测后未去除的肤色非人脸区域,因此人眼校验的目的是去除近肤色的误检区域。

人眼校验原理类似于人脸定位,也是首先提取Haar-like 特征,利用Adaboost 分类器进行识别,利用OpenCV 提供的haarcascade_mcs_lefteye.xml 文件进行识别。根据人脸区域划分图,确定人眼的检测范围。

在阴影范围内根据人脸定位的方法完成人眼定位,若该区域内检测到人眼,则该区域对应的人脸区域为真人脸,否则,该人脸区域为误检。

3.5 人脸标定

本方法将两次人脸校验后得到的人脸确定为真人脸,并将其输出,利用矩形框进行框定,并显示在视频中,完成人脸的定位。

4 结论

在人工智能、智慧城市等领域的身份认证过程中人脸识别发挥着非常重要的作用。因此,目前社会对人脸识别技术的要求在不断提高。为了加快社会的发展步伐,论文主要针对人脸检测和识别技术的算法和程序流程进行研究。首先利用ROS 进行人脸定位的首要任务是USB 摄像头连接以及图像显示,然后通过C++程序订阅image_raw 主题实时获取视频图像数据,逐帧进行处理,调用OpenCV 库进行人脸定位;通过视频数据实时获取、人脸定位、人脸校验、人脸输出;最后通过肤色校验、人眼校验和人脸标定实现人脸识别。通过实验验证该算法研究人脸识别率高,识别准确性高。

猜你喜欢
校验肤色分类器
学贯中西(6):阐述ML分类器的工作流程
使用Excel朗读功能校验工作表中的数据
电能表在线不停电校验技术
肤色(外一首)
基于朴素Bayes组合的简易集成分类器①
Conversation in a house
人的肤色为什么不同
为什么人有不同的肤色?
一种自适应子融合集成多分类器方法
基于FPGA的CRC32校验查找表算法的设计