基于OpenCV的学生归寝统计系统的设计与实现

作者: 董顺喜 袁金堂 张暑军

基于OpenCV的学生归寝统计系统的设计与实现0

摘要:文章设计并实现了一种基于Python和OpenCV 的学生归寝统计系统。该系统利用OpenCV 库进行人脸识别,将学生人脸特征数据存储于数据库中,通过摄像头实时采集人脸图像并与数据库比对,实现学生归寝信息的统计与分析。测试结果表明,系统人脸识别准确率达到99.8%,具有低成本、高实用性的特点。

关键词:人脸识别;OpenCV;归寝系统

中图分类号:TP391.4 文献标识码:A

文章编号:1009-3044(2025)06-0046-03 开放科学(资源服务)标识码(OSID):

0 引言

传统大学校园统计在寝学生信息时,一般依靠门禁一卡通系统或人像识别闸机的数据进行统计。传统的一卡通系统存在“认卡不认人”的缺点,“认卡不认人”会出现人卡不符的情况,不能精确识别出归寝学生[1-2];而人像识别闸机需要在每个宿舍楼同时安装多台闸机设备,这也是一笔不小的费用。本文针对上述问题,设计并实现了一种基于Python和OpenCV的低成本、高实用性的学生归寝统计系统,利用摄像头实时采集出入寝室学生的图像,实现学生在寝数据的实时统计。

1 系统总体设计

1.1 相关理论和技术

人脸识别(Face Recognition)是一种依据人的面部特征(如统计或几何特征等),自动进行身份识别的生物识别技术,又称为面像识别、人像识别、相貌识别、面孔识别、面部识别等[3-4]。本文系统使用Python 与OpenCV技术实现,OpenCV(Open Source ComputerVision Library)是一个开源的跨平台计算机视觉库,内部实现了图像处理和计算机视觉方面的诸多通用算法,在人脸识别领域有广泛的应用。Numpy库是标准的数据处理分析工具,是Python实现数据排列、矢量计算以及高效率计算分析工作的帮助工具。Numpy 库的最主要作用是分析基本数据[5]。本文中,使用OpenCV进行人脸检测、人脸特征提取、人脸识别模型训练与分类功能。

1.2 逻辑结构

根据前文对人脸识别的场景和实际需求的介绍,基于OpenCV的学生归寝统计系统的逻辑结构设计为3个部分,分别是人脸特征学习训练部分、实时抓拍部分和统计展示部分。整个系统的逻辑结构设计如图1 所示。

学习训练部分:这一部分逻辑主要是将不同场景下学生人脸的照片灰度化,对灰度化后的人脸数据和对应学生的标签进行训练,将训练后的人脸特征数据与对应学生标签保存到数据库中。

实时抓拍部分:这一部分逻辑主要是抓拍进出寝室学生的人脸,提取人脸特征后与数据库中学生人脸特征比对,得出该学生出入寝室的状态。

统计展示部分:这一部分统计分析学生归寝数据并以报表形式展示,如当日未归寝学生数量、所属班级等。

1.3 系统结构设计

本系统根据逻辑结构进行系统结构的设计,系统分为3个独立的子系统分别部署运行,3个子系统是:学习训练子系统、实时抓拍子系统和统计展示子系统。学习训练子系统实现将学生提供的不同场景照片中的人脸信息转为人脸特征信息并存入数据库中;实时抓拍子系统实时调取摄像头抓取进出寝室的学生人脸信息,并与特征库中的数据进行比对,并将比对结果存入数据库中;统计展示子系统以报表的形式展示学生的归寝统计数据。

3个子系统可以根据具体功能模块进行划分,模块划分如表1所示。

2 系统实现

系统基于Linux操作系统,使用Python作为开发语言,MySQL作为数据库。利用OpenCV库实现人脸识别功能,Numpy库进行数据处理和分析。人脸识别算法采用OpenCV 的FaceRecognizer 类LBPHFace 方法。OpenCV提供了三种人脸识别方法,分别是LBPH 方法、EigenFishfaces方法、Fisherfaces方法。本文采用的是LBPH(Local Binary Patterns Histogram,局部二值模式直方图)方法。在OpenCV 中,可以用函数cv2.face.LBPHFaceRecognizer_create()生成LBPH识别器实例模型,然后应用cv2.face_FaceRecognizer.train()函数完成训练,最后用cv2.face_FaceRecognizer.predict()函数完成人脸识别。

本系统的核心功能子系统是学习训练子系统和实时人脸抓拍子系统,下面将讲解这两部分程序的实现逻辑。学习训练子系统根据学生提供的不同时期、不同角度、不同场景的照片经过学习与训练后提取出学生人脸的信息与特征,并将信息存入数据库中,同时该子系统会接收实时抓拍子系统中摄像头抓拍到的无法识别的照片,经过人工识别确认后,将抓拍到的照片同该同学的其他照片一起再次经过学习与训练,形成新的学习人脸的信息与特征库。

学习训练子系统的程序逻辑如图2所示。

3 系统测试

系统测试环境为:操作系统CentOS 8,CPU:8核、3.2 GHz、64 G内存配置,系统未做分布式部署。测试过程为收集一栋宿舍楼所有学生照片,包含证件照、正面、左右侧面及生活照用来训练,生成学生人脸标准特征库数据,再在学生宿舍楼安装两个枪机摄像头分别抓拍进出宿舍的学生,安排4组学生进行测试,每组学生250名,于中午与傍晚分别进行测试,测试结果数据如表2所示。

从表中可以看出,在以上测试条件下,测试成功率可以达到99.8%,测试不通过的数据是在傍晚现场光线较暗情况下测试的结果,再打开宿舍门口大灯后测试成功率提高。

4 结论

该系统基于Linux 平台开发,使用Python 与OpenCV实现学生归寝数据统计功能。该系统以较低的成本和较高的实用性实现学生宿舍归寝数据的统计,同时该系统部署简单,易维护,具有一定的可移植性。在系统使用过程中,发现一些不足之处将在下一版本中改进,比如避免频繁调用摄像头抓拍图片,可以改为仅在有人进入监控范围后再进行抓拍;增加人脸特征提取算法,如同时使用多种人脸特征提取算法进行比对,提高人脸识别率。通过以上改进将会进一步提高系统的识别率和可扩展性。

经典小说推荐

杂志订阅