基于OPENCV的桌面系统智能登录模块设计与实现

2023-08-04 05:52祁长兴
电脑知识与技术 2023年18期
关键词:窗体人脸识别人脸

祁长兴

(沈阳师范大学软件学院,辽宁沈阳 110023)

0 引言

人脸识别技术选取人的面部特征进行识别,与其他生物特征识别技术相比,人脸识别技术拥有非接触性与非强制性等优势。在桌面应用系统中,基本都会有基于安全的身份验证登录系统,而设计一个基于人脸识别的智能登录系统,将人脸识别技术与加密技术相结合,在保障用户信息安全的同时,无须每次都手动输入用户名密码进行校对,无疑会提供给用户一个更便捷的使用方式,提升用户体验[1]。

1 开发应用的技术与软件包

OpenCV 即Open Source Computer Vision Library,由英特尔公司发起并参与开发,是一款开源的跨平台计算机视觉库,可以运行在Linux、Windows 和Mac OS操作系统上。并提供对C#等语言的API接口函数,提供了计算机视觉中的常见算法实现。Emgu CV 是OpenCV 在.Net 平台下的封装库,它允许使用.Net 平台兼容的语言,如C#、VB 等使用OpenCV 提供的函数。它可以被编译运行在Windows 等系统中[2]。EmguCV 完全由基于.Net 平台的C#语言编写。在OpenCV2.4 版本后提供了一个名为FaceRecognizer 的类来完成人脸识别功能,其中EigenFaceRecognizer 继承了FaceRecognizer,并使用主成分分析法来实现人脸的识别。SQLite是一款关系型数据库管理系统,引擎并不是通过网络与客户端通信,而是作为客户端的一部分,与之在同一进程空间中运行。所以,使用SQLite数据库,可以在编程语言内直接通过编程接口操纵数据库,这使得访问速度加快,同时降低了系统的复杂度。SQLite 的数据库信息整体保留在客户机的单一文件中,这样的设计可以简化事务的实现,SQLite 引擎仅仅需要在事务开始阶段锁定数据库文件即可达到目的。

开发基于OpenCV的人脸识别模块并与桌面应用软件的登录模块融合,利用生物识别与SQLite数据库技术,充分发挥了其在图像处理与模式识别方面的优势,能够以人体生物特征为前提明确被识别人的身份信息,节省登录系统的时间并提供了操作便利[3-5]。

2 主成分分析法

主成分分析法是一种利用数学进行降维的方法,它通过众多变量的线性组合,得到若干综合变量,并以此来尽可能地表示原来变量的信息,同时这些综合变量之间并不相关。因此,主成分分析法需要找出一种方法,能通过线性变换将原先的可能具有一定相关性的变量转化为一组新的相互无关的变量,并且希望这些变量能够尽量反映原始数据的信息[5]。

主成分分析法的计算步骤:

1)原始指标数据的标准化采集p维随机向量为

其中i=1,2,...,n,n>p,构造样本阵,对样本阵元进行如下所示的标准化变换:

其中i=1,2,3,...n;j=1,2,3,...p,并且其中

可得到标准化阵Z。

2)对标准化阵Z求相关的系数矩阵:

3)解样本相关矩阵R的特征方程:

得p个特征根,来确定主成分。

计算m值,使信息的利用率达到85%以上。对每个λj,j=1,2,3,...m,解决方程组,

得到单位特征向量。

将标准化后的指标变量转换为主成分:

U1称为第一主成分,U2称为第二主成分,…,Up称为第p主成分。

4)对m个主成分进行综合评价:

对m 个主成分进行加权求和后,即得最终评价值,权数为每个主成分的方差贡献率。

在本系统中,首先将人脸图像转化为一维向量,之后对样本数据进行主成分分析,然后选择主成分生成子空间,即得到特征脸空间。识别时将预测向量做线性变换,将其投影到人脸子空间中去,然后依据其与训练样本的相似程度进行识别。

3 系统设计与实现

本系统模块在Windows 平台运行,以摄像头作为输入设备,在客户端安装有OpenCV及SQLite数据库,并与传统的登录模块的输入用户名密码的验证方式配合使用。作为在.Net平台下的一个独立应用,可以整合到其他在.Net 平台下的桌面应用系统中。系统对文件进行加密和解密操作,文件被加密后只能在本机上被解密,加密使用DES 对称加密算法,编写专门函数实现加密和解密过程,而加密密钥和解密密钥就是用户的登录密码。用户人脸数据可以被重置。用户可以自由在人脸登录和输入用户密码登录之间选择切换。通过人脸识别程序,进行机器学习后将登录用户人脸信息保存在客户端文件中,当用户登录时可以直接通过人脸识别实现用户登录。当人脸识别失败无法登录时,可以切换到输入用户名密码登录模式[6-8]。

