视频演示:
基于人脸识别的门禁系统设计_哔哩哔哩_bilibili
PPT汇报:
基于人脸识别的门禁系统设计PPT汇报_猫猫爱吃小鱼的博客-CSDN博客
参考代码来源:
Python 3 利用 Dlib 实现摄像头实时人脸识别 - coneypo - 博客园
《人机交互与界面设计》课程报告
基于人脸识别的门禁系统
20
2
1
-202
2
(1
)
提交日期
____
2021年12月 31日
_____
随着社会经济的快速发展,人民生活水平的不断提高,群众的安全防卫意识也逐步提升。由此,人们对安全防卫系统的要求越来越高。如何利用新的技术手段设计更加可靠的安防系统,增加居民生活的安全感,成为安防研究领域关注的焦点。其中,作为整个安防系统设计的重要组成部分,门禁系统以其所具备的智能化、自动化等特点,深得大多数用户的青睐。
传统门禁系统的身份验证方式主要有口令、密码、磁卡等,然而这些验证手段与用户具有可分离性,容易被破译和盗用,已不能完全满足现代安防理念。传统校卡进出的方式会存在忘带卡、冒用卡等方式带来的管理问题。而人体的生物特征具有唯一性, 且与本体不可分离;若应用于门禁系统可以弥补传统门禁系统的不足。
人脸是具有唯一性的生物特征,而人脸识别技术是通过采集人脸图像,提取图像中的人脸特征从而实现身份识别。由于操作简单、结果直观等特点,人脸识别技术广泛应用于信息安全、出入口控制等领域。大学校园人员流动性大,人员身份复杂,学生安全意识相对薄弱,学生的财产安全及学生宿舍管理问题亟待解诀,因此我们针对学生宿舍设计并开发了人脸识别门禁系统。
为了有效地解决学生宿舍门禁系统存在的突出安全问题,提高学校的学生宿舍的管理能力,提升学校安防系统的信息化、智能化水平,引进人脸识别技术,大大提高学生宿舍安全
和
管理效率。因此结合学校宿舍的现状以及存在的问题,本建设方案主要解决以下关键性问题。
-
1、解决外来人员混入学生宿舍的问题;
-
2、保证出入安全便捷问题;
-
3、方便学校管理学生,快速便捷的查询
宿舍楼内的学生
信息;
-
4、为学校各相关职能部门提供数据服务功能。
应用目标
:
-
1
、
防止外部人员混入宿舍内;
-
2
、
减轻宿管人员繁重的工作压力;
-
3
、
方便学生安全快捷的进出宿舍;
-
4
、
方便学校保卫处、后勤处
等部门
管理学生宿舍,为学生营造良好的安全的住宿环境,实现平安校园的目的。
系统需求:
1.系统录入学生人脸及姓名学号等信息,并可由管理员进行管理;
2.图像采集设备获取学生的人脸图像;
3.对采集到的人脸图像进行预处理、特征提取等过程,产生访客人脸特征数据;
4 .将访客的人脸特征数据逐个与人脸数据库的数据项进行匹配。若匹配成功,则由控制设备向电控锁发送开门指令。否则保持门锁处于闭合状态,并提示错误信息。
数据需求
:
1.管理员账号、密码
2.学生人脸、姓名、学号、寝室号
交互需求:
1.管理员模式显示所有学生信息及选中学生的人脸
2.识别时显示摄像头实时采集到的图像与识别到的本地人脸图像,识别到的人脸标注姓名
3.识别后用信息提示框显示识别结果
4.选择身份、录入人脸、识别人脸后语音提示
编程语言:python
编程环境:Anaconda jupynotebook + python3.6
-
pyqt5 制作GUI界面(工具 qt designer)
图1 PyQt
简单介绍;
QT原本是诺基亚的产品,源码用C++写的,
PyQt5是基于图形程序框架Qt5的Python语言实现,由一组Python模块构成。Pyqt5可以
跨平台,根据系统决定本地显示效果,pyqt5与qt的函数接口一致,qt designer开发函数非常丰富,控件丰富,函数方法多,拖曳布局,操作方便,改变样式表,即可改变外观,此外,qt生成的文件还方便打包成二进制文件。
下图为运用pyqt5模块生成的界面:
图2 运用pyqt5模块生成的界面
① 开发迅速,qt designer拖曳布局,如果使用代码布局还需要构建全局并且调试
②学习经验容易迁移到pyside来开发商业应用
③ 方便打包发布软件,python本身解释语言的特点是写好的程序不编译和链接,使用文本运行解释器,边解释边执行,用户不可能装一个解释器再发源码再执行,所以打包成exe再发布。
使用qt designer 做出gesture.ui界面后,再python里面运行这段代码,即可将页面控件相关信息生成python代码 main.py
图3 运行界面代码生成python代码
本次系统设计中,按钮交互较多,同时运行的线程过多,导致pyqt5卡顿严重,
在使用pyqt开发界面时,遇到了一种情况,就是在点击按钮之后,响应函数中会启动一个循环,该循环会一直执行,然后就造成界面无响应对于执行很耗时的程序来说,由于PyQt需要等待程序执行完毕才能进行下一步,这个过程表现在界面上就是卡顿,而如果需要执行这个耗时程序时不断的刷新界面。因此在主要识别界面中,我们使用tkinter制作界面。
图4 Tkinter模块
Tkinter
简单介绍
:
python内置的GUI框架,使用TCL实现,python中内嵌了TCL解释器,使用它的时候不用安装额外的扩展包,直接import,跨平台。不足之处在于UI布局全靠代码实现,只有15种常用部件,显示效果简陋。
历史最悠久, Python 事实上的标准 GUI , Python 中使用 Tk GUI 工具集的标准接口,已经包括在标准的 Python Windows 安装中,著名的 IDLE 就是使用 Tkinter 实现 GUI 的创建的 GUI 简单,学起来和用起来也简单。
①最为简单,
②自带库,不需下载
③安装,随时使用,跨平台兼容性非常好
④则是从需求出发的,Python 在实际应用中极少用于开发复杂的桌面应用,
缺点:
只有15种控件,界面相对简陋许多,函数类也不丰富
-
dlib 人脸识别库
-
图5 人脸识别模型
dlib简单介绍:一个机器学习的开源库,包含了机器学习的很多算法,使用起来很方便,直接包含头文件即可,并且不依赖于其他库(自带图像编解码库源码)。Dlib可以帮助您创建很多复杂的机器学习方面的软件来帮助解决实际问题。目前Dlib已经被广泛的用在行业和学术领域,包括机器人,嵌入式设备,移动电话和大型高性能计算环境。
需要调用dlib实现的功能:
1)将人脸信息向量化
需要多张人脸信息,调用dlib的自导模型,题图特征
图6 dlib的自导模型,题图特征
2)人脸识别 识别人脸,匹配
图7识别人脸并匹配
④logging 辅助运行
日志的作用:
①在部署项目时,不可能直接将所有的信息都输出到控制台中,我们可以将这些信息记录到日志文件中,这样不仅方便我们查看程序运行时的情况,也可以在项目出现故障时根据运行时产生的日志快速定位问题出现的位置。
②日志是一种可以追踪某些软件运行时所发生事件的方法。软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情。一个事件可以用一个可包含可选变量数据的消息来描述。此外,事件也有重要性的概念,这个重要性也可以被称为严重性级别(level)。
本次设计主要用于输出提示信息。
⑤O
penCv
OpenCv是一种集成的图像处理的工具,其实OpenCv本身也带有很多复杂的算法,也自带人脸识别,但是其效果不太好,因此我们最终选择dlib专业处理人脸的模块,但还是需要OpenCv打开摄像头,截取视频流,并在画面上输出文字。
4.1两种角色
本次设计中一共有两种角色的用户,分别是学生和管理员。
管理员权力:
①查询学习基本信息
②修改、删除学生信息
③录入学生人脸
学生功能:
①配合录入人脸
②作为被识别对象,系统判断是否进入寝室
学生数据字典如下:
表1 学生数据字典
名称
|
学生基本信息
|
来源
|
学生、系统采集
|
描述
|
记录学生的基本信息,用于学生身份确认,学生信息查询和修改
|
定义
|
学生信息=学生学号+学生姓名+学生寝室信息+学生人脸信息
|
位置
|
学生人脸识别界面(作为结果)、管理员查询界面
|
4.2界面模块设计
根据功能需求,我们的整体模块设计如下:分为学生模块和管理员模块,
学生模块主要涉及识别人脸,进入门禁系统;入住前配合录入人脸信息。
管理员模块的权限会比较多,一些最基本的例如查询学生的基本信息和图片,修改学生的信息(考虑到更改寝室楼的情况),删除学生的信息(该学生毕业或搬出寝室),登录系统协助同学录入人脸信息,使用管理员功能录入人脸信息主要还是考虑到了系统的安全性和学生隐私的安全性。
图8 系统界面模块设计
各部分的功能描述如下:
表2 各界面模块功能
界面名称
|
功能描述
|
角色选择界面
|
选择角色是管理员还是学生,学生:跳转到人脸识别界面,管理员:管理员登陆界面
|
管理员登录界面
|
输入管理员的账号及密码进行验证,验证成功,跳转到管理员功能选择界面,否则报错
|
管理员功能选择界面
|
选择查询学生信息或者录入人脸信息
|
管理员查询、修改学生界面
|
加载学生基本信息及人脸信息,可以实现修改、删除等操作。
|
管理员录入学生信息界面
|
主要是录入人脸、学号姓名等信息,增加学生,将其基本信息保存到库中。
|
学生人脸识别界面
|
学生实现人脸识别,识别成功则发出语音提醒,以及成功对话框提醒,同时显示该学生的基本信息,大门打开;实现错误的话,提示错误语音信息以及错误对话框提醒。
|
4.3人脸识别功能设计
人脸识别的流程如下图,简单拆分为人脸录入和人脸识别两个流程,人脸录入需要学生的全部脸部信息都可以被摄像头捕捉,要求脸部无遮挡,系统内部会自动获取学生的人脸特征向量,存入学生信息库,用于匹配人脸信息。人脸识别则把摄像头中的人脸和库中已标记的人脸特征进行匹配,显示人脸识别的结果。
图9 人脸识别流程
4.4初步低保真模型
图10,图11是我们设计的低保真模型,在设计的时候没有考虑添上添加界面间的关联关系,存在缺陷。界面跳转关系如下:
首先是首页,选择个人身份,我是学生或者管理员;
管理员跳转到管理员验证登录界面,身份验证成功即可对学生的信息,进行管理。
学生则直接进入门禁系统的人脸识别模块,无论失败或成功均给出语音和信息框的提示。人脸识别时实时进行的,但是需要按按钮才能实现与门禁系统的交互,系统判断人脸信息是否安全,决定是否开放大门。
图10 低保真模型(1)
图11 低保真模型(2)
人脸识别的困难之处
-
不同个人之间的区别不大:大部分人脸的结构都很相似,甚至人脸器官的结构外形都很相似。
-
人脸的外形很不稳定:人的面部表情多变,不同的观察角度、光照条件等都会影响人脸的视觉图像。
图12 人群中人脸检测
人脸检测(Face Detection):人脸检测用于确定人脸在图像中的大小和位置,即解决“人脸在哪里”的问题,把真正的人脸区域从图像中裁剪出来,便于后续的人脸特征分析和识别。
Dlib自带许多机器学习算法,可以较好的解决问题,本实验主要涉及有以下这几种
-
深度学习Deep Learning
-
传统的基于SMO的支持向量机用于
回归
-
用于大规模
分类
和
回归的Reduced-rank methods
-
用于
分类
和
回归的推荐相关向量机
-
通用
多类分类(
工具
-
一个
多类SVM(
Multiclass SVM)
-
用于
序列标记(
sequence labeling
)的
结构SVM工具
-
用于图像中
物体检测
结构
,
SVM工具以及用于
物体检测的
更强大(但更慢)的
深度学习工具
-
用于
标记
图中
节点的
结构SVM工具(
labeling nodes
)
-
一个大规模的
SVM-Rank
实现
-
在线核化的
质心估计器(
centroid estimator
)
/新颖检测器和离线支持矢量
一类分类器(
one-class classification
)
-
聚类算法:
线性
或
核k-means
,
Chinese Whispers聚类
和
Newman聚类
。
-
多层感知器
①人脸识别的模型介绍
-
dlib中的shape_predictor_68_face_landmarks.dat模型
如下图所示,该模型将人脸分为64个监测点,左图是这68点在人脸模型上的分布:
图13 监测点在人脸模型上的分布
下图是一张示例人脸图根据这个模型检测出的结果,监测点信息会显示在人脸上:
图14 示例人脸图检测结果
人脸特征表示是人脸识别中最为重要的一步,它接受的输入是标准化的人脸图像,通过特征建模得到向量化的人脸特征,最后通过分类器判别得到识别的结果,概要图如下所示:
图15 人脸特征表示概要图
2.
另一
种常用模型shape_predictor_5_face_landmarks.dat 。
检测5个人脸特征点,即双眼的眼头及眼尾以及鼻头这五个位置,因为这检测5个点,所以执行速度很快,但是缺点是准确度会有所下降,不适用于需要严格检测人脸的场景,例如人脸支付等。
5个关键点的分布如下所示:
图1
6 5
个关键点的分布
右图是检测出的效果,由图可知,这5个关键点分布在左右眼和鼻孔处,匹配的关键信息会比较少。在要求没有那么苛刻的场合,可以方便快速地进行人脸检测。
②人脸识别网络详解(残差网络
resnet
)
在本次实验中,我们首先尝试的是
OpenCv中提供的基于haar特征级联进行人脸检测的方法
,
这种算法对称性较好,在人脸增加、人脸角度倾斜、两张人脸相似度较高的情况下,这个算法的
效果不好,
这个模型主要采用的是卷积神经网络,
图像分类存在的问题:
当
神经网络的深度逐渐加深,其表现会越来越好,例如AlexNet、VGG等,但实际操作过程中,直接将神经网络的层级结构加深,会出现网络退化现象。
普通的神经网络,几乎很难实现恒等映射,即训练一个网络让他输入和输出相等是很困难的。网络退化现象区别于梯度消失、梯度爆炸,也区别于过拟合现象。梯度消失现象指的是训练中无法收敛,过拟合现象指的是训练中表现好而测试中表现不好
,
所以为了更好地实现人脸识别,dlib采用的是残差网络结构
下图是残差网络与普通卷积网络的结构对比
:
图 17 残差网络与普通卷积网络的结构对比
普通的卷积网络与深度残差网络的最大区别在于,深度残差网络有很多旁路的支线将输入直接连到后面的层,使得后面的层可以直接学习残差,这些支路就叫做shortcut。传统的卷积层或全连接层在信息传递时,或多或少会存在信息丢失、损耗等问题。ResNet 在某种程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络则只需要学习输入、输出差别的那一部分,简化学习目标和难度,缓解了在深度神经网络中增加深度带来的梯度消失问题 。
②
人脸信息提取过程
图18 提取人脸信息四个流程
人脸识别按顺序可以大体上分为四个部分,即人脸检测,人脸对齐,人脸校验和人脸识别。 人脸检测就是在一张图片中找到人脸所处的位置,即将人脸圈出来,比如拍照时数码相机自动画出人脸,主要通过人脸边缘特征提取。分割出图像中的人脸,本次实验我们可以采用dlib.get_face_chip()来分割人脸
人脸对齐就是在已经检测到的人脸的基础上,自动找到人脸上的眼睛鼻子嘴和脸轮廓等标志性特征位置。人脸对齐开始时,我们要先构造一棵GBDT(决策树),通过这棵树,将人脸的初始形状回归到其真实形状上去(这是测试时的目的,训练时,也就是构建树时我们是知道其真实形状的,那么目的自然就是用GBDT来表示初始形状和真实形状的关系)。当我们把N张图片都输入这第一棵树,自然每一张图片最终都会落入其中的一个叶子节点。在构造第二棵树之前,我们要把每张图片的当前形状做一个更新,也就是要将当前形状更新成:当前形状+残差。对应到第一棵树,即是初始形状加上残差,这样每一张图片的当前形状就从初始形状变成了初始形状加残差,距离真实形状又更近了一步。
人脸矫正就是对检测出来的关键点,做仿射变换。很多情况下,人脸和我们的检测平面不是完全平行的,一般都会存在一个倾斜角度,因为我们的模型属于实在正脸上的检测,这个角度会影响关键点的检测精度。人脸识别就是给定一张脸,判断这张脸是谁。仿射变换就是将检测到的人脸图像进行旋转变换,主要通过对像素点的数学矩阵变换来实现。
③代码实现流程及关键代码
执行速度很快,但是缺点是准确度会有所下降,不适用于需要严格检测人脸的场景。
人脸录入的流程如下图的左图,先获取摄像头捕捉的视频流,保存多张照片到本地中,有利于人脸特征的提取,利用shape_predictor_68_face_landmarks.dat、dlib_face_recognition_resnet_mdel_v1.dat对照片中的当前帧进行人脸检测,提取人脸的128D的特征向量,并保存到features.csv文件中。人脸识别的流程如下图的右图,先获取摄像头捕捉的视频流,对当前帧进行人脸检测,计算当前人脸的128D特征。再与库中的features向量,计算它们之间的欧式距离,找到小于阈值的,则算匹配成功。
图19 代码实现流程
下图代码为在当前帧中应用dlib的特征点检测和人脸识别模型,并获取它的描述人脸的128维向量。
图20-1 关键代码(1)
图20-2 关键代码(2)
在实时识别摄像头中的人脸时,需要找到人脸的位置,我们使用质心追踪来人脸,再进行欧式距离的计算,如下图代码所示:
图21 关键代码(3)
找出最小的欧式距离匹配,若小于阈值则匹配成功。代码如下图所示。
图22 关键代码(4)
2.界面跳转:
1.按钮触发跳转界面或者关闭界面
涉及的主要的知识就是给按钮的点击事件增加动作。
在初始化时使按钮关联函数,在具体的函数实现中,运行我们需要跳转的界面。例如:
初始化():
self.pushButton_2.clicked.connect(self.input_face)
def input_face(self):
enter_face.main()
图23 pushButton_2按钮
点击
pushButton_2按钮
(录入学生信息),即跳转界面学生人脸信息录入的界面,添加 self.colse()函数,即可在跳转时关闭原有的界面。
用时需要注意跳转的界面需要在原函数在import,.py文件的位置放置也有要求,工程量大不大的情况下,尽量在同一目录下。
图24 文件目录
2.多事件并行进行,使用thread.。
因为有许多操作是要并行进行的,例如人脸检测和查询该人的信息,匹配库内的学生基本信息,为了提高运行速度,所以我们的初步想法是使用多线程程序,在一个.py文件中写多个线程,同时start(),各自运行,通过改变全局变量来实现线程之间信息的传递。
线程开启语句(写在主函数中):
这样写线程在
thread(target=main1).satrt()
thread(target=main2).satrt()
thread(target=main3).satrt()
初步运行的时候,在初步界面跳转的时候是很流畅的,但是在点击按钮触发事件时,程序就会卡死。
图25 未响应
如上图所示,界面卡死,框体中显示“未响应”信息,接着整个程序就会自动退出,系统关闭。这样的设计时不符合我们的要求的,线程的本义就是为了防止卡死程序。
卡死的原因如下:
点击按钮,可能会触发耗时的程序,耗时的操作会独占系统cpu资源,如果不能及时结束,主线程将会阻塞,这样界面就会出现未响应的状态。
解决方案:
1.使用子线程。但是创建子线程效果并不是很大,依然会出现界面未响应的状况。
以PYQT5界面为例(C++代码):
class MyThread : public QThread
{ Q_OBJECT
protected:
void run();
void MyThread::run()
{ ...
2.不必要不使用太多的线程结构,尤其是在按钮事件上。在按钮事件触发函数中添加操作,运行速度虽然没有这么快,但是不会出现界面卡死的状况。
3.对多线程的函数进行优化,这一方法难度较大,由于时间有限,所以未能实现。
3.信息的存储:
整个系统需要存贮学生的基本信息(学号,姓名,寝室楼层)和学生的人脸信息,对于一个应用系统,最好就是存储在数据库中,可存储的容量非常大,易于管理,也有一定的安全防护性,主要体现在以下几个方面:
1) 数据库可以结构化存储大量的数据信息,方便用户进行有效的检索和访问。数据库可以对数据进行分类保存,并且能够提供快速的查询。例如,我们平时使用百度搜索内容时,百度也是基于数据库和数据分类技术来达到快速搜索的目的。
2) 数据库可以有效地保持数据信息的一致性、完整性、降低数据冗余。
可以很好地保证数据有效、不被破坏,而且数据库自身有避免重复数据的功能,以此来降低数据的冗余。
3) 数据库可以满足应用的共享和安全方面的要求,把数据放在数据库中在很多情况下也是出于安全的考虑。
4) 数据库技术能够方便智能化地分析,产生新的有用信息。
常见的数据库有MySQL,SQL SERVE
图26 MySQL,SQL SERVE
简单介绍Python连接数据库的方法:
pyton连接数据库需要先安装pymysql模块:pip install pymysql
安装完成后导入pymysql模块:import pymysql
python连接数据库主要分五个步骤:
step1:连接数据库
step2:创建游标对象
step3:对数据库进行增删改查
step4:关闭游标
step5:关闭连接
在成熟的学生应用系统系统中,学生的基本信息都是存在一个数据库里,但是考虑到python连接数据库的复杂性且我们的系统运用的局限性,最终还是使用CSV文件来存储学生的关键信息。CSV文件是存储表格数据的常用文件格式。其文件以纯文本形式存储表格数据(数字和文本)。stud_information存储学生基本信息,features_all存储学生的脸部信息。
图27 存储文件
加载CSV文件实例代码:
def loadCsv(self, fileName):
with open(fileName, "r",encoding='UTF-8') as fileInput:
for row in csv.reader(fileInput):
items = [
QtGui.QStandardItem(field)
for field in row
self.model.appendRow(items)
修改CSV文件实例代码:
def writeCsv(self, fileName="stud_information.csv"):
fileName="stud_information.csv"
with open(fileName, "w",encoding='UTF-8',newline='') as fileOutput:
writer = csv.writer(fileOutput)
for rowNumber in range(self.model.rowCount()):
fields = [
self.model.data(
self.model.index(rowNumber, columnNumber),
QtCore.Qt.DisplayRole
For columnNumber in range(self.model.columnCount())
writer.writerow(fields)
CSV使数据交换更容易,也更易于导入到电子表格或数据库存储中。
运行结果:
首页界面:供用户选择身份,用户身份分为学生,和管理员,通过鼠标点击选择。
图27 首页
管理员登录界面:
图 28管理员登录界面
管理员功能选择界面:
图29 管理员功能选择界面
管理员查询学生信息界面:
图30 管理员查询学生信息初始界面
图31 管理员查询特定学生信息
管理员录入学生信息界面:
图32 管理员录入学生信息界面
学生应用门禁系统界面:
图33-1 学生应用门禁系统界面
多张学生人脸同时识别:
图33-2 学生应用门禁系统界面
开门成功:
图34 学生允许进入
开门失败:
图 35 学生不允许进入
①按钮交互
按钮设计是用户界面中主要的交互基石,按钮作为引流,提升产品数据的重要节点:
图36 按钮设计
按钮吸引用户的地方,只需简单的触摸,就能获得处理事件的满足感。即使很多新家电和其他设备都进化为了触屏操作,实体按钮却并没有完全消失,其塑造的行为习惯仍然影响按钮设计的直观性和易用性,也是实现跳转界面,关闭界面的主要方法。本次大作业中添加了许多的按钮来满足系统用户的需求。
① 按钮的多种状态:
设计正确的交互和样式,对按钮设计十分重要。按钮每个状态必须可识别,要显著区别于其他状态和周围的布局,但是也不能完全改变组件或者制造视觉混乱。
图37 按钮的六种状态
六种状态解释如下:
- 1.普通状态:可交互和可用的状态。
- 2.焦点状态:用户使用键盘或其他输入方法来突出显示一个元素。
- 3.悬停状态:用户把光标置于可交互元素上的状态。
- 4.触发状态:用户已点击按钮后的状态。
5.加载状态:当操作没有立即实现时,表示正在进行的状态。
- 6.禁用状态:按钮目前不可交互,但以后可以使用。
- ②按钮的多种样式
最常见的是圆角按钮,可以轻易识别,并且在输入字段旁边看起来不错。为按钮选择正确的样式,取决于目的、平台和规范。以下是一些最流行的样式:
图38 按钮样式
③不同样式的优先级
样式最初是用来区分操作的优秀级。明确操作的优先级,可以在众多的选择前,引导用户。通常,要有一个突出的按钮(主按钮),几个二级按钮,还有三级按钮。
④有时不需要默认按钮
通常,把最常用的按钮设置为“默认”(使用主样式)和选中的状态。这样可以帮助大多数用户,更快完成他们的任务,引导正确的方向。
此外,当选择同等重要时,或者操作存在危险,在这些情况中,需要用户明确按钮的选择而不是意外选择。
例如下面这个界面,就不合适设置默认按钮,重置会使文本框内容清空,确认会马上核对用户信息,默认记住密码则会危害管理员信息的安全性。
图39 管理员登录界面
⑤一致性提高效率和准确性
一致性提高速度和准确性,避免错误。创建可预测性可以帮助用户获得掌控感,在产品中实现他们的目标。在创建主要、二级和三级样式时,尝试找到一些共同的元素,比如:色彩、形状等。尝试不仅对设计的系统保持一致性,对平台也要保持一致性。本次系统设计中我们主要选择蓝色为基调色,不管是背景还是框体=图都选择蓝色,又使界面统一,又使用户眼部舒适。
⑥ 按钮的文案
按钮文案和样式一样重要。使用错误的文案,会让用户困惑,浪费时间,也会误操作。
一个好的按钮文案,可以引导用户操作。最好使用动词,告诉用户在做什么。就像这个按钮在询问用户,“你想收藏吗?”或者“你想确认命令吗?”
避免使用“是”或“不”,或者太通用的,比如提交。
例如在关闭界面是提示“你是否确定要退出?”
②界面交互
人机界面是人与计算机之间传递、交换信息的媒介和对话接口,是计算机系统的重要组成部分。它实现信息的内部形式与人类可以接受形式之间的转换。凡参与人机信息交流的领域都存在着人机界面。系统和用户之间进行交互和信息交换的媒介, 它实现信息的内部形式与人类可以接受形式之间的转换。凡参与人机信息交流的领域都存在着人机界面。
从心理学意义来分,界面可分为感觉(视觉、触觉、听觉等)和情感两个层次。用户界面设计是屏幕产品的重要组成部分。界面设计是一个复杂的有不同学科参与的工程,认知心理学、设计学、语言学等在此都扮演着重要的角色。用户界面设计的三大原则是:置界面于用户的控制之下;减少用户的记忆负担;保持界面的一致性。
要求开发者做到界面的统一,符合人的认知心理学、设计学和语言学。
本系统中提示语言都比较简洁明了,减少了用户的记忆负担和理解难度。
界面设计应该考虑以下原则:
1、以用户为中心的基本设计原则
在系统的设计过程中,设计人员要抓住用户的特征,发现用户的需求。在系统整个开发过程中要不断征求用户的意见,向用户咨询。系统的 设计决策要结合用户的工作和应用环境,必须理解用户对系统的要求。最好的方法就是让真实的用户参与开发,这样开发人员就能正确地了解 用户的需求和目标,系统就会更加成功。
我们的系统根据用户的需求设定两种角色,并且完善了不同角色的界面设计。
2、顺序原则
即按照处理事件顺序、访问查看顺序(如由整体到单项,由大到小,由上层到下层等)与控制工艺流程等设计监控管理和人机对话主界面及 其二级界面。
3、功能原则
即按照对象应用环境及场合具体使用功能要求,各种子系统控制类型、不同管理对象的同一界面并行处理要求和多项对话交互的同时性要求 等,设计分功能区分多级菜单、分层提示信息和多项对话栏并举的窗口等的人机交互界面,从而使用户易于分辨和掌握交互界面的使用规律和 特点,提高其友好性和易操作性。
不同的功能实现按钮跳转界面,比较方便,操作性强。
4、一致性原则
包括色彩的一致,操作区域一致,文字的一致。即一方面界面颜色、形状、字体与国家、国际或行业通用标准相一致。另一方面界面颜色、 形状、字体自成一体,不同设备及其相同设计状态的颜色应保持一致。界面细节美工设计的一致性使运行人员看界面时感到舒适,从而不分散 他的注意力。对于新运行人员,或紧急情况下处理问题的运行人员来说,一致性还能减少他们的操作失误。
5、频率原则
即按照管理对象的对话交互频率高低设计人机界面的层次顺序和对话窗口莱单的显示位置等,提高监控和访问对话频率。
6、重要性原则
即按照管理对象在控制系统中的重要性和全局性水平,设计人机界面的主次菜单和对话窗口的位置和突显性,从而有助于管理人员把握好控 制系统的主次,实施好控制决策的顺序,实现最优调度和管理。
7、面向对象原则
即按照操作人员的身份特征和工作性质,设计与之相适应和友好的人机界面。根据其工作需要,宜以弹出式窗口显示提示、引导和帮助信息 ,从而提高用户的交互水平和效率。
在用户退出时,给出提示,是否退出,避免用户不小心点到按钮,导致需要重新登录。
页面设计需要体现易憧、简单、实用的基木 原则,充分表达了以人为本的设计理念。
③声音交互
语音提示可以用来播报产品信息,安全提示性语句,门铃音乐或警报声音的工具,在信息传播上有很广泛的使用。
本次系统中我们也在重要地方设计了些语音的提示:
在学生需要进门,系统已经识别出人脸时点击查询按钮(功能类似进门),若该同学是这栋楼内的学生,给出语音提示:验证通过,请进门。
图40 验证通过界面
若该同学不是这栋楼内的学生,给出语音提示:验证失败,请重新验证。
图41 验证失败界面
在用户登录系统时,提示用户选择自己的身份,给出语音提示:请选择身份
图42系统主界面
门禁系统中我们只应用了语音提示的交互,开始设想时是想实现声控式交互的交互,声控制式交互、触控交互和视觉交互方式的优缺点如下表:
表3 声控制式交互、触控交互和视觉交互方式的优缺点
主要优势是:
1.输入更高效。
研究结果表明,语音输入比键盘输入快3倍。如果你从解锁手机到设置闹钟需要两分钟,直接说一句话设置闹钟,可能只需要10秒钟。
2. 感官和精力占用更少。
一张嘴,将人的双手、眼睛从图形界面交互中解放出来,想象一下当你手握方向盘时,说一句话就直接接听电话、播放音乐,是无疑更方便也更安全。腾出来的感官,意味着可以并行处理其他任务,理论上有更高的效率。
3.语音交互拥有克服现存“收缩桌面”式的移动UI固有缺陷的能力
主要通过从有声语言输入中精准地推断用户意图。
原本的低保真模型设想通过声控来选择用户身份,声控实现人脸识别和学生查询,考虑到多线程的运行和系统的复杂性,还有环境影响导致识别精度降低。实际上,语音交互的技术依然存在巨大挑战,还很难在复杂的环境和不确定的情景下,真实的理解用户的行为和意图。语音交互的可靠性随环境的变化会受到影响。例如,一个患上感冒的人有可能被错误的拒认而无法使用该语音识别系统。同时还有许多其它因素影响其准备性,比如说,声音样本的质量、情绪、背景噪音以及随着时间推移声音的变化等。
所以只应用了语音提醒。
我们在初步设计时,本来只设计了学生进门和录入人脸的这两个功能,缺少作为一个人机交互的设计,人机交互是指人与计算机之间使用某种对话语言,以一定的交互方式,为完成确定任务的人与计算机之间的信息交换过程,所以后续我们又充分分析了门禁系统的需求,设定了两个身份来应用该系统。
总体上来说,dlib自带的人脸识别库识别精度和识别速度都是很可观的,我们本次还尝试了自己手机自带的人脸识别模型(识别速度快,很多可能是5个关键点的模型),因为我和组员是双胞胎,所以我们的人脸向量化结果相似度是比较高的,我们在手机上录入自己的人脸,用人脸信息来解锁手机,发现对方的脸也是可以解锁的,(作为对照,我们也试过其他同学的人脸,发现手机自带的模型相对还好,基本不会识别出错,除非是我和组员的情况,我们人脸相似度过高。)但是我们测试本次设计用的dlib模型时,测试出来,大多数情况下,这个算法是不会把我们混淆的,说明算法精度还是不错的,至少比部分手机好。
本次设计还存在一个缺陷就是,因为我们人脸识别之后是存在一个开门动作,所以我们这还设计了按键开门时,会将检测到的学生信息输出,如果多张人脸存在,系统就会检测出多个结果,对我们查询学生信息来说是不利的。还有就是本次只是一个软件的模拟,实际上,开门等等是要经过较精确的硬件设计,这里其实也存在一个人机交互过程,所以本次实验设计距离实际应用还有很大提高空间。
基于Python的人脸识别门禁系统是一种利用Python编程语言和相关的图像处理库、人脸识别库等技术实现的门禁系统。它可以通过摄像头捕捉人脸图像,使用人脸识别算法来识别人脸,进而判断该人是否有权限进入某个区域或设备。该系统可以实现自动化门禁控制,提高门禁管理的安全性和便利性。
该系统的主要功能包括人脸图像的采集、预处理、特征提取、人脸识别、门禁控制等。其中,人脸图像采集可以通过摄像头进行实时采集;预处理包括图像的缩放、裁剪、灰度化等处理;特征提取则是从图像中提取出有用的特征信息,如人脸轮廓、眼睛、嘴巴等;
人脸检测与识别是计算机视觉与模式识别领域中重要的基础研究课题,随着人们安全
防范意识的的加强,这一基础研究在门禁系统的应用显得日益重要了。
本文阐述了国内外人脸检测识别技术研究及应用的发展现状,讨论了对人脸图像检测
和识别之前的图像预处理步骤,介绍了常见的人脸检测识别方法,重点分析了人脸检测的
一个重要机制:多个弱分类器集成的方法,即Viola等提出的基于AdaBoost的实时人脸检测
算法,该方法使用了Harr-like特征表示图像,引入了“积分图”概念,提高了特征值的计
算速度,采用AdaBoost方法生成强分类器,使用了级联“Cascade“策略提高人脸检测速度,
取得较好检测性能。详细的阐述了主成分分析(PCA)的人脸识别方法,即利用K-L变换抽
取人脸的主要成分,构成特征脸空间,以达到过滤出所有信息中占最大信息量的成分(主
成分),消除次成分,通过关联性特性,对重新构建的模型参数进行比较评测,是目前使
用最广泛的人脸识别基准方法。重点研究了人脸跟踪算法(Camshift)的优缺点,提出了
采用AdaBoost算法进行人脸定位,提取位置信息再将其作为初始化人脸跟踪窗口传递给
Camshift进行自动人脸跟踪的改进算法。
OpenCV(Open Source Computer Vision)是一个开源的计算机视觉库,支持 Windows,
Linux,Mac OS,Android 等常见操作系统,代码移植性强。本文利用 OpenCV 开源库中
的一些数据类型如 CMat、IPlimage 和 OpenCV 提供的计算机视觉函数接口,通过实时摄
像头获取的人脸信息,编写程序实现人脸检测与识别门禁系统。最后对人脸识别率、检测
速度等指标进行了验证,实验证明,识别可信度为 82%,平均检测用时为 30 毫秒。
基于Atlas200DK的
人脸识别智能
门禁系统源码+项目说明.zip
基于Atlas200DK的智能
门禁系统,利用Ascend310 AI处理器的强大算力和Hi3559芯片的图像处理优势,对摄像头的实时画面进行
人脸识别和体温检测,进而自动实现门禁控制与异常报警功能。
项目分为管理系统和门禁设备系统两部分,管理系统:https://download.csdn.net/download/DeepLearning_/87351409
门禁设备系统包括开发板上基于ACL的C++模型推理应用和开发主机上基于Tornado+Bootstrap的Web应用
相比传统
人脸识别门禁系统,本系统具有响应速度更快、传输更安全可靠、满足疫情防控需要等优点
以下是基于OpenCV的人脸识别门禁系统的实现方法:
1. 训练和创建人脸分类器:使用OpenCV进行人脸识别需要首先训练一个人脸分类器。要训练人脸分类器,可使用Cascade Classifier Trainer,该工具可以通过一些样本图像来训练一个人脸检测器,并输出一个XML文件,该文件包含检测器的参数和权重。
2. 捕获视频和人脸检测:设计一个程序,使用OpenCV的VideoCapture来捕获视频,然后使用已经训练好的人脸分类器来检测每个视频帧中的人脸。
3. 人脸识别:对于每张检测到的人脸,使用OpenCV的特征检测器计算特征向量,然后将其与之前记录的特征向量比较。如果两者之间的距离小于一定的阈值,则认为是同一个人。
4. 应用门禁控制:如果识别成功,则门禁系统将认为这是一个授权访问,并开放门禁。在门禁记录中,将记录时间和身份等信息。
5. 日志记录和管理:门禁记录将被记录在数据库中,以便管理和审计。关键日志记录应包括登录和访问时间,身份和权限信息,事件类型和事件结果等。
需要注意的是,在实现这个门禁系统时需要考虑到许多安全问题,例如,如何保护门禁系统的数据和多因素身份验证,以确保只有授权用户才能访问。此外,对于高安全性需求的门禁系统,还需要考虑物理安全和保护措施,以及应急计划等。
通过上述步骤来实现一个基于OpenCV的人脸识别门禁系统,可以用于许多场景,如办公室门禁、社区门禁、学生公寓门禁等,为用户提供更方便和高效的进出门体验。