基于FACE++和Android平台的考场人脸识别系统

时间:2022-10-27 06:16:53

基于FACE++和Android平台的考场人脸识别系统

摘 要

针对人脸识别技术在考场考生身份鉴别应用中的重要作用,在Android平台下开发一套人脸识别系统,通过使用face++视觉服务平台提供的信息云端处理和存储功能,处理由Android手机摄像头采集到的人脸图像数据,从而实现了人脸识别和考生身份鉴别的功能。

【关键词】face++ 人脸识别 身份鉴别

1 引言

考生的身份识别,一直以来都是考试中的一个重要环节。而目前,基本所有的考试中,仍然使用的是人工比对照片、身份证、准考证等传统方式。这种人工肉眼识别的方式往往效率低,出错率高。在一定程度上也是考场替考,作弊等现象屡禁不止的一个原因。随着人脸识别技术的发展,人脸识别在日常生活和众多领域中得到了广泛的应用。为了解决上述问题,许多专家已经对考场人脸认证技术做了深入的研究。例如韩琨就提出了一种在PC上使用C++语言实现的考场人脸识别技术,还有王雪立等人提出的基于数字信号处理(DSP)的人脸检测追踪技术。考试人脸认证具有准确、快速、无侵犯性、身份信息难以伪造等特点,比起传统的人工认证方式更有利于考场秩序的维护和考试公平性的保证。虽然人脸认证系统在研究上有了许多进展,但还有很多不足。例如,其一是认证设备:目前大多是采用PC外加数码照相机的方式采集和认证,但毕竟在考场外设置一台PC设备比较麻烦,受考场条件影响太大,并且资金投入高;其二是数据保存:在进行人脸采集的时候,需要保存大量的考生信息,这些信息大多保存在硬盘上,这不仅会增加购买存储介质的资金开销,在数据安全性上也存在隐患;其三,算法研发上也存在问题。人脸识别算法比较复杂,如果要想将理论上的算法转化为实际可应用的系统,还需要大量研发时间和经费上的支出。不过,现在有许多研究机构推出了一系列的计算机视觉库,可以很好地解决算法研究上的问题,比较著名的有Intel公司推出的OpenCV(开源计算机视觉库)和北京旷视科技有限公司推出的新型视觉服务平台face++。因此,鉴于以上三点问题,本文结合目前最新的face++人脸识别平台,提出一种在移动设备上可以良好运行的考场人脸认证系统。

2 系统框架

2.1 系统硬件

要实现嵌入式考场人脸认证系统,则需要一种便携、价廉、功能强大的嵌入式设备。而目前市场上流行的智能手机无疑是最好的选择。目前一台500元左右的智能手机,就已经完全符合此系统的开发要求。

2.2 系统软件

目前智能手机使用的操作系统大概分为ios,android,win8三种,android是目前市场份额最大,使用最广泛,并且配置的手机价格低廉等特点,因此本系统的运行平台采用android 4.0系统。

2.3 开发环境

android手机应用程序的开发环境很简单,本系统的开发环境使用的是window7操作系统,开发工具是eclipse,开发语言采用java,API采用android sdk和在线face++ API。

2.4 系统框架

如图1所示,整个系统分为三大模块:人脸采集模块,人脸认证模块和人脸数据处理模块。

3 系统实现

3.1 人脸采集模块

在此模块中,主要完成的工作是从手机摄像头拍摄人脸照片,然后对照片数据做格式上等适当的处理,然后将处理后的照片数据传入人脸数据处理模块,最后将人脸数据处理模块返回的结果呈现给用户。

此模块的部分核心代码如下:

public class FaceCollection //这个类就是人脸采集的核心类。

{

String result; //定义一个字符串,用来保存处理模块的返回信息。

Camera camera; //定义一个照相机对象,以此来控制设备上的摄像头。

byte[] PictureData; //定义一个用来保存照片数据的数组。

PictureManager PM; //定义一个照片数据处理对象,用来发送照片数据到处理模块

//此处还需要定义一些其他必要变量

camera.takePicture( //调用照相机对象的takePicture()方法进行拍照。

MyShutterCallback, MyPictureCallback, MyResultCallback);

// MyShutterCallback和MyPictureCallback在本系统中基本用不到,可为空。

// MyResultCallback回调函数是个重点,当获取了拍照数据后,这个回调

//函数会被调用,因此对于照片数据的获取及其发送就在此函数中。

PictureCallback MyPictureCallback=new PictureCallback()

{

public void onPictureTaken(byte[] data, Camera c)

{

PictureData=data;//保存相关照片数据

//此位置的可以编写与照片数据处理相关代码。

result=PM.collection(PictureData);//把照片数据发送到处理模块。并返回//处理结果,保

//存在字符串变量result中。

//最后将result内容返回到程序UI上,以便让用户判断

//此次人脸数据录//入是否成功。

}

} }

3.2 人脸认证模块

在此模块中,主要完成的功能就是对考生正面人脸的拍摄,然后对拍到人脸照片进行一些格式等方面的预处理,之后,调用数据处理模块的相关函数,并将需要验证的人脸数据传入数据处理模块。

此模块的部分核心代码如下:

public class FaceIdentification //此模块核心类,用来拍摄和处理需要认证的人脸

{

//此类的部分内容与FaceCollection有相同之处。而两个类最大的不同除了

//UI设计,就是在于对PictureManager不同功能的调用以及数据的传输上。

//为了节约篇幅此处仅给出部分代码。

public void onPictureTaken(byte[] data, Camera c)

{

PictureData=data;//保存相关照片数据

//此位置的可以编写与照片数据处理相关代码。

result=PM. Identification (PictureData); //把照片数据发送到认证处理模

//块。并返回处理结果,保存在字符串变量result中。

//最后将result内容返回到程序UI上,以便让用户

//本识别次认证的对象//是否合法

}

}

