APP下载

基于Android系统的人脸识别门禁系统的设计

2018-11-28,,

计算机测量与控制 2018年11期
关键词:门禁系统服务器端人脸

,,

(上海工程技术大学 电子电气工程学院,上海 201620)

0 引言

21世纪是科技飞速发展的时代,科学技术已经深深影响着人们的日常生活,并给人们带来的极大便利。但是凡事有利有弊,高科技也带来了很多不安全的因素,例如使用高科技手段进行偷盗、抢劫和间谍等犯罪行为日益增多。传统门禁系统利用密码、磁卡等验证身份,已经不能满足现代安防的需求。因此建立一个具有更安全、更可靠、更便捷的身份识别的门禁系统来解决日益严重的安全问题就显得尤为重要[1]。

生物识别技术,特别是人脸识别技术以及移动开发技术的发展使得将人脸识别技术和移动开发技术应用到门禁系统中成为可能。本文主要通过研究人脸识别技术以及Android技术,并将其应用到门禁系统设备上,完成门禁系统的设计,从而实现提高门禁系统的安全性的目的[2-3]。

1 人脸识别门禁系统概述

整个门禁系统工作原理如图1所示,用户在手机客户端下载安装本文设计的门禁APP后进行注册,注册时填写本人身份信息(用户名,姓名,身份证号和手机号),并从本地上传本人清晰的人脸照片,这些数据都是由服务器保存至数据库。注册完成后登录到主界面,点击人脸识别模块,手机摄像头开启拍摄用户人脸照片上传至服务器并与保存在数据库的人脸作比对,如果比对成功服务器将会发送二维码到手机端,其中二维码中的信息就是用户的身份证号以及手机号,用户用此二维码放在二维码扫描器上进行扫描,扫描器读取到二维码的信息后传至门禁控制器,门禁控制器将此信息传送至后台服务器,服务器将此信息与数据库中保存的二维码信息作比对,如果比对成功则发送开门信号给门禁控制器,门禁控制器驱动磁力锁开门。

图1 门禁系统的工作原理图

2 人脸识别相关技术介绍

2.1 图像预处理

1)灰度化:为了使后续的图像的计算量变得少一些,需要将手机拍摄的彩色图像转变为灰度图像。灰度图像与彩色图像所描述的一样反映了整幅图像的整体与局部的色度和亮度等级的分布和特征,本文对彩色的图像进行灰度化处理直接采用的是OpenCV中的灰度算法[4]。

2)直方图均衡化:通过使用累积函数对灰度值进行“调整”以实现对比度的增强减少由于光照、噪声等因素对图像的质量的影响[5]。

2.2 人脸检测

Adaboost算法是目前最常用的人脸检测算法之一,它与与Haar特征相结合,可以将一个弱学习算法提升为一个强学习算法。Haar特征通常是由2到4个矩形组成,分别用来检测边界、细线和对角线特征。Haar特征值计算方法是白色矩形像素和与黑色矩形像素和的差值。为了减少特征值计算量,一般使用积分图来计算图像的Haar特征。通过 Adaboost 算法挑选数千个有效的haar特征来组成人脸检测器。

Adaboost人脸检测方法具体过程如下:对每个特征fj,训练成一个弱分类器:

(1)

其中:θj表示阈值,pj表示不等号的方向,x则代表一个子窗口。

为了提高检测效率,需要筛选出分类效果比较好的少量矩形特征的集合,进行T轮迭代,每轮筛选出一个分类误差最小的分类器ht。更新样本的权值,给分类错误的样本赋予比较高的权值,这样下一轮迭代中筛选出来的分类器将错误样本分类正确的可能性就提高了。在新的样本分布下,继续迭代。经过T次循环就得到T个弱分类器,将T个弱分类器按照一定的权值叠加,得到了一个强分类器。再将多个强分类器连接起来,得到了Adaboost级联分类器[6]。

2.3 人脸识别

在图像处理时,因数据量太大,通常需要降低数据的维数,但又希望保留贡献大的特征数据,而PCA就是保留主要成分的降维算法,因此本文采用的人脸识别方法是目前比较流行的特征脸方法,也被称作PCA方法,其具体过程如下。

1)首先读取训练集下指定个数的图像,将人脸像素值保存到一个二维数组中,将该数组按列排成列向量,即每一列表示一张图像的像素信息,列数代表一共有多少张人脸图像。如果有S张人脸图像,则X=[MN,S];

2)计算每一行的均值,再把每行的元素与均值相减,就得到了每张人脸与平人脸的差值,组成新矩阵X;

3)计算X的协方差矩阵C,大小为MN*MN;

4)计算出C的特征值与特征向量,共有MN个特征值,对应于MN个特征向量;

