一种基于扫码认证和人脸识别的签到系统设计与实现*

2019-09-04 05:42戴瑞婷莫李思黄祉衡
通信技术 2019年7期
关键词:活体扫码人脸

戴瑞婷 ,莫李思 ,2, 黄祉衡

(1.电子科技大学,四川 成都 610054;2.中国电子科技集团公司第三十研究所,四川 成都 610041)

0 引 言

为保障会议、活动的正常开展,签到系统已经成为高校、企事业单位日常管理不可缺少的组成部分,然而,传统的人工签到方式早已经被淘汰,人们转而研究管理方便、时效性高、准确性高的智能化签到方式。近年来,应用比较广泛的是打卡签到、指纹签到、人脸识别签到等[1]。这些签到方式在一定程度上解决了人工签到的繁杂性、准确率低等问题,但仍然存在很多不足,如打卡签到并不能避免代签到的情况发生;指纹签到和人脸识别签到又因设备昂贵而使用受限,并且在会场人数多的情况下,设备携带不便、设备数量不足、签到反应时间长的问题更加凸显。针对这些问题,为保证签到的时效性、准确性,本文设计了一种基于移动终端Android系统,并融合扫码认证和人脸识别的签到系统,运用当前使用最广泛的移动手机终端作为签到终端,有效地解决了设备不足、携带不便的问题[2-3];运用二维码扫码的方式确定签到者身份,签到者注册关联个人信息,产生个人二维码供管理者扫描,管理系统扫描二维码自动验证签到者身份,验证通过者跳转到人脸识别界面,保证了身份的真实性;人脸识别阶段则包括活体检测和人脸识别,避免采用照片、视频等方式的误识别情况发生,确保签到的有效性。

1 总体设计

本文所设计的扫码人脸识别签到系统主要采用Android手机作为终端,整个扫码人脸识别分为身份认证阶段和活体人脸识别阶段,总体流程图如图1所示。

服务端可根据活动、会议要求的不同,通过导入或用户注册的方式形成参会人员数据库。签到者通过手机APP进行信息注册或关联,产生个人身份二维码,供身份认证时使用。当用户参加会议、活动时,出示身份二维码,管理者采用手机APP扫码识别端进行扫码认证,系统进行二维码解码,自动匹配数据库中该签到者信息,若匹配成功则进入活体人脸识别阶段,否则提示认证失败。人脸识别阶段主要包括人脸识别和活体检测,本文采用AdaBoost算法进行人脸识别[4],配合基于交互式随机动作的活体检测方法,确保签到者的真实性。

扫码人脸识别签到系统的网络架构如图2所示,系统包括了签到移动端、管理移动端、管理PC端、应用服务器、数据库服务器等。

图1 总体流程

图2 网络架构

移动终端Android手机作为签到移动端设备,签到APP根据签到者、管理者身份的不同,分别具有签到功能和扫码验证功能,而管理PC端具有导入用户信息、管理用户信息、统计签到情况等功能,应用服务器则负责处理二维码身份认证和活体人脸识别等业务逻辑,系统所有数据存储于数据库服务器。

2 功能模块设计

整个扫码人脸识别签到系统主要由APP客户端、管理PC端和服务端组成,APP客户端面向签到者和管理者,根据身份的不同,针对签到者权限的主要功能有:个人信息注册/关联、个人信息维护、扫码人脸识别功能,针对管理者权限的功能有扫码认证功能、签到统计功能;管理PC端主要面向管理者,具有用户信息管理、用户数据导入导出、用户信息审核、签到统计等功能等;服务端则提供扫描认证服务、活体人脸识别服务和数据存储服务,见图3。

图3 功能模块图

3 系统设计与实现

3.1 核心功能

本系统的核心功能包括扫码身份认证、人脸识别和活体检测,本文重点介绍其设计和实现方法。

3.1.1 扫码身份认证

扫码身份认证主要用于确保签到人到会议/活动现场,由现场工作人员(管理者)使用Android手机中的此APP进入扫码身份认证界面,同时签到者使用Android手机中的此APP,进入签到流程,第一步出示个人二维码,供管理者扫码认证,若管理者扫码认证成功,则签到者签到流程进入下一步:人脸识别,若失败则提示身份认证失败,并返回第一步。二维码生成流程如图4所示。

扫码身份认证的核心技术是二维码的编码与解码。本系统采用QR码对签到者信息进行封装并编码,并在签到过程中由服务器进行解码、验证工作。二维码编码首先对封装好的数据进行分析,确定编码字符类型、版本信息和纠错等级,接着采用既定规则将字符转换为位流,再将位流转换为码字,完成数据编码,再将生产的纠错码字加在数据编码后,生成纠错编码。通过加剩余位的方法,按既定规则将数据和纠错码字构造成最终信息,并按规则排列寻像图像、分隔符、矫正图形与码字形成二维码矩阵。最后,对编码区域位图掩模处理,采用8种掩模图形处理并评价结果,选择最优结果,生成版本和格式信息,构成符号,即生成最终的二维码图像。