在SQLite 数据库中设计两个表,user 表保存用户信息,settings表保存面部识别过程中的参数信息。

3.1 功能设计

系统间模块依赖图如图1,各模块的详细功能如下:

图1 系统模块分解图

1)FaceLocker.Core:提供人脸识别功能和文件加密功能的实现,系统大部分组件都依赖于它完成人脸检测和识别功能。本模块是系统中实现难度最大的一部分,模块的研发思路是向外提供三个接口,一个工厂类与一个参数类。

FaceLocker.Core模块类图如图2所示。

图2 FaceLocker.Core模块类图

FaceDetector 类实现了IFaceDetector 接口,FaceRecognizer 类实现了IFaceRecognizer 接口,FileEncoderAndDecoder 类实现了IFileEncoderAndDecoder 接口,CoreServiceFactory类实现了获得以上各接口实例的方法(内部使用BackgroundWorker 异步执行识别器的训练任务,界面上显示一个进度条,提示用户耐心等待)。

2)FaceLocker.Database:模块提供了系统数据保存与获取的接口,屏蔽了数据存储的底层实现,使得系统实现策略更加灵活。本模块实现对数据的存取功能,向外提供两个接口和一个工厂类,屏蔽了模块内的实现细节,提高了系统的可扩展性。

3)FaceLocker:模块是系统前端模块,提供与用户交互的接口与功能导航。此模块组织系统操作流程。

4)FaceLocker.ShellExtension:提供Windows 外壳扩展功能,包括上下文菜单和文件图标。本模块提供多种外壳扩展,用于将本系统与Windows资源管理器相集成。

3.2 窗体设计

图3 FaceLocker模块窗体类图

1)BaseForm窗体:相当于一个窗体容器或模板,为其他窗体(ProgressBarForm除外)提供一致的界面外观和操作体验,其他窗体在BaseForm之上实现自身功能。

2)MainForm窗体为系统主窗体,系统启动时创建并显示的窗体,用户在本窗体中进行人脸信息的采集。如果已经完成过信息采集,默认为进行人脸识别登录。用户可以在本窗体选择重置用户信息,重新进行用户的人脸信息采集。

3)LoginForm 窗体为登录窗体,初始化时输入用户和密码。

4)SystemInitialForm 窗体为系统初始化窗体,用于初始化系统后台数据,建立人脸信息与用户登录时用户名和密码之间的关联关系。

5)ChangePasswordForm窗体用于用户修改密码。

6)ProgressBarForm 窗体,用于后台执行耗时任务时,请用户耐心等待。

4 系统设定与运行

1)用户信息初始化。当系统启动MainForm 窗体时,首先进行初始化操作,包括输入用户名,密码,并进行多次的用户人脸图像采集,后台进行机器学习过程最终确认人脸信息,采集次数至少应该为10次,采集次数越多,理论上准确度越高,使用OpenCV进行人脸识别准确度可以达到99%以上。采集成功后运行后台初始化处理进程,将用户的人脸信息保存在本地SQLite数据库中[10-12]。

2)用户登录。如果已经初始化过,用户通过摄像头采集人脸信息,系统将新采集的面部信息与初始化的信息进行校验则进行人脸识别登录,如果登录失败,给出提示信息,并可以选择重新输入识别或切换到人工输入用户密码窗体登录,登录成功则进入桌面应用系统主窗体。

3)用户信息重置。用户重新采集人脸信息,并输入用户密码,也可以修改登录的密码。

初始化后建立人脸信息和登录用户的关联关系。

5 结论

本文采用OpenCV 的人脸识别的技术,主成分分析法来降维保存人脸信息。文中对实现的设计思想,功能组成,执行过程以及实现过程做了详细的阐述,程序满足了在桌面应用系统中基于人脸识别的登录,并与使用用户名和密码登录融合,实现了登录的安全控制。模块可以作为一个独立组件整合到其他基于.Net 的桌面应用系统中[13]。同时由于OpenCV 也提供了面向移动应用的接口,所以将此技术扩展到移动App中是下一步学习和实现的方向。

猜你喜欢
窗体人脸识别人脸
人脸识别 等
有特点的人脸
揭开人脸识别的神秘面纱
试谈Access 2007数据库在林业档案管理中的应用
三国漫——人脸解锁
基于类独立核稀疏表示的鲁棒人脸识别
马面部与人脸相似度惊人
基于K-L变换和平均近邻法的人脸识别
巧设WPS窗体控件让表格填写更规范
WinCE.net下图形用户界面的开发