3.3 人脸数据处理模块

此模块是本系统的最核心模块。在前面介绍的内容里,还未涉及face++。主要是图像的采集,处理以及用户的UI。而在此模块,系统将使用face++的在线API来处理从前两个模块传入的数据。

face++是近几年逐渐兴起的,其在FDDB,300-W,LFW世界权威比赛中获得桂冠。其在人脸识别,表情识别,人脸关键点定位,多人脸识别,表情识别等诸多方面都有优秀的表现。face++的在线API是免费的,可以为本系统的开发节约大量资金。简单易用可以快速的实现识别功能。并且人脸数据在云端存储,节省了本地存储的硬件和资金开销。

face++的在线API主要由四大类组成:HttpRequests,PostParameters,FaceppResult以及FaceppParseException。其中HttpRequests,PostParameters,FaceppResult这三个类是最重要的,分别用来处理用户请求,传入请求参数以及保存返回结果。

此部分的代码比较复杂,因此只给出关键部分和解释。

public class PictureManager

{

public String collection(byte[] data) //此方法用于实现人脸录入。

{

PostParameters parameter; //定义一个请求属性的对象。

//在此处,需要根据当前的人脸功能来配置属性类内的成员变量,包括传入data数据。

HttpRequests request; //定义功能请求的对象。

FaceppResult result; //定义用于保存结果的对象。

//此处还需要对request对象做一些属性的配置。

result =request.detectionDetect(parameter); //向云端服务器传送照片并进行相关的分析处理

//在云端虽然已经保存了人脸数据,但是这不能用来识别人脸,必须要对

//云端数据进行训练,其核心代码如下。

result= request. train(parameter); //对传送到云端的人脸进行训练,但在此要//注意,//parameter需要进行许多改变,才能符合train函数的要求。

//取出result中的相关内容,组成字符串,最后为本函数的返回值。

}

public String Identification(byte[] data) //此方法用于实现人脸认证

{

//此处有部分代码和collection函数相同或类似,因此只给出最核心并且不同的。

result =request. recognitionRecognize (parameter); //配置好相关的参数parameter,并//调用recognitionRecognize函数,最终的识别结果会保存在result函数中。

//最后取出result中的相关数据,组成字符串并返回给认证模块。

}

}

4 实验与分析

当配置好实验平台并正确安装系统后,启动系统,系统即与云端建立连接;当连接建立成功时,系统显示如图2所示的登录界面。本系统的用户分为两类,一类为管理员(如教务管理员),该类用户可同时使用人脸采集功能和人脸认证功能;另一类为普通用户(如监考教师),该类用户只可以使用人脸认证功能。系统将根据用户输入的登录信息判断当前用户的类别。若是管理员,则系统会让其选择使用哪个功能模块,若是普通用户,系统将直接弹出人脸认证界面。

如果用户选择了人脸采集模块,系统将显示如图3所示界面(由于涉及肖像权等问题,本文对插图中的人脸做了马赛克处理),这时只需将手机摄像头对准待采集的人脸并点击右下角的“采集”按钮,系统就会对该人脸进行拍照并将拍摄结果传送至云端,由云端进行训练、分组等一系列操作,同时系统将弹出如图4所示界面,用户只需在该界面中输入考生的相关信息并点击“提交”按钮,就可以完成一幅人脸图像的采集工作。人脸识别界面如图5所示,用户将手机摄像头对准待识别人脸点击识别按钮,若该人脸就是由管理员用户先前采集过的人脸,则该人的信息将出现在界面下方,用户可以滚动查看,以便确定该人的身份,否则系统会给出相应的提示信息。

实验场所选取在学校教室(即考场),以白色墙面作为背景,经测试,系统运行稳定,性能良好,在普通光照条件下即可达到较高的识别率和较快的识别速度,完全能够满足学校考试时对考生身份鉴别高效、准确、快速的要求。

5 结束语

face++是当前相当好的人脸识别平台之一。由于其免费,易用等特性,很适合开发一些有关人脸图像的应用。再结合目前最广泛流行的智能手机,就可以构建出一整套解决考场考生身份认证的系统。此系统具有便携,设备投入低,识别效率高等特点,基本可以作为考场考生身份识别的有利工具。

参考文献

[1]姜荣,董军宇.人脸识别系统及其在现实生活中的应用[J].长春师范学院学报,2006,25(1):52-54.

[2]韩增锟. 基于人脸识别技术的考生身份验证系统的设计与实现[J].计算机与数字工程,2012,40(1):148-150.

[3]王雪立,关永,韩相军.基于DM642的嵌入式人脸检测与追踪系统研究[J]. 微计算机信息,2006,22(1):54-56.

[4]聂鹏鹏,王二伟,刘敏丰等.基于OpenCV在Android平台下实现人脸识别[J].电子元器件应用,2012,14(12):83-88.

[5]陶颖军.基于OpenCV的人脸识别应用[J].计算机系统应用,2012,21(3):220-223.

[6]刘子源,蒋承志.基于OpenCV和Haar特征分类器的图像人数检测[J].辽宁科技大学学报,2011,34(4):384-388.

作者单位

兰州理工大学计算机与通信学院 甘肃省兰州市 730050

上一篇:当涂广播电视城区接入网的设计及要求 下一篇:直升机中ARINC429数据总线测试系统的设计与实...