二维码扫码认证主要由服务器完成二维码图像的解码和验证,其时序图如图5所示。

当应用服务器接收到二维码图像后,会对二维码进行解码、识别,其解码流程如图6所示。

二维码解码流程:首先,采用图像处理方法对二维码进行处理,包括识别深/浅模块、格式信息译码、确定版本、清除掩模,接着计算伴随多项式值、求错误位置多项式和错误位置多项式的根,再求出错误值并对码字进行错误纠正,从而得出二维码解码输出。

图4 二维码生成流程

图5 二维码扫码认证时序图

图6 二维码解码流程图

3.1.2 人脸识别算法

手机app使用的人脸识别技术主要细分为几个步骤。(1)人脸区域范围的查找:使用摄像头拍摄的图像为输入,判断当前图像中是否有人脸信息,如果人脸在指定的区域范围中,则标记出来。(2)人脸特征的提取:将标记出来的人脸进行特征分析和定位,并最终生成一个脸部的模型。(3)人脸检测的确认:基于该模型,检测是否为真实的人体而非图片或者视频,并与服务器的模型做比对完成确认工作[5]。

人脸区域范围的查找是人脸分类鉴别必不可少的前提环节,要对人脸图像进行分类鉴别,首先需要找到图像中的脸部区域部分。而实际中拍摄人脸图像的过程中通常会由于背景环境或焦距等因素,混杂一些非人脸、多个人脸的特征,此时需要对所拍摄图像的进行人脸区域检测来提取人脸区域,最后分类鉴别只会针对人脸部分来进行。该环节实际上就是区分出人脸部位的特征与其他非人脸物体的特征并将指定范围的人脸区域部分提取出来。人脸检测环节直接影响着人脸分类识别环节,该环节检测准确,后期人脸分类识别环节的效率和精度也会得到提高。

目前最常见的人脸定位技术是使用Adaboost算法识别[6],把所指定的区域分为若干个矩形区域,再对每个矩形区域进行Haar特征分析。

Haar特征分析也就是矩形特征分析,作为Adaboost算法的输入,Adaboost算法计算并判断出人脸的区域,将整张图像的人脸部位进行提取,将非人脸部位的部分给丢弃。人脸有着一些显著的边缘特征,矩形特征就对这些边缘轮廓比较敏感,例如当分析眼睛的时候,双眼在水平方向上和垂直方向上,眼珠的颜色会深于眼珠周围的颜色;嘴巴的颜色也是类似的,会比嘴巴周围颜色更深。矩形特征就可以更容易的锁定这些眼睛、嘴巴等人脸主要区域。矩形特征中A[-1,1]、B[-1,1,-1]算子代表的二邻接、三邻接矩形,如图7所示,通过原始矩形特征,定位人脸的主要区域。

图7 原始矩形特征

在进行人脸检测时,既需要考虑算法的运行速度,也需要考虑算法的准确度。本系统使用二维码验证后,可以获取登录用户注册在服务器上的目标样本,再通过矩形区域的方式作为登录用户特征来进行检测。

Haar特征获取完成之后,需要对Haar特征值进行计算,为了提高检测的速度,使用积分图计算特征的值是一种常用的方法。定义其积分图ii(x,y)为:

即在(x,y)位置上,对应的积分图中的像素为该位置的左上角所有的像素的之和。

每一行都递归计算z(x,y),每一行首先都是计算z,计算完毕之后在每一列都计算ii(x,y)。这样扫描下去就可以计算积分图如公式2、3所示,其中令z(x,-1)=0,ii(-1,y)=0,s(x,-1)=0,ii(-1,y)=0为 初始值。

i(x´,y´)为点 (x´,y´)处的“原始图”,是此点的颜色值;对于灰度图像,其值为0~255。对于彩色图像,可以先按照人脸彩色空间将其转化为灰度取值。

其中,z(x,y)为点(x,y)及其y方向向上所有原始图像之和,称为“列积分和”,可以定义为:并定义s(x,0)=0,ii(0,y)=0。

Adaboost算法计算和判断出人脸的区域,并提取人脸部位后,将每一次提取到的人脸部位样本训练出一个弱分类器,每次迭代中的样本比重需要由上一次来确定,第i次的样本比重由第i-1次的样本来确定。每次把分类错误的样本的权重值提高,这样可以突出分类错误的样本同时得到新的样本分布并训练得到新的弱分类器。Adaboost采用的迭代算法,简单地讲就是对训练样本进行权重重新评估后的再进行循环训练,最初的样本权重设置是一致的最终经过提升的强分类器。

