人脸识别系统论文范文第四篇:基于Android系统的人脸识别考勤设计
摘要:将人脸识别技术与考勤签到结合起来,不仅在高校课堂中使用方便快捷,同时能满足稳定性和确定性等专业技术指标的要求。基于这种思想,设计并实现了一个基于Android平台的刷脸考勤系统。通过使用Face++视觉服务平台提供的信息云端处理和存储功能,处理由Android手机摄像头采集到的人脸图像数据,从而实现人脸识别和学生签到考勤的功能。
关键词: Android系统;人脸识别;课堂考勤; Face++平台;
作者简介:仝珊(1995-),女,硕士,研究方向:数据挖掘。;
1 概述
在各大高校课堂中,传统的点名方式不仅统计困难,还浪费时间,也无法解决学生代签的问题。基于上述情况,设计并实现一个刷脸考勤系统,在方便快捷的同时也能保证签到信息与出勤学生的唯一对应性。
按照MVC软件架构模式和Client/Server体系结构,开发一套基于安卓平台的刷脸签到系统,实现教师对学生信息的采集、管理学生签到信息以及考勤数据的统计等功能。后台服务器采用SSM框架开发,将项目部署在云服务器上,将学生的基本信息及考勤信息存储在服务器端,并为客户端提供Web Service.客户端通过Http协议进行网络请求,访问这些服务。上传人脸图片使用Okhttp框架,加载图片使用Glide框架,调用Face++开放平台所提供的在线API,通过人脸信息的采集以及检测,实现学生的刷脸签到。
2 相关Android开源框架
2.1 Gson
Web服务器向客户端返回的数据格式是有xml和json,安卓内部解析xml比解析json效率要低。为提高性能,客户端向服务器端请求数据时附加请求json格式的参数,在客户端使用Gson将获得的json字符串转换成Java对象。
2.2 Volley
Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient.Volley是把AsyncHttpClient和Universal-Image-Loader的优点集于一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。
2.3 Glide
Glide是Google员工的开源项目,具有获取、解码和展示视频、图片等功能。它灵活的API使开发者能够将Glide应用在几乎任何网络协议栈里。创建Glide的主要目的有两个,(1)实现平滑的图片列表滚动效果,(2)支持远程图片的获取、大小调整和展示。在系统中Glide加载图片的流程是先判断图片是否在内存缓存,再判断是否在本地缓存,两者都没有才开始网络加载图片。
2.4 GreenDao
是一个为帮助Android开发者操作SQLite数据库的开源项目。虽然SQLite数据库是一个轻量级的关系型数据库,但对SQLite的操作需要大量额外工作。GreenDao把Java对象转换成数据库表,对数据进行更新、删除以及查询获取。
2.5 OkHttp
OkHttp首先可以作为Volley底层传输协议,速度更快。其次也是最重要的一点,当上传的图片数量不确定时,若使用Xutils和KJFramework上传图片,后台接受图片的时候就要定义具体准确的图片数量,这样的方式不利于扩展。OkHttp框架在向后台上传照片时使用的是List,只要使用相同的key就可以添加到同一个List,而后台只需要根据这个key不断遍历就行,无论多少张图片都无障碍。
3 系统详细设计
设计是在Android平台下,利用Android Studio开发环境下生成App,并在Android 4.4及以上版本正常运行的刷脸签到系统。下面对Web Service和客户端分别进行介绍,并在客户端详细展开人脸样本采集和识别的详细介绍。
3.1 Web Service
Web Service的3个主要功能详细介绍如下:
3.1.1 教师登录
客户端通过输入栏获取教师输入的教师编号和密码后,点击登录按钮,客户端会发出一个请求登录的动作,服务端接收后,从数据库判断该教师编号和密码是否匹配,如果匹配成功,返回与该教师相匹配的所有信息,如果匹配失败,则告诉用户教师编号或密码错误,请重新输入。
3.1.2 通过课程选择查看学生签到记录
教师通过客户端查看某节课程考勤记录时,会向服务端发送一个请求获取考勤的动作,服务端接收后,从数据库获取该教师的所有学生和某节课程的已签到的学生,然后通过匹配对比,判断哪些学生已签到,哪些学生未签到,把数据记录如课程信息和学生的签到记录一起返回给客户端,让客户端显示。
3.1.3 通过课程导出学生签到信息表
教师通过客户端查看某节课程考勤记录的时候,会向服务端发送一个请求获取考勤的动作,服务端接收后,从数据库获取该教师的所有学生和某节课程的已签到的学生,通过匹配对比,判断哪些学生已签到,哪些学生未签到,然后使用Apache提供的开源包poi帮助生成一个Excel文件,并把Excel文件存放在服务器返回相应的下载链接,把下载链接返回给客户端,让教师可以在客户端下载Excel表格,方便对学生考勤情况进行操作。本部分代码篇幅较长,删减后的核心代码如下:
3.2 客户端
客户端部分主要分为两大模块:样本采集模块和人脸识别模块。
3.2.1 样本采集
想在Android终端应用实现人脸搜索,需要自己创建人脸样本库,所以样本采集模块必不可少。样本采集模块又可以分为两个小的部分:采集图片和图片上传保存信息。首先进行的是采集图片,然后再进行图片上传,图片上传过程中会通过Toast信息提示用户图片上传的状态。
(1)采集图片
采集图片添加新的人脸的方式有两种,一种是通过本地图库采集,另一种是通过摄像头获取图像。通过本地图库添加,利用Intent打开本地图库,选择好照片后通过setImageBitmap()方法显示。然后利用Intent (MediaStore.ACTION_IMAGE_CAPTURE)启动Android自带的摄像机应用。同时创建一个路径保存这个成员变量,对照片的命名采用"日期"+"界面输入"的方式。其中获取当前日期采用SimpleDateFormat ("yyyyyMMdd",Locale.CHINA)方法,getExternalFilesDir()是提供的App的私有保存照片的目录,本项目存储在Pictures目录下,最后通过getAbsolutePath()方法获取照片的精确路径。在照片显示之前需要对图片进行压缩,压缩后通过setImageBitmap()方法显示,并将压缩后的图片存入Pictures目录下。
(2)图片上传
图片上传实质是保存人脸特征数据,利用Face++的API,实现保存人脸数据。因此需要在Manifest.xml文件中配置向SD卡写和获取网络状态等相关权限。数据存储使用的是轻量级的SharedPreferences存储类,以键值对key-value的形式存储私有原始数据。相较数据库,SharedPreferences快捷轻便,但存数数据类型有限,且本身不能对数据进行存储,需要通过Editor对象实现对数据的写入、修改、存储。原则上SharedPreferences只能保存字符串,可以采用编码的方式将二进制数据转化为字符串,从而实现将人脸图片保存在SharedPreferences文件中。
实现人脸数据存储,调用Face++的在线API流程如下:首先调用FaceSet Creat API建立一个FaceSet,用于保存人脸数据,一个FaceSet最多可保存1000张人脸。接下来调用Detect API进行人脸检测,若检测到人脸则会返回一个face_token;然后调用Face SetUserID API设置face_token的姓名及学号;最后调用FaceSet AddFace API将face_token添加到之前建立的FaceSet中,添加人脸结束。鉴于代码篇幅较长,下面仅对DetectFace API的调用代码做简单注释。
3.2.2 人脸识别
人脸识别模块就是1:N人脸搜索,即搜索出待检测人脸属于人脸库中的哪一个人脸,这部分调用Face++的Search API,进行人脸搜索。通过摄像头提供一个实时预览界面,首先创建了CameraPreview类,设置布局,为屏幕设置点击事件,捕捉待检测人脸的照片并创建文件保存,通过与人脸库中的人脸进行比对,返回相似度最高的人脸作为输出,并显示在界面。
实时预览界面需要实现PreviewCallback这个接口,就会重载onPreviewFrame这个函数,在该函数中自定义AsyncTask类FaceDetectTask类,把复杂的图像处理过程放在后台,也就是在doInBackground里进行数据格式的转换和图片的旋转等操作。这里通过YuvImage和NV21解析数据,解析完后还需要对图像进行旋转等操作,通过matrix.postRotate()方法设置相应的旋转角度。对图像处理完后新建文件对图像进行保存,利用getExternalFilesDir ()方法将照片保存在DOCUMENTS私有目录下,命名利用SimpleDateFormat()的形式。人脸识别调用Search API,若识别成功,通过setVisibility()方法将属性设置为View.VISIBLE,显示人脸姓名的显示页面。
4 系统测试
4.1 学生信息采集功能
信息采集页面左下角有两个图标。点击文件夹图标可以进行本地图库相册的导入;点击相机图标则启动手机前置摄像头。对于摄像头拍照获取样本需要在配置文件中声明相应的权限,采集完图像后对图像进行压缩显示。右上角点击"上传"按钮,就会进行相应的上传图像的操作,将图像传至云端并将图像数据保存在本地。采集操作需要联网,上传成功会提示"添加人脸成功",若在未联网状态下进行该操作,会提示"需要连接网络".测试结果如图1采集成功和图2采集失败所示。
图1 采集成功
图2 采集失败
4.2 学生签到功能
签到页面主要由一个实时预览界面和最终显示所识别的信息显示部分两大部分所组成,先实时预览人脸图像,最后将所检测到的人脸以及学号信息进行显示。其中实时预览界面通过打开前置摄像头来进行相应的设置,并设置屏幕触摸点击事件,然后通过Toast信息显示"正在识别……"与用户进行交互。然后进行人脸搜索,搜索人脸库中哪一个人脸与带检测人脸的数据匹配认可度比较高,通过在程序中设置返回相似度最高的5张人脸数据,并将相似度最高的人脸数据信息即学号进行显示。如果没有识别出人脸数据,则会通过Toast信息显示"没有检测到人脸,请重新检测".测试结果如图3检测人脸成功和4未检测到人脸所示。
图3 检测人脸成功
图4 未检测到人脸
5 结语
基于人脸识别设计并实现一套高校课堂考勤系统,在学生考勤实践中,该系统能够稳定、快速、准确地识别出对应学生并完成打卡签到。通过对系统进行多次测试,证明了系统运行稳定,在背景条件和光照条件不太恶劣的情况下都可以达到比较好的识别效果和较快的识别速度,签到准确率较高,满足了教师对学生签到考勤管理的基本需求。
参考文献
[1]杨帆,孙琨,J永菲基于Face+ +和Android平台的考场人脸识别系统[J]电子技术与软件工程, 2014, 17:92-94.
[2]王二伟基于Android平台人脸检测与识别研究[D].西安电子科技大学, 2013.
针对传统考勤系统考勤效率低下等问题,开发了人脸识别考勤系统。该系统使用Linux操作系统,选用Qt Creator 4.3.0开发平台,使用SQLite记录后台数据库相关信息,基于OpenCV,实现了人脸识别、用户基本信息管理、人脸识别打卡、查询考勤记录等功能。...
学校实验室对学生自由开放后,采用纸质方式进行出入信息记录,管理工作较烦琐,出错率较高,因此,对学生自主进出实验室采用智能化管理十分有必要[1]....
本文旨在分析人脸识别技术的发展现况与应用优势,评估部分针对公交系统的创新提案,提出需要解决的问题并作出系列思考。...
基于人脸识别验证的方式对上课的学生身份进行核实,实现人、地、时三者合一,杜绝考勤虚假,这样就提高了学校的考勤工作的效率,减轻了教师上课的负担,真正的做到了考勤工作的高效性、及时性。...