5)选择主成分,将特征值按照从大到小的顺序排列,选出前R个特征值并且这R个特征值占所有特征值比例90%以上,再将对应的特征向量按行排列,则特征空间P=[R,MN];

6)将训练集投影到特征空间,Y=PX=[R,S];

7)将测试集也投影到该特征空间,假设测试集有Q张图像,那么降维后的矩阵为[R,Q];

8)利用欧氏距离法求出每一张图像[R,1]与特征空间[R,S]最相近的一个图像,识别为该类。所有测试集完成以后,最后求出识别概率。

特征脸方法经过K-L变换后由原来的高纬度向量转换成低纬度向量子空间,达到了非常好的降维效果,简单有效,而且其运算复杂度低识别速度快,同时易于实现,识别率高,在人脸识别这一块得到了广泛的应用[7]。

3 人脸识别门禁系统设计

本文设计的人脸识别门禁系统分为硬件系统和软件系统,主要由移动手机端、门禁端和后台服务器端构成。移动客户端采用Android系统的移动设备,主要进行人脸注册、人脸识别和获取二维码;门禁端主要功能是扫描用户二维码,接收来自服务器端的身份验证信息和控制开关门;服务器端主要是进行人脸照片图像识别,发送二维码给用户手机端,并且接收门禁端发送来的二维码,并验证用户二维码中的信息成功后,发送开门的指令。

3.1 硬件系统

硬件系统主要包括移动客户端设备(主要是Android手机),服务器和门禁端设备。门禁端设备有:二维码扫描器、门禁控制器、磁力锁和电源箱, 其中门禁端设备功能如下:

二维码扫描器:负责将读取的二维码中的信息传送给门禁控制器处理。

门禁控制器:是门禁端的核心部件,负责整个门禁端输入、输出信息的处理和存储、控制,并且与服务器端进行通信。

磁力锁:与门禁控制器相连,是门禁系统的执行部件,系统通过对二维码权限的判断,决定是否打开门锁。

电源箱:与门禁控制器相连,负责整个系统的正常供电。

3.2 软件系统

3.2.1 系统总体模块结构

本软件系统由前台移动客户端软件,后台管理员端软件组成,主要功能模块包括注册登录模块、人脸识别模块、获取二维码以及管理员模块,系统总体模块结构如图2所示。

图2 系统总体模块结构图

3.2.2 系统各模块的功能

移动客户端软件在Android开发平台上,采用Java语言进行开发,与服务器端软件的通信采用Web Service。本文设计的门禁APP主要提供用户注册(包括用户身份信息的注册和人脸信息的注册)、登录、人脸识别以及获取二维码的功能。

后台服务器:服务器端采用MVC设计模式进行设计,将系统分为模型层、逻辑层和表现层,主要负责进行图像的人脸识别,用户身份验证,与客户端和门禁端进行通信。

3.2.3 人脸检测与识别模块的设计

人脸检测与识别模块的功能主要是对检测到的样本图像进行预处理(灰度化、直方图均衡化)、人脸检测、特征提取以及识别,整个模块流程图如图3所示。

图3 人脸检测识别模块流程图

3.2.4 数据库设计

本系统设计的数据库有三张表,分别是用户信息表、人脸信息表和二维码信息表,用户信息表中的字段有用户id、用户名、姓名、身份证号和手机号,人脸信息表字段有用户id、图片对应路径和分配的人脸图片编号,二维码信息表字段有用户id、身份证号和手机号。本系统采用的数据库为SQLServer,访问数据的操作由服务器端完成,服务器端通过JDBC与数据库连接,进行数据库访问。移动客户端通过SQAP协议调用Web Service与服务器端进行数据的交互,服务器端接收到调用命令后,进行相应的处理并将处理的结果返回给客户端。

4 基于Android人脸识别门禁系统实现

4.1 硬件系统

硬件系统采用ACM68-LAN系列门禁控制器、中控多门控制电源箱、MCM-MS100系列二维码扫描器和280 KG双门磁力锁,以及Android手机。

4.2 软件系统

4.2.1 开发环境的搭建

本文设计的门禁APP软件是采用Android技术进行开发,Android应用程序是用Java语言进行开发的。因此,在Windows系统下,需要安装Android Studio开发环境。

由于本应用程序中涉及到大量的图像处理,本文采用JNI技术,实现在Java程序中调用外部的C++代码,以完成相应的功能,例如调用人脸识别相应的算法。在Android平台下,要实现这样的功能,需要安装和配置Android NDK[8]。

4.2.2 OpenCV的应用

OpenCV是Intel资助的开源计算机视觉库,它主要由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。它可以在Linux操作系统上和Windows操作系统上运行,现在也支持Android操作系统环境开发。本文采用的很多图像处理就是调用了OpenCV的相应函数,本文下载的是OpenCV-3.2.0-Android-sdk版本[9]。

