本课题的设计了基于人脸识别的学生考勤签到管理系统,在从UI界面到Socket协议到管理系统的过程重,我们进行了一些创新和改进,主要体现在以下几个方面:
- 客户端:
采用了LBPH(Local Binary Patterns Histograms)方法,提高了人脸识别的准确率和鲁棒性,可以有效地处理人脸遮挡、表情变化、姿态变化等情况。经过重复验证,在录入人脸30张,经过100次测试,我们的人脸识别系统错误识别数量0次,平均识别时间0.53s(不包括打开摄像头的时间)。
采用长短期记忆网络(LSTM)训练数据集,根据学生签到时间、签退时间进行分析,构建出学生签到的用户画像。并进行用户画像特征分类,建立动态UI界面,根据此可以得出学生签到情况以及预测下一次签到情况。
- 服务端:
融合excel和sqlite数据库。在实际操作中,将Excel作为基础签到表格,sqlite数据库用于存储更加详细的信息。这样,教师可以使用Office在Excel中查看数据,并进行操作,方便教师的使用,同时,管理员可以通过sqlite数据库进行维护和检索。
由于签到过程中涉及多用户的同时处理,引入消息队列,将请求和响应分离,降低系统间的耦合度有效降低系统在高并发情况下的压力,提高响应速度。并采取多
本课题的研究目标是设计和实现一个基于人脸识别的学生考勤签到管理系统,它可以实现以下的功能和需求:
1、能够自动地采集和识别学生的人脸信息,实现学生的身份验证和考勤记录,无需学生进行任何操作,也无需教师进行任何干预,提高了考勤的速度和准确性。
2、能够实时地将考勤数据上传到服务端,实现考勤数据的安全和可信,无需考虑数据的丢失或损坏,也无需担心数据的篡改或泄露,保障了考勤的公正和透明。
3、能够提供丰富的考勤数据的分析和展示,如考勤率、考勤分布、考勤趋势、考勤异常等,可以帮助教师和学生了解和改进自己的出勤情况,提升了考勤的意义和价值。
本课题的研究内容主要包括以下几个方面:
考勤签到系统的建立与完善:该模块有客户端与服务端,客户端包括发送模块,功能模块和接收模块;服务端包括签到模块、发送模块,接收模块与数据库模块。
人脸识别模块的设计和实现:该模块负责采集和识别学生的人脸信息,实现学生的身份验证和考勤记录。该模块采用了特征提取方法,可以有效地提取和学习人脸的特征,处理人脸的变化和差异,提高人脸识别的准确率和鲁棒性。并生成yml模型,通过调用yml特征库进行快速识别。
用户画像的构建:首先统计学生签到签退次数和时间,对签到签退分别是上下午进行分析,并统计学生课堂学习的总时间。并对签到时间进行统计绘图。之后利用长短期记忆网络(LSTM)训练数据集,根据学生签到时间、签到状态进行分析,构建出学生签到的用户画像。并根据签到情况进行分类,并建立动态UI界面,根据此可以得出学生签到率、学习时间以及预测下一次签到情况,并对学生的签到情况进行评价。
本课题的研究关键问题主要有以下几个方面:
如何提高人脸识别的准确率和鲁棒性,处理人脸的变化和差异,防止人脸识别的错误或失败?
如何分析和展示考勤数据,帮助教师和学生了解和改进自己的出勤情况,提升考勤的意义和价值?
本课题的技术路线如图所示,主要包括以下几个步骤:
图1 考勤签到系统研制技术路线
首步,需求解析与设计:明确系统之功能与性能需求,深入分析系统用户与应用场景,规划系统架构与模块,确立技术选型及参数设定。
第二步,构建考勤签到系统。实现签到、通信、数据库模块的基本功能。在内网IP通信环境下实现签到功能,并将签到数据储存于数据库中。
第三步,开发人脸识别模块:实现人脸识别模块功能,涵盖人脸检测、对齐、特征提取、匹配等,采用深度学习方法,构建并训练人脸识别模型,测试与评估识别准确性与鲁棒性。
第四步,用户画像构建与设计:依据数据库中之签到时间,运用LSTM方法进行分析,揭示学生签到习惯。
第五步,系统整合与测试:集成各模块并进行调试,形成完整系统。进行功能、性能、兼容性、安全性等测试,修复系统错误与缺陷,提升系统稳定性与可靠性。并优化UI界面,增加体验感。
图2 考勤签到系统架构框图
考勤签到系统主要分为客户端与服务端两个部分,二者通过通信模块实现连接与信息交互。当客户端与服务端设定相同的IP地址和相同端口后,即可展开信息传输。
客户端,即学生端,提供账号密码登录及人脸识别登录两种方式。学生可录入人脸并训练模型,以便进行人脸识别签到。根据签到时间,系统将构建相应的学生画像。
服务端,即教师端,主要包括数据库数据存储、课程签到功能开启以及签到情况查询等功能。
- 通信模块:负责实现客户端和服务器端之间的数据传输和交互,我们采用了Socket进行连接,它是一种通用的编程接口,可以支持多种编程语言。通过Socket,我们可以方便地将客户端与服务器连接起来,实现数据的发送和接收。在数据传输过程中,我们选择了JSON(JavaScript Object Notation)字典格式来表示数据。
为了保证数据传输的稳定性和安全性,我们采用了TCP/IP(传输控制协议/因特网互联协议)网络协议。在应用层,我们使用了HTTP(超文本传输协议)来实现客户端与服务器之间的数据交互。
通过采用Socket、JSON、TCP/IP和HTTP等技术,我们实现了客户端和服务器之间的数据传输和交互。这些技术保证了通信的稳定性和安全性,客户端与服务器之间的数据传输和交互将更加便捷、高效。
图3 通信模块核心代码
该模块的主要功能有:
建立和维护网络连接,根据网络环境和设备类型选择合适的通信方式,本项目中采用Socket进行信息传输。
封装和解析数据包,本项目采用json字典格式文件用于传递信息,可以有效避免解读错误,同时使用UTF-8作为编码方案。
发送和接收数据,根据不同的数据内容和目的,如人脸图片、考勤信息、用户账号密码等,进行数据的压缩和加密,保证数据的高效性和安全性。
处理和响应数据,根据不同的数据来源和状态,如客户端、服务器端,进行数据的验证和确认,保证数据的可信性和及时性。
- 人脸识别模块:该模块负责实现人脸识别的功能,使用了深度学习的方法,构建和训练了人脸识别的模型,提高了人脸识别的准确率和鲁棒性。该模块的主要原理为:
局部二值模式(LBP)计算:对于图像中的每个像素,比较其与周围邻域像素的灰度值。如果中心像素的灰度值大于或等于邻域像素的灰度值,则邻域像素被标记为1,否则被标记为0。这样,每个像素都会得到一个8位二进制数(即0-255的整数),这就是局部二值模式。
划分单元格:将LBP后的图像划分为小的单元格(例如,16x16像素的单元格)。
计算直方图:对于每个单元格,计算256-bin的直方图,即每种局部二值模式(0-255)的频率。这个直方图就是该单元格的特征描述符。
连接直方图:将所有单元格的直方图连接起来,形成一个大的特征向量。这个特征向量就是整个图像的LBPH特征描述符。
训练和识别:使用LBPH特征描述符训练一个分类器(K-最近邻)。在识别阶段,对输入图像进行同样的LBP和直方图计算,然后使用训练好的分类器进行分类,找出最相似的人脸。
图4 LBPH算法原理图
LBPH算法相对于其他算法计算简单,符合签到要求的快速;不需要大量训练数据,符合签到系统的轻量化设计和快速录入;对光照和表情有较好的鲁棒性,完全可以应对识别过程中的光线等问题;同时LBPH算法不能识别遮挡和大姿态范围变化,避免了上课签到过程中识别到其他同学造成误签。
- 签到模块:此模块主要负责实现签到功能,借助人脸识别模块的结果,对学生身份进行验证以及考勤记录,从而提升签到效率和准确性。该模块主要具备以下功能:
身份验证,包括两种方式:一是通过学号与密码登录,若学号与密码与数据库中存储的信息匹配成功,则允许登录;若匹配失败,则登录失败并予以提示。二是依据人脸匹配结果,判断学生身份是否正确。若学生人脸与数据库中存储并训练的人脸匹配,则允许成功登录;若匹配错误,则登录失败并提示。此举旨在提升身份验证的可靠性和友好性。
考勤记录,根据身份验证结果,对学生考勤信息进行记录,如签到时间、签退时间等,从而提高考勤记录的完整性和一致性。
- 数据库:该模块负责实现数据库的功能,使用了 Excel联合SQLite数据库存储和管理系统的数据,提高了数据库的效率和可扩展性。该模块的主要功能有:
SQLite数据库,使用了关系型数据库,存储和管理系统的结构化数据,如学生学号、姓名、密码、签到时间、迁出时间、签到课程等信息,提高了数据的查询与多样性和更新的速度与准确性。
同时为了方便老师们的使用,本项目能够实现Excel与SQLite数据库同步更新的系统,以便于老师们高效、安全地管理学生签到记录。Excel增强了数据的可视化,方便教师端查看签到记录,而SQLite数据库存储增强了数据的安全性。
图5 数据库存储结构
在该项目中,我们充分发挥了Excel和SQLite各自的优势。Excel强大的数据可视化功能,可以让教师直观地查看和分析签到记录,从而更好地掌握学生的出勤情况。通过将Excel与SQLite数据库进行同步更新,老师们可以在保证数据安全性的同时,实现对签到记录的实时更新和管理。SQLite数据库作为一种轻量级的数据库管理系统,具有较高的安全性和稳定性。它能够为教师们提供一个集中管理签到数据的平台,确保数据不易丢失,并且方便进行数据备份。
- 用户画像:该模块负责实现用户画像的功能,使用了数据挖掘和机器学习的方法,分析和挖掘系统的数据,构建和优化用户的画像,提高了用户画像的精准性和有效性。该模块的主要功能有:
数据分析,利用长短期记忆网络(LSTM)训练数据集,使用了数据统计和可视化的技术,对系统的数据进行分析和展示,发现数据的规律和趋势,预测下一次同学签到的时间,提醒同学记得准时签到.
用户画像,使用了数据模型和推荐的技术,对用户的画像进行构建和优化,描述用户的属性和行为,提高了用户的满意度和体验感。
实践是检验真理的唯一标准。本实验旨在测试本考勤签到系统的有效性、可靠性、安全性等。验证是否能准确高效地进行内网IP下的签到、人脸识别模块在不同光照、角度、表情等条件下是否准确可靠、用户画像构建算法是否精准、数据存储是否安全准确等。
本系统使用的是Python 3.9.18、Python自带的Sqlite数据库以及tkinter图像界面开发工具,开发环境是VSCode。
功能相关的第三方库使用了subprocess, socket, json, threading, sys, queue, palteform,time,pytorch,opencv,panda,openpyxl,datetime等。
Python 语言在设计学生签到管理系统时,其优点主要是体现在对数据的统计和管理方面,Python 的特性让它在处理数据时拥有开发速度快、代码量少、成本低的特点。此外,利用Python 语言来设计数据库的连接和管理方式能够让系统的数据管理更加地高效化。并且在DB-API 诞生之后,python 与各个数据库如MySQL、SQLite 等数据库的连接进行了统一的规范[1]。
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。
Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库。
- R图是反映各个实体之间的关系的,以及实体的属性,为数据库提供了一个很直观的效果。R图被广泛应用于数据库设计的概念结构设计阶段,用R图标识的数据库概念设计结果非常直观,易于用户理解,而且所设计的R图于具体的数据组织方式无关,并且可以被直观的转换为关系数据库中的关系表。学生签到管理系统数据库逻辑结构的全局R图如下图所示。
图6 考勤签到系统数据库全局E-R图
在进行测试实验时,硬件准备需要两台计算机,确保它们连接到同一局域网,以保证拥有稳定的IP地址(使用手机热点,不能使用校园网)。在软件方面,首先需要确保两台计算机都配置了Python环境。接下来,在计算机上安装Visual Studio Code(VSCode)运行程序。
在进行实验之前,还需确保两台计算机的时区一致,以避免时区差异对实验结果产生影响。此外,关闭不必要的应用程序和操作系统服务,以降低实验过程中出现意外情况的风险。
通过以上步骤,可以确保实验的顺利进行,获得可靠的测试结果。在进行测试实验时,遵循清晰的结构和逻辑,有助于提高实验效率和准确性。同时,掌握实验过程中的关键点,可以有效避免潜在问题,确保实验结果的可靠性。
在评估实验结果时,我们需要关注以下几个关键方面:
- 内网IP通信的准确性和高效性。内网IP通信是计算机网络中的基础功能,对于实验结果的实用性和可靠性具有重要意义。在评估这一方面时,我们需要关注通信的延迟、数据包丢失率、传输速率等参数,以确保实验结果在实际应用场景中的有效性。
- 人脸识别在不同的光照、角度、表情等条件下的准确性和可靠性。人脸识别技术在现实生活中有着广泛的应用,如安防监控、手机解锁等。因此,评估其在各种光照、角度和表情下的性能至关重要。我们需要在实验中模拟实际场景,测试人脸识别技术在这些条件下的识别效果,以确保其在实际应用中的稳定性和准确性。
- 用户画像构建算法的精准性。在评估用户画像构建算法时,我们需要关注其对学生特征的挖掘和刻画能力,以及在不同场景下的适用性。通过对比实验结果与实际用户数据的差异,我们可以不断优化算法,提高用户画像的精准度。
- 数据存储的安全性和准确性。在当前大数据时代,数据安全与准确性对于企业和用户至关重要。实验中,我们需要关注数据存储的完整性、隐私保护措施以及数据备份和恢复能力等方面,以确保数据的安全和准确。
- 打开教师端,点击“开启签到”,并监听socket,等待连接。
图7 服务端开启签到窗口
- 另一台打开客户端,分为学号/密码登录与人脸识别登录。系统有两种登陆方式:人脸识别与账号密码。若使用人脸登陆,系统会选择上次录入的人脸进行验证,若通过验证则将本地哈希值(pickle自动填充)经过转换输入到学号和密码中;若使用学号密码登陆,则不需要打开摄像头。
(a)账号密码登录 (b)人脸识别登录
图8 客户端签到登录窗口
需注意,此人脸识别功能仅用于激活已存储在本地的账户密码哈希值。若用户已更改密码,需重新登录以更新哈希值。使用账户密码哈希值的原因在于,直接存储明文密码安全性不足,因此进行加密处理。
- 进入客户端UI界面。
图9 客户端签到主界面UI
客户端上显示的时间仅供参考,最终的签到时间将以教师端的时间为准。
如果是首次登录,客户端将要求采集人脸图像。为了提高识别的准确度,我们建议保存多张人脸图像,并在不同的光照环境下进行采集,如白天和黑夜,系统能更好地训练出适合的人脸模型。
在采集人脸图像后,点击训练模型按钮。这个过程中,人脸图像将帮助系统训练出一个更精确的识别模型。如果需要更换人脸,必须得到教师端的同意。这是为了确保系统识别的准确性和安全性。
当系统识别到人脸时,它会显示一个蓝色框。可以通过按下“s”键来保存这个人脸。保存的人脸越多,系统的识别准确度就会越高。
图10 采集不同表情、环境条件下的人脸
在完成人脸录入后,点击训练模型,系统将根据人脸数据进行相应训练。若在识别签到过程中,人脸识别持续失效,用户可点击训练模型以重新生成特征。
- 进行签到。执行“识别签到”操作,将实时捕捉的人脸与预先采集并训练的人脸模型进行对比。若匹配成功,则签到过程顺利完成;若匹配失败,签到功能将无法实现。
图11 成功识别人脸并显示学号
- 构建用户画像。学生多次签到后可以点击“用户画像”查看自己的签到情况,包括签到签退次数,累计学习时间时间数据的折线图等信息.同时,系统会根据历次签到时间训练LSTM长短期记忆模型,并预测出下次签到的时间.
图12 用户画像构建界面
本项目将根据学生累计学习时间,签入及时性和签到次数进行分类,学生将获得'学霸','潜力股','实力股'等评价结果.
图13 不同学生数据集构建出不同的用户画像
在进行签到和签退的过程中,教师端会进行弹窗,进行提示:
图14 服务端显示客户端签到签退弹窗
同时,教师端可以实时刷新并查看签到情况
图15 服务端实时签到显示
同时,签到信息会被同步到Excel和数据库中:
图16 Excel与SQLite数据库联合
老师端可以直接点开Excel文件查看学生历次签到情况,也可以直接使用教师端UI界面进行实时查询。
1.针对人脸识别的实验和结论:
在本项目的人脸识别与签到过程中,为确保其安全性,现进行详细论证。实验部分,选取了本人的人脸图像共计20,000张,并随机组合成1000组,每组包含20张人脸。经过训练后,分别采用本人及其他同学的人脸视频(15秒)进行验证。
实验组A:利用本人的人脸视频进行验证,以评估识别成功率。该实验组代表了本人人脸识别的概率。在1000组训练好的模型中,974组在15秒内成功识别,大部分组别在1秒内完成识别。
(a)本人登录 (b)其他人登录
图17 人脸识别实验准确性测试
实验组B:采用其他同学的人脸视频进行验证,该实验组体现了系统将其他人误识别为我的概率。在1000组训练完毕的模型中,无一组成功通过认证。
实验结果表明,本项目的人脸识别技术在准确性和速度方面都表现出色。实验数据显示,本项目的人脸识别准确率高达99.5%,能够在不到1秒的时间内完成识别任务。这一高效的表现,得益于我们对算法优化的不断努力。通过采用并行计算、数据降维等方法,我们显著提高了人脸识别的速度,使其在实际应用中具有更高的价值。
综合以上两个实验,我们可以得出结论:本项目的人脸识别技术既准确又快速。在准确性方面,它能确保在各种条件下准确识别每个人脸;在速度方面,它能在短时间内完成识别任务。
- 针对消息队列的响应测试:
在本项目的设计中,我们充分考虑了签到过程中可能面临的高并发问题,因此特意避免了单次Socket通信中客户端的等待行为。项目的通信流程主要为:客户端发送请求,服务端接收请求并回应。此外,在本实验中,我们同时运行了多个客户端,全体客户端协同进行用户画像查询操作(该操作涉及数据库查询,以及对日期进行编码与转译,处理过程相对较慢)。
图18 查询用户画像时效性测试
在当前的项目中,我们采用了消息队列作为核心组件,经过一系列的测试,取得了令人满意的结果。测试数据显示,在各种场景下,消息队列均表现出了极高的稳定性和响应速度。这充分证明了我们项目所选用的消息队列方案是合理且高效的。
首先,从稳定性方面来看,项目在测试过程中从未出现过报错和断连现象。这得益于我们精选了性能优异的消息队列技术,以及我们对系统架构的精心设计和优化。
其次,在响应时间方面,我们保证了绝大多数请求的处理时间在1秒之内。这得益于消息队列的高并发处理能力和低延迟特性。通过消息队列,我们可以快速地处理大量请求,缩短用户等待时间,提升用户体验。
综上所述,本项目所采用的消息队列方案在稳定性和响应速度方面都表现得非常出色。这不仅得益于我们选择了高性能的技术,还得益于我们对系统架构的深入理解和优化。我们相信,这一方案将助力项目在未来的发展中取得更大的成功。
在本课程设计中,我们成功地设计并实现了一个学生考勤签到管理系统。这个系统的主要功能包括学生信息管理、考勤签到、出勤情况统计、人脸识别签到及用户画像构建。通过使用该系统,学生端可以进行人脸识别签到,增强了签到的便捷性与可靠性;教师可以方便地管理学生信息,并得出学生的签到情况用户画像。
在设计和实现这个系统的过程中,我们面临了诸多挑战,例如如何有效地存储和处理大量数据,如何保证数据的安全性和隐私性,如何提供友好的用户界面、如何构建准确的用户画像,以及如何优化人脸识别算法。为了解决这些问题,我们采取了以下策略:
- 针对大量数据的存储和处理,我们采用了Excel结合数据库技术来高效地存储和查询数据。数据库技术具有高性能、高可靠性和易于扩展的特点,能够满足系统对数据存储和处理的需求。通过使用数据库技术,我们可以在短时间内完成对大量数据的检索和分析,为用户提供准确、实时的数据服务。
- 为保障数据的安全性和隐私性,我们利用了加密技术对密码数据进行保护。加密技术可以确保数据在传输和存储过程中不被非法访问和篡改,从而保障用户数据的安全。
- 为了提供友好的用户界面,我们遵循了用户界面设计原则。这些原则包括易用性、可访问性、一致性和美观性等。通过遵循这些原则,我们打造了一个简洁、直观、易于操作的用户界面,使用户能够快速上手并高效地使用系统。
- 在构建准确的用户画像方面,我们采用了长短期记忆网络(LSTM)分析数据集。通过对用户的签到时间、签出时间等数据进行深入挖掘和分析,我们能够得出学生签到习惯以及预测下一次签到情况。
- 在优化人脸识别算法方面,我们局部二值模式直方图(LBPH)算法提取特征,以提高识别的准确性和速度。为了满足不同场景的需求,我们针对不同光照、角度、表情等条件进行了算法优化,使得人脸识别技术在各种环境下都能表现出良好的性能。
综上所述,在设计和实现这个系统的过程中,我们通过采用数据库技术、加密技术、用户界面设计原则、大数据分析和机器学习技术,以及不断优化的人脸识别算法,成功应对了诸多挑战。这将有助于我们构建一个高效、安全、易用且具有个性化服务能力的系统,为用户提供优质的数据服务。
在未来的发展中,我们将从多个方面对现有系统进行优化,以提高整体性能和用户体验。以下是一些可能的优化方向:
- 考勤定位功能优化:在系统中增加考勤定位功能。通过此功能,管理人员可以随时查看学生的考勤地点,从而更好地监控和管理学生上课签到状态。此外,显示签到地点还有助于防范代签到等作弊现象,提高考勤数据的准确性。
- 客户端数据实时更新显示:实时更新学生的签到数据,使管理人员可以随时掌握最新的考勤状况。避免了反复刷新在操作上的冗余度。此外,实时更新考勤数据还有助于提高数据的准确性,确保教师端能够准确判断学生的考勤签到问题。
- 数据库结构优化:调整表结构、使用索引和分区等技术,降低查询延迟,提高数据检索速度。引入索引和分区技术。索引可以显著提高查询速度,尤其在大量数据的情况下,分区技术可以将数据分散到不同的物理存储设备上,进一步提高查询效率。