贺鹏远,杨义涛,罗 媛,邓 磊,索美霞
近年来,无论是在国内还是在发达的欧美国家,对人脸识别的研究工作从未停止过,本作品是基于OpenCv 的人脸识别系统,人脸识别的优势在于其自然性和不被被测个体察觉的特点。
本文基于调研、分析和研究实现人脸识别功能的原理,思考人脸识别系统可能出现的问题与障碍,对人脸识别系统进行设计,主要步骤可概括为:数据收集和预处理、训练模型、人脸识别3个部分,应用的主要技术为:OpenCv,这是一种用C++语言编写、主要接口为C++的跨平台计算机视觉库。
本系统的创新点可归纳为如下5点:
1)具有非强制性:用户不需要专门配合人脸采集设备,几乎可以在无意识的状态下就可获取人脸图像,这样的取样方式没有“强制性”;
2)具有非接触性:用户不需要和设备直接接触就能获取人脸图像;
3)具有并发性:在实际应用场景下可以进行多个人脸的分拣、判断及识别;
4)符合视觉特性:“以貌识人”的特性;
5)还具备操作简单、结果直观、隐蔽性好等特点。
本系统的运行流程为:当程序运行时树莓派将本地照片中的面部图像发送至云端服务进行分析,识别出的人脸会给出face_token,用于后续的人脸比对等操作。触摸传感器触发主函数实时拍照并发送至云服务调用Search API 在Faceset 中找出与目标人脸最相似的一张或多张人脸。将比对结果发送到树莓派本地终端,提取返回结果并将其显示在树莓派终端。
当触摸开关被按下LED 闪烁,接着进行一张人脸的采集。并将此照片与已经上传的三张照片做对比。判断出相似的人脸。当相似度大于70%,则开门(电机正转开门、停止并发出警报声、电机反转关门)。
本文采用树莓派人脸识别系统,主要硬件包括:树莓派3B、电源模块、转5V 降压模块、触摸感应传感器模块、声光报警模块和驱动模块。
硬件各部分的功能概述:
1)主控模块。在本设计中主要起到集中分配的作用,不仅需要即时采集人脸图像,调用API处理图像,同时还要提供摄像头检测、驱动芯片、显示屏等数字器件的工作信号。具有超强GPU、Adreno505,识别率极高,达99.6%以上。
2)触发模块。系统的输入部分,实现人机交互。通过接收触控按键的电平信息,使得树莓派接收到数据。
3)检测模块。对人脸进行采集摄像的模块,提供最原始的图片信息。
4)驱动模块。开闭的过程控制的控制元件。
本文系统设计分为7个部分,其设计流程如图1。
图1 软件流程图
人脸识别的最基础任务是人脸检测。必须首先捕捉人脸(第1阶段)才能在未来与捕捉到的新人脸对比时(第3阶段)识别它。最常见的人脸检测方式是使用Haar 级联分类器。使用基于Haar 特征的级联分类器的目标检测是Paul Viola 和Michael Jones 2001年在论文《Rapid Object Detection using a Boosted Cascade of Simple Features》中提出的一种高效目标检测方法。这种机器学习方法基于大量正面、负面图像训练级联函数,然后用于检测其他图像中的对象。这里,本文将用它进行人脸识别。最初,该算法需要大量正类图像(人脸图像)和负类图像(不带人脸的图像)来训练分类器和从中提取特征。好消息是 OpenCV 具备训练器和检测器。如果想要训练自己的对象分类器,如汽车、飞机等,可以使用 OpenCV 进行创建。
在循环内部调用摄像头,并以grayscale 模式加载我们的输入视频。现在,调用分类器函数,向其输入一些非常重要的参数,如比例因子、邻近数和人脸检测的最小尺寸。
用上述函数检测完图像中的人脸后,对图像中的人脸进行标记,比如用蓝色矩形。除此之外,还可以加入诸如眼睛检测甚至微笑检测这样的检测器。在那些用例中,只需要把分类器函数和矩形框内加入原有的面部识别区域中,因为在区域外进行识别没有意义。
注意,在树莓派上,分类方法(Haar Cascades)会消耗大量算力,所以在同一代码中使用多个分类器将会显著减慢处理速度。在台式机上运行这些算法则非常容易。
创建一个简单的数据集,该数据集将储存每张人脸的 ID 和一组用于人脸检测的灰度图。通过运行代码,可以从每一个ID 捕捉30个样本,我们能在最后一个条件语句中修改抽取的样本数,当然也可以通过运行程序,来识别新的用户或修改已存在用户的相片。
在第二阶段中,需要从数据集中抽取所有的用户数据,并训练OpenCV 识别器,这一过程可由特定的OpenCV 函数直接完成。这一步将在trainer目录中保存为.yml 文件。
在第三阶段中,通过摄像头捕捉一个新人脸,如果这个人的面孔之前被捕捉和训练过,识别器将会返回其预测的id 和索引,并展示识别器对于该判断有多大的信心。
通过第二章节软件部分的论述,本系统通过调试树莓派系统、测试摄像头、对人脸进行检测和标记、对数据进行收集、训练,最终能实现识别功能。具体实现功能如下:当程序运行时树莓派将本地照片中的面部图像发送至云端服务进行分析,识别出的人脸会给出face_token,用于后续的人脸比对等操作。触摸传感器触发主函数实时拍照并发送至云服务调用Search API 在Faceset 中找出与目标人脸最相似的一张或多张人脸。将比对结果发送到树莓派本地终端,提取返回结果并将其显示在树莓派终端。当触摸开关被按下LED 闪烁,接着进行一张人脸的采集。并将此照片与已经上传的三张照片做对比。判断出相似的人脸。当相似度大于70%,则开门(电机正转开门、停止并发出警报声、电机反转关门)。