4.2.3 用户注册模块的实现

注册页面的设计,用户初次登录门禁APP需要进行注册,本文人脸图像选择的是本地获取的方式,在获取到人脸图像后,程序首先对图像进行处理(灰度化、直方图均衡化),再对处理后的图像进行人脸检测并将人脸图片显示在界面,如图4,同时服务器将图片保存在某个目录中并将文件路径和分配的编号保存至后台数据库的人脸信息表中由管理员统一管理。人脸检测是直接通过Java端调用detectMultiScale函数来完成的,检测前需要将OpenCV目录下的cascade文件加载,先将这个xml文件放在Android工程项目的raw文件夹下,程序运行的时候就将这个文件写入到该apk运行时创建的项目文件夹中,然后利用OpenCV自带的cascade加载器对这个训练文件夹进行加载,加载成功后把这个文件删除。用户填写好身份信息后点击注册按钮,服务器端首先接收到用户身份信息将其保存至后台数据库中的用户信息表,再从数据库的人脸信息表中读取到所有图片的路径和编号来进行训练,最后保存训练模型方便下次直接调用,其中训练函数都是写在JNI层,由Android NDK编译成动态链接库,再通过java端来调用,训练部分主要函数如下。

Ptrmodel=createEigenFaceRecognizer();//建立特征人脸识别器;

model->train(images,labels);//训练人脸图片,labels:标签,

model->save(“Train_model.xml”);//保存训练模型,供下次直接调用[10]。

图4 注册界面

4.2.4 人脸识别模块的实现

点击人脸识别按钮,会进入拍照界面(如图5所示),系统调用内置相机程序,对返回的照片传送到JNI层进行处理(灰度化、直方图均衡化),处理好的图片传送到JNI层的识别函数进行识别,识别时首先将图片传送给矩阵,然后加载保存的训练模型,最后返回一个整数值,此时如果返回的整数值对应于训练模型中的那个label,服务器将根据这个label到后台数据库的用户信息表将这个用户的身份信息回显到手机端界面(如图6所示),当用户点击获取二维码按钮便可得到服务器发送过来的二维码(如图7所示),二维码中的信息就是用户身份证号与手机号以及对应的用户id,同时服务器将二维码中的信息保存至数据库的二维码信息表中,二维码将作为刷码开门的标识。其中识别函数如下。

Jint*cbuf=env->GetIntArrayElements(buf,0);//获取传递过来的人脸图像;

Mat pic(h,w,CV_8UC4,(unsigned char*)cbuf);//传递给矩阵;

Ptrmodel=createEigenFaceRecognizer();//建立特征人脸识别器;

model->load(“Train_model.xml”);//加载保存的训练模型;

Int predict=model->predit(pic);//预测人脸[10];

图5 人脸识别界面 图6 识别结果

图7 获取二维码

4.2.5 服务器端的实现

服务器端采用JavaEE编程,通过JDBC与数据库连接,进行数据库访问。移动客户端通过SQAP协议调用Web Service与服务器端进行数据的交互,服务器端接收到调用命令后,进行相应的处理并将处理的结果返回给客户端。本文后台服务器主要负责对移动客户端发送过来的命令进行处理,比如将用户身份信息保存至数据库、接收用户人脸注册照片训练并存放到指定文档、接受用户登录照片进行人脸识别以及授权发送二维码。

4.3 测试结果分析

为了验证本文实现的基于 Android的人脸识别门禁系统的性能指标,本文采集了40张不同的人脸建成人脸库进行训练测试,采集设备是华为P9,系统版本EMUI4.1兼容Android6.0,CPU八核华为麒麟955,内存3G。系统测试结果如表1所示。

以上的结果表明,在Android系统上本设计达到了预期设计标准,有较好的人脸识别率和实时性,样本中大部分的人脸图像都有着正确的识别,但是由于人脸识别率受所处环境的光照、人脸表情和肤色相类似的背景以及拍摄角度等因素影响,所以会有一定的错误率。

表1 系统测试结果

本文采用人脸识别技术和移动开发技术设计了基于Android系统的人脸识门禁系统,为一些高安全等级场所提供安全保证。在安全性方面,采用了人脸识别和二维码双重验证,大大增加了门禁系统的安全性,为智能门禁提出了新方案。测试结果表明:本系统具有良好的易用性、安全性,并且识别速度快识别率高,弥补传统门禁的缺陷与不足。

猜你喜欢

门禁系统服务器端人脸
基于多种生物特征识别的RFID门禁系统设计
有特点的人脸
一起学画人脸
Linux环境下基于Socket的数据传输软件设计
基于AI智慧人脸门禁系统的硬件系统设计
基于单片机的安全门禁系统研究设计
三国漫——人脸解锁
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
门禁系统专利技术综述