2. 数字化纺织服装技术教育部工程研究中心, 上海 200051
2. Engineering Research Center of Digital Textile and Fashion Technology, Ministry of Education, Shanghai 200051, China
虹膜识别广泛应用于门禁、边防、金融等安全级别较高的领域, 仅少数高端手机拥有虹膜解锁功能, 因此, 虹膜识别技术在大众生活中并未普及, 拥有广阔的市场前景。在互联网时代, 异地、多设备、多网站、多账号登录成为一种趋势, 目前网上用于验证身份的方法主要有手机短信、二维码、账号密码等方式, 然而, 手机需要随身携带, 账号密码容易泄露。虹膜识别技术正在从固定设备向移动互联网方向发展[1], 并且网站虹膜登录是采集用户虹膜信息的适合的使用环境, 大范围推广可以促进虹膜基础信息库完善。根据国际网络科技发展态势, 制定和实施“网络身份证”制度势在必行[2], 随着虹膜技术的迅速发展, 虹膜信息已被公认为是准确率最高的生物特征之一, 因此, 虹膜识别有望成为未来网络身份鉴定的一种有效方法。由于虹膜技术使用便捷, 安全可靠, 因此本文通过在浏览器端开启虹膜登录方式, 设计一种基于B/S架构的高并发虹膜识别系统。
1 系统设计系统总体架构如图 1所示, 用户通过浏览器使用特制摄像头扫描虹膜, 并向云服务器发送Ajax请求, 云服务器通过计算返回用户匹配信息。本文使用SaaS云服务架构[3], 因为所有数据处理全部交由云服务器完成, 用户仅需借助服务接口而不需要安装任何软件就能实现在线检测虹膜、便捷登录的目的, 所以要求服务器能够在短时间同时接收多个用户处理和识别请求, 并在最短时间内从众多数据中搜索出匹配对象。因此, 从占用资源和执行效率角度考虑, 在服务器部署上应采用并发服务器中的多线程并发服务器[4]。
![]() |
Download:
|
图 1 系统总体架构 |
实验主要的目标使用场景为日常使用电脑环境, 采用特制摄像头作为主要采集设备。为提高采集图像质量, 本文做了如下2点改进:
1) 相比自然光, 近红外光对虹膜组织有较好的反射效果, 能使得虹膜纹理清晰可见, 所以在摄像头前添加红外光源。
2) 由于普通摄像头拍摄视场较广, 拍摄内容除了眼球等有效信息, 还会拍摄到鼻子、眉毛、背景等干扰信息, 为解决该问题, 在摄像头前加一个遮光层[5](见图 2、图 3)以消除外部杂散光对成像的干扰。
![]() |
Download:
|
图 2 添加红外光源的摄像头 |
![]() |
Download:
|
图 3 添加遮光层的摄像头 |
用户与摄像头交互需要通过Web界面, 这涉及到前端技术。界面设计使用Bootstrap+Jquery, 主要目标是实现在网页上调用摄像头, 提供用户虹膜定位框, 对获取图像进行初步优化, 减轻后端数据处理压力, 用户操作流程和操作界面如图 4、图 5所示。
![]() |
Download:
|
图 4 用户注册流程 |
![]() |
Download:
|
图 5 用户注册界面 |
人眼图像由白色的巩膜、中心黑色的瞳孔以及占比65%环状色带的虹膜三部分组成, 其中虹膜保存有大量独特信息, 是识别过程中主要的提取信息。
识别过程主要分为4个部分, 分别是获取虹膜图像、对图像进行预处理、虹膜特征提取、匹配与识别, 如图 6所示。现阶段对于虹膜定位[6]有基于灰度梯度、二值化边缘点、粗定位和精定位相结合等方式。特征提取和匹配算法有Gabor滤波、拉普拉斯金字塔、小波变换过零检测、Harr小波分解、局部过零检测等。本文算法基于开源识别软件OSIRISV4[7]。
![]() |
Download:
|
图 6 虹膜识别流程 |
虹膜分割是将虹膜纹理和其他元素(如睫毛、阴影)分离, 为之后的特征提取和模板匹配提供良好的处理区域, 并且生成一个二进制掩码用来指明哪些像素属于虹膜纹理。为提高精度, OSIRISV4对分割做出了优化, 使用Viterbi算法找到对应虹膜轮廓最佳路径, 这条路径是由高梯度值的点围起来的闭合的曲线。Viterbi算法被用在如下的2种分辨率模式:
1) 在高分辨率模式下, 所有像素点都被用来搜索轮廓借以提取精确轮廓;
2) 在低分辨率模式下, 在噪声处(如睫毛、眼睑)使用更少的点检索轮廓来得到较为粗略的轮廓。
2.2.2 归一化优化OSIRISV4摒弃OSIRISV2中使用2个非同心圆拟合虹膜边界的Daugman模型[8], 其使用圆来拟合边界, 但这个边界是通过低精度的Viterbi算法找到的粗略边界, 并且使用最小二乘法来拟合圆圈。由于最小二乘法对离群点具有敏感性, 粗糙的轮廓在阻塞区域包含更少的噪声点, 这将有助于除去更多无用点。
2.3 特征提取优化OSIRISV4通过Viterbi算法找到精确轮廓, 然后使用适应性过滤器移除睫毛以及其他阻塞物, 如阴影和镜反射, 它仅对像素做简单分类, 判断是虹膜区域或非虹膜区域。这两步搭配使用得到效果比单纯使用精确轮廓效果有较大提升。
2.4 模板匹配模板匹配是虹膜识别最后一个阶段, 此时判断两张图像是否来源于同一张图像, 并计算出两张模板差异度得分, 得分越低代表越相似, 当低于设定的阈值时, 认定两张图像来源相同。
3 网络处理成熟的识别原理需要相关网络技术来连接用户图像获取端和系统处理匹配端。
3.1 后台技术 3.1.1 云服务器云服务器又称云主机, 与传统服务器相比拥有按需付费成本低、性能稳定、宽带独享、管理方便、多级备份、部署快速、扩展能力强等优点[9]。本次实验使用腾讯云服务器作为本文的硬件平台, 硬件配置为1核2 GB, 所有代码均存于此台云主机上, 通过Xshell5远程登录进行操作。
3.1.2 Django框架Django是Python语言编写的全栈式Web框架[10], 选择Django作为后端框架的原因如下:
1) 自助管理后台非常完善, 无论是从前期测试的便利性还是后期的数据维护角度上考虑, 使用拥有完善的后台管理系统Django框架, 将大幅缩短在数据查看和修改方面的时间。
2) 通过自带ORM基本不需要写SQL语句, 每一条记录就是一个对象, 读取对象中数据简单快捷。
3) 扩展APP十分方便。
4) 错误提示明显, 快速准确定位bug, 明显提升效率。
3.1.3 Nginx+uWSGI的高并发性Nginx是一款轻量级反向代理和Web服务器, 拥有内存消耗低、并发能力强、处理请求异步非阻塞的优点, 支持高达50 000并发连接响应。在硬件配置较低、要求并发处理需求高的客观情况下, 与Apache相比, Nginx是本次高并发虹膜识别方案的最佳选择[11]。uWSGI是用C语言实现WSGI协议的对开发人员友好的服务器, 但是如果和Nginx搭配使用, 它的作用仅是按照网络层传输协议监听网卡端口以及收发HTTP协议的数据。
3.1.4 HTTPS加密传输HTTPS就是在HTTP协议基础上添加SSL安全套接层, SSL使用40位关键字作为RC4流加密算法对数据进行加密传输[12]。由于在Web界面使用摄像头并进行数据传输需要HTTP协议支持, 否则摄像头开启失败, 因此还需要向云服务提供商——腾讯云购买SSL证书, 开启443端口, 并配置Nginx自动将80端口转发为443端口, 这样就可以保证任何访问形式都被重定向HTTPS访问。
3.2 云服务器框架结构云服务器框架如图 7所示, 后端框架基于Django, 使用MVT架构。为保证数据安全传输, 使用base64格式对虹膜信息进行加密传输[13], 首先通过Nginx定位服务器集群, 然后根据Uwsgi进行地址转发, Django对收到请求进行Url匹配找到对应视图函数, 视图函数调用虹膜算法, 将有效的图像处理后放入MySql数据库。算法执行完毕后, 视图返回模板信息和计算结果并通知用户处理成功。
![]() |
Download:
|
图 7 云服务器框架结构 |
为测试多用户同时访问虹膜系统所能承受的压力, 本文通过编写脚本来模拟在高压环境下, 计算任务处理的效率。
4.1 多任务处理图像多进程在处理多任务时具有进程间相互独立数据不共享与多进程可以充分利用CPU多核的特点[14], 这符合用户之间不互通、用户处理并发的需求, 要实现这类多进程需首选进程池。进程池拥有一次开启占用资源少、对总进程数未知情况下兼容性更好的优点。并发处理流程如图 8所示, 用户请求按照先后顺序排在队列中, 进程池开辟5个(最优数量与硬件有关)并发处理进程, 当一个用户请求被处理完毕后将结果存到MySql数据库中, 并释放进程池给下一个用户处理。
![]() |
Download:
|
图 8 多任务并发处理流程 |
多线程实现多任务有线程间数据共享与Python多线程只能利用单核(由于存在GIL)的特点, 多线程在处理I/O密集型任务时效率较高。多线程模型如图 9所示, 用户请求存于队列之中, 开启多线程, 每个线程的任务都是不断地从请求队列中提取用户请求然后执行处理, 并将处理结果逐一存放到处理完毕用户队列中, 之后再从该队列中提取出来逐一存放到MySql数据库中。
![]() |
Download:
|
图 9 多线程模型 |
为了测试2种模型以及线程数或进程数对执行效率上的影响程度, 采用100组真实用户虹膜信息作为测试集。从图 10实验结果可以看出, 在硬件条件为单核时, 多线程和多进程对执行时间无多大影响, 但是多线程平均处理速度是要高于多进程的。当硬件升级为双核时, 多进程和多线程效率均提升明显, 当线程或进程数为2时提升效率接近50%, 之后增加线程或进程数对运行时间影响不大, 总体线程和进程之间无较大差异。当硬件继续升级为4核时, 多进程和多线程效率均仍有提升, 当线程或进程数为4时提升效率接近15%, 之后增加线程或进程数对运行时间影响不大, 总体线程和进程之间依旧无较大差异。
![]() |
Download:
|
图 10 2种模型运行时间对比结果 |
通过对比可知, 对于单核CPU最好使用多线程, 对于双核甚至四核CPU, 无论是线程还是进程, 对于像虹膜识别系统这种既是I/O密集型又是运算密集型的操作, 在执行效率上差别不大。决定执行效率最关键因素是硬件配置, 图 10清晰地反映出无论是线程还是进程, 对于硬件改变所对应的效率提升变化趋势是相同的。它们都是在硬件配置为双核, 线程或进程数为2时效率最大, 在硬件配置为四核, 线程或进程数为4时效率最大。至于四核提升效率远低于双核的原因是测试机采用超线程[15]技术, 非真四核, 所以有理由推断使用真八核CPU在8线程(进程)时执行效率依旧会有较大提升。
4.2 图像匹配效率测试由4.1节可知, 代码执行效率与实际硬件相关, 基于测试机为四核CPU的实际情况, 此次采用4线程(进程)进行并行搜索匹配虹膜。采用图 8和图 9所示的基本方法, 只是在细节稍作优化, 匹配示意图如图 11所示。经过处理后所有注册用户唯一识别码将存于虹膜数据库中, 为检测用户6是否匹配于数据库中某张虹膜, 需要对数据库进行快速搜索和匹配运算。
![]() |
Download:
|
图 11 并行搜索模型匹配示意图 |
由于多进程在数据上不共享, 最优与最差时间复杂度相同, 因此选择多线程作为虹膜搜索的首选方案。经过多次实验, 在使用单线程时遍历搜索数据库约需19.6 s, 使用四线程遍历需要约4.9 s, 效率提升75%。在使用四线程基础上, 如果某个线程找到用户6, 理论上此时所有线程应该停止, 而非遍历所有数据之后停止, 为达到该目的, 在所有线程中添加findFlag标志位, 即所有线程进行检测该标志位, 当某个线程匹配成功后返回匹配用户并立即修改该标志位状态, 其他线程发现findFlag状态改变便停止搜索。经过多轮测试, 在使用标志位后匹配最优时间复杂度减少约为O(1)=0.5 s, 效率提升90%, 最差时间复杂度O(n)=4.9 s保持不变(由用户数据量决定)。
4.3 图像匹配准确性测试识别成功率指测试用户与计算的匹配用户是为同一人的正确比率, 准确率指某一用户虹膜与数据库存储的该用户多张虹膜上匹配成功的比率, 精度为匹配成功时相似度, 值越小越相似, 当小于0.32时可以认为是同一个人。表 1进行了4组测试, 每组100位用户。从成功率可知该系统在高并发状态下依旧能够正确识别用户, 从识别准确率、精度可以看出, 系统准确率平均能够达到71.75%, 精度平均在0.175左右, 能够满足日常登录需求。
![]() |
下载CSV 表 1 脚本测试结果 |
为最大程度地模拟真实使用环境, 本文选择在普通办公室、阳光下、昏暗的走廊等3处地方对5名测试人员进行虹膜注册和识别, 注册环境统一为办公室, 数据库存在200位虚拟用户作为干扰对象, 每位测试人员在每个环境下分别进行4次识别, 共计20次, 并使用秒表记录识别时间(从点击开始到登录结束的时间)。从表 2可知, 不同场景下光强对识别准确性造成了巨大影响, 其主要问题是在摄像头获取虹膜阶段出现光源亮度不可控问题, 如果能在虹膜获取阶段采用分辨率更高、焦距更短, 并且自带光源的密闭虹膜采集仪器, 则此实验结果在不同环境下的鲁棒性会更高, 在表 2中, 场景成功率=单个场景总识别正确次数/20。
![]() |
下载CSV 表 2 真实环境识别结果 |
本文通过搭建B/S架构实现一种高并发虹膜识别系统。在浏览器端使用原生JavaScript引擎调用摄像头硬件, 同时使用优化的虹膜摄像头, 将整个虹膜识别系统和Django框架部署到云服务器上。在此基础上, 对整个系统进行测试, 根据多进程和多线程并利用多核来提高处理速度。实验结果表明, 该系统能够显著提高处理效率, 缩短搜索最优时间复杂度所需要的时间, 使得总体最优与最差搜索效率得到大幅提升。
[1] |
李海青, 孙哲南, 谭铁牛, 等. 虹膜识别技术进展与趋势[J]. 信息安全研究, 2016(1): 42-43. ( ![]() |
[2] |
颜丹平. 北京应率先实行网络身份证制度[J]. 北京观察, 2015(5): 36. DOI:10.3969/j.issn.1008-1208.2015.05.013 ( ![]() |
[3] |
TSAI W, BAI Xiaoying, HUANG Yu. Software as a service:perspectives and challenge[J]. Science, 2014(5): 5-19. ( ![]() |
[4] |
乔平安, 颜景善, 周敏. 基于Linux系统的构建高性能服务器的研究[J]. 计算机与数字工程, 2016, 21(5): 630-634. ( ![]() |
[5] |
刘冠驰.基于Zynq FPGA SOC的虹膜识别系统[D].上海: 东华大学, 2017.
( ![]() |
[6] |
尚睿. 虹膜识别技术的最新进展综述[J]. 电脑知识与技术, 2015, 25(5): 1296-1300. ( ![]() |
[7] |
OTHMAN N, DORIZZI B, GARCIA-SALICETTI S. OSIRIS:an open source iris recognition software[J]. Pattern Recognition Letters, 2016(82): 124-131. ( ![]() |
[8] |
PENG Zhiyong, WANG Hongcheng, WU Jun, et al. An improved daugman method for iris recognition[J]. Wuhan University Journal of Natural Sciences, 2015, 20(3): 229-234. DOI:10.1007/s11859-015-1086-9 ( ![]() |
[9] |
杨青峰. 云计算时代关键技术预测与战略选择[J]. 中国科学院院刊, 2015, 30(2): 148-161. ( ![]() |
[10] |
薛耀伟.基于Django框架管理界面自动生成模块的设计与实现[D].哈尔滨: 哈尔滨工业大学, 2014. http://cdmd.cnki.com.cn/Article/CDMD-10213-1015022551.htm
( ![]() |
[11] |
凌质亿, 刘哲星, 曹蕾. 高并发环境下Apache与Nginx的I/O性能比较[J]. 计算机应用系统, 2013, 22(6): 204-208. ( ![]() |
[12] |
赵国峰, 陈勇, 王新恒. 针对HTTPS的Web前端劫持及防御研究[J]. 信息网络安全, 2013(3): 15-20. ( ![]() |
[13] |
王芳, 白宇. 基于JavaScript的轻量化BASE64编码及解码算法[J]. 软件, 2015, 36(4): 24-27. ( ![]() |
[14] |
肖明魁. Python语言多进程与多线程设计探究[J]. 计算机光盘软件与应用, 2014(15): 66-67. ( ![]() |
[15] |
金惠芳. 比较分析CPU超线程技术与双核技术的异同[J]. 计算机应用与软件, 2011, 28(12): 293-294. DOI:10.3969/j.issn.1000-386X.2011.12.085 ( ![]() |