Adaboost算法还采用了一种级联判断的方式,通过将多个强分类器串联起来组成一个级联分类器后,连续对输入进行判断,对于需要提取人脸的图像,如果判断出是人脸的矩形区域就让其通过当前的强分类器进入下一个强分类器,否则直接将其丢弃掉。由于串起来的各个分类器的精度要求是逐渐增加的,通过这些强分类器的层层过滤,大大的加快了分类检测的速度,而且每一级的强分类器对上一级通过的矩形区域特征再一次进行分类判断,大大减少了伪正样本的通过率,即提高了检测的正确率。

3.1.3 活体检测

检测出正确的人脸后,采用基于交互式随机动作的活体检测方法来防止签到者以照片、视频等方式冒充签到,被识别者需要通过系统给出的指示完成一些指定的动作,如眨眼、张口、摇头等。这种基于交互式随机动作的活体检测的方法就是对人脸的检测、定位、跟踪和特征提取后,再判断是否按照系统要求做出了正确的动作。需要保证可以检测到人脸的实时动作,完成对被识别者人脸的检测、跟踪和对齐;同时在指定时间内,对用户发出动作指令,被识别者的认证动作顺序不同,从而最大限度地避免活体检测被攻破的可能。如果被识别者人脸动作合法则检测通过,人脸跟踪失败或者动作验证失败均需要重新进行签到,保证被识别者无法使用照片或模型进行冒充[7]。每种动作需要在指定的时间内完成,保证动作无法事先录制好。从逻辑设计上最大限度地保证了使用的简便性和系统可靠性,本文结合活体检测手段完成对人脸检测的确认。

算法实现:首先获取到人脸位置坐标,使用AdaBoost人脸检测器检测出人脸在图像中的位置坐标信息。然后在此区域用人脸对齐算法,获取人脸五官关键点的特征点坐标:

提取给定特征点Pi∈P的SIFT特征或HOG特征:

其中,P0为算法自动提取到的人脸五官关键点的特征点初始坐标,P*为人工标定的实际人脸五官关键点的特征点坐标,ΔP为P0与P*的偏移量,H为SIFT特征提取函数。

特征点根据确定下来以后就可以通过这些特征点来估计人脸姿态。比如眼睛,使用内眼角为起点1,分别编号特征点位置1内眼角,特征点位置2眼睛上方,特征点位置3外眼角,特征点位置4外眼角,计算当前眼睛的宽度和高度来判断眼睛的状态:

其中,Pi(x)表示特征点i的横坐标值,Pi(y)表示特征点i的纵坐标值,J(P)为眼睛的高宽比例。根据J(P)可以确认当前眼睛的睁开、闭合状态。

采用人工标注方式标示人脸范围的特征点的位置,然后使用人脸检测器定位范围内的人脸框,根据已标注的人脸框坐标信息确定所有特征点的坐标平均值,如此就得到了一个平均人脸特征点的位置,将这个平均位置点记录为人脸特征点位置的初始值。根据指定的动作,取得的人脸特征点位置应该在某个阈值之内,这样眼睛和嘴巴的睁开或闭合状态都可以通过这个原理估计得出。从而确定识别者,通过验证。

3.2 系统实现

基于Android的扫码人脸识别签到系统采用Java语言实现,其中人脸检测模块与活体检测模块采用了NDK技术,结合OpenCV库[8]完成了核心视觉算法的实现,签到主要实现图如图8所示。

图8 系统实现图

图8(a)是签到者出示个人身份二维码,当管理者扫码后,系统自动检测签到者身份信息,若身份认证成功,则返回人脸信息并提示进入下一步人脸检测,即图8(b):人脸识别,此时系统调用手机摄像头获取人脸头像,并进行实时处理,计算检测到的人脸与身份认证返回的人脸信息是否匹配,当匹配值在阈值范围内时,代表人脸匹配,进入下一步:活体检测,如图8(c),通过眨眼、张嘴等随机动作的识别,检测人脸识别中的人像是否为活体,若三步都成功,则提示用户签到成功,如图8(d)所示,否则,从失败步骤跳转回签到界面,提示签到失败。

4 结 语

针对当前高校、企事业单位会议、活动签到所存在的操作繁杂、准确率低、代签频繁等问题,本文设计实现了基于扫码认证和人脸识别的签到系统,此系统采用当前流行的Android手机作为签到终端,有效地解决了签到终端设备昂贵、不易携带等问题;采用扫码身份认证与人脸活体识别相结合的方式,签到APP实现服务端扫码身份认证与终端人脸活体识别,将视觉识别核心算法移植到Android客户端,保证了多台设备并行高效处理,使签到的实时性高,双重认证的结合保证了签到的真实性、准确性。经过实现与测试,该签到系统操作方便、签到准确、时效性高,具有一定的推广应用价值。

猜你喜欢
活体扫码人脸
脐橙连上物联网 扫码便知“前世今生”
山之高
有特点的人脸
一起学画人脸
让活体肝移植研究走上世界前沿
活体器官移植,你怎么看?
基于安全加密的人脸活体检测技术
三国漫——人脸解锁
中国进入“扫码”时代
扫码看直播