基于图像的课堂考勤系统开发
2019-03-27朱晓蒙符云琴
朱晓蒙 符云琴
摘要:基于图像的课堂考勤系统,即能节省时间又能提高学校管理的智能化。整个图像课堂点名系统可分为五个功能模块,训练学生的人脸模型模块、课堂图像中的人脸检测模块和加载检测到的图像进行人脸识别模块以及点名结果的数据显示等功能。实现一个可以节省大量时间和使课堂点名更加快速和高效的系统,从而提高了教学质量和更加智能的进行学生的出勤记录管理。
关键词:人脸识别;OpenCV;特征脸;课堂考勤
中图分类号:G484 文献标识码:A
文章编号:0439-8114(2019)03-0111-05
DOI:10.14088/j.cnki.issn0439-8114.2019.03.029 开放科学(资源服务)标识码(OSID):
Abstract: Calling the roll used to be manual statistics, which is wasting time in class. The class attendance system based on image can not only save time but also improve the intelligence of school management. The whole image class roll-call system can be divided into five functional modules:training student's face model module, image model module which can detect class face, image of loading detection for face recognition module and the results of the data display and so on. A system can save a lot of time and make class attendance more rapid and efficient, so as to improve the teaching quality and manage student attendance record more intelligently.
Key words: face recognition;OpenCV;eigenfaces;class attendance
無论是在中小学课堂还是大学课堂上,点名是记录考勤的一个重要环节,也是教学质量的一个重要参考指标。在传统的课堂考勤中,需要对学生依次点名,而这样的方式花费了大量的课堂时间以及增加了教师的工作量。为了让课堂点名更加信息化和高效化,设计了基于图像的课堂自动点名系统。
人脸识别技术一直都是一个非常热门的研究。在国外有Affective,它起始于MIT的一个项目,运用深度学习的算法,不同的表情有不同的特征,通过摄像头获取面部动作并识别对象的面部动作,如微笑、挑眉、皱眉、愤怒、假笑等判断人们的情绪。在国内有Face++,它可以自动检测并定位图片中的人脸,返回高精度的人脸框坐标,还有云从科技、Linkface等。
基于图像的课堂点名系统采用了C/S模式,界面框架是Qt,数据库使用的是SQLite,开源库是OpenCV。该系统中主要是运用了OpenCV中的人面部检测函数、人面部模型训练函数、肤色检测函数以及人面部识别函数。编码语言采用的是C++。开发平台是QT Create,它是一个跨系统的、完整的界面开发环境[1]。研究详细地论述了基于图像的课堂考勤系统的设计与开发过程。
1)操作人员分为管理员和教师,由管理员获取学生的人脸数据,并将数据进行分类操作。
2)管理员建立学校的school.db数据库,然后录入学生和教师的基本信息。
3)进行本学校的学生人脸模型训练,将已经分类好的数据进行模拟,得到一个.xml的模型文件并进行保存。
4)点名模块:①选择课程的基本信息(上课班级、课程名称、上课日期)。②载入在课堂上拍摄的学生人脸图像(最好是全部学生都是正脸)。③检测图像中出现的人脸并放到临时文件中保存。④载入之前训练好的人脸模型,再将缓存区中保存的人脸依次放到模型中去识别并保存识别结果。⑤将识别得到的预测值和图像放在临时堆栈中,到数据库中提取出该班级的信息并结合预测值,将点名结果显示出来。
1 相关理论技术介绍
1.1 基于QT平台的应用程序开发
QT是一个非常灵活的跨系统的C++可视化图形界面应用开发框架。它的特点是“一次编写,到处编译”。这样的方式非常灵活,让开发人员可以不受限于系统,在数据显示方面还提供了<模型--视图--委托>的机制来实现,是Linux系统下开发C++用户界面应用程序非常好的选择[2]。
1.2 数据库技术
SQLite数据库是一款开放源代码的、非常小的、跨系统的内嵌式关系型数据库,在程序中对SQLite的操作就像对相关的API操作一样,它的代码与所操作的应用程序代码是共同存在的。服务器和客户端都在一个进程中运行[3]。SQLite应用十分广泛,是数据库、编程库、命令行工具,使用方式多样:内嵌开发、操作系统服务、脚本和界面应用开发。它是普通的磁盘文件,所以非常便于操作、传输和备份。
1.3 OpenCV开源技术
OpenCV是一个跨系统和开放源代码的机器视觉库,可以在多个操作系统上面运行。同时提供了C++、Python、Ruby、Matlab、Java等语言的接口。OpenCV里面的成员方法有500个,遍布了机器视觉的许多方面,如食品加工、信息安全、医学成像、摄像机标定、用户界面、3D视觉等。其中提供的肤色检测、检测人脸和识别人脸算法也都非常成熟。本研究所用到的人脸检测、人脸识别和人脸数据模型的训练由OpenCV提供的相关接口实现[4]。
2 系统需求分析
2.1 系统可行性分析
2.1.1 需求可行性分析 图像课堂考勤系统是一个可应用于学校的点名系统,管理人员和教师运用系统来输入图像实现自动点名功能,并对相关数据进行操作和管理。图像课堂考勤系统节省了教师点名时间并采用计算机技术来实现点名功能,使课堂点名更加快速化、信息化及高效化。
2.1.2 技术可行性分析 基于图像的课堂考勤是一个界面系统。使用Qt来做GUI设计,它具有功能强大和方便使用的模板类型,模型、视图、委托功能,多种显示图像框架和自定义需要的显示数据模型视图。OpenCV提供了强大的对图像中的像素进行处理函数的功能,主要有图像中像素的灰度化、二值化及机器上的视觉算法。有特征脸模型训练、Haar特征的人脸检测、RGB的肤色检测及人脸预测等算法。经过综合分析,采用应用程序开发框架+OpenCV做图像处理技术支持是具备可行性的。
2.1.3 操作可行性分析 系统的用户界面具有简洁、易操作等特点,可以让管理人员和教师一看就知道如何去使用系统功能。在实现课堂点名功能时,载入模型和人脸检测以及人脸识别的时间都不能过长,这样会降低工作效率。
2.2 系统性能需求
系统性能需求有系统的安全性、互操作性,程序的可靠性、高效性,系统的可维护性、可扩展性以及可移植性等多个方面。基于图像的课堂考勤系统是一个图像处理系统,管理员或老师在使用系统过程中以实现对学生的课堂考勤进行智能化管理。其中最重要的性能是可靠性以及高效性,必须要保证检测到全部的人脸以及没有误检的基础上去识别,还必须保证识别的结果是正确无误的。高效性是要求载入模型时间必须要短,检测人脸和进行人脸预测都不能超过一定的时间。所以系统必须要达到一定的可靠性和高效性,采用算法叠加进行检测和识别可以提高系统的可靠性和高效性。
2.3 系统业务逻辑
系统业务逻辑见图1所示。
3 系统总体设计
3.1 系统功能设计
整个图像课堂考勤系统可分为四个功能模块,学生人脸模型训练模块、检测出课堂图像中的学生人脸模块和识别学生人脸模块以及数据库管理等功能。其中学生人脸模型训练和识别学生人脸模块是系统的核心功能。
3.1.1 学生人脸模型训练模块 OpenCV提供了三种训练模型函数。①Eigenfaces特征脸createEigenFaceRecognizer();②Fisherfaces createFisherFaceRecognizer();③LPH局部二值直方图createLBPHFaceReconizer()。
系统中的学生人脸模型训练运用的是OpenCV提供的特征脸模型函数训练。学生人脸模型训练功能主要分为4个步骤。
1)获取学生的人脸图片或者是含人脸的图片并进行分类处理,一般一个学生需要获取多张不同的图片,分类每位学生的人脸图片然后以学号为文件夹名称并放在文件夹中,以便后面生成csv.txt文本文件。每个文件夹中只包含该学生的图像。
2)获取仅为人脸的图像数据:选择保存人脸数据的文件夹,将上面已经分类处理的图像文件一一导入模型进行人脸检测,再将检测到的人脸矩形数据尺寸縮放为90 mm×90 mm的图像文件并保存到相应的文件夹内,最后将保存的.jpg的格式转换为.pgm图像格式。
3)把脚本文件放到人脸图像文件的上一级目录中,执行(./get_csv.sh)脚本文件生成csv.txt文件。该文件的每行都存储一张图像的路径和标签,用“;”号隔开,标签指代的是个人的编号而非图像的编号,如图2所示。
4)开始训练模型。先调用函数将csv.txt文件的内容读入到vector
3.1.2 学生人脸检测模块 进行班级、课程及上课时间等基本信息的选择。然后载入在课堂中拍摄的学生人脸图像,此功能是检测出图像中含有的人脸数量和存在位置并将其勾画出来。检测出来的人脸数据存储到临时创建或已经建立好的文件夹中,再将文件夹中的图像缩放到大小为90 mm×90 mm的图像文件。因为如果在训练时采用的是90 mm×90 mm的图像,那么在预测函数中也只能预测90 mm×90 mm的图像,否则会出错[5]。
3.1.3 学生人脸识别模块 人脸识别方法主要分为五类:基于传统知识的方法、基于模式匹配的方法、基于几何特征的方法、基于统计的方法及基于外观的方法。
本研究采用的是类Haar特征和Adaboost算法实现人脸检测。它是一种基于传统知识的人脸检测算法。学生人脸识别步骤为:①在完成了上一步的人脸检测后,将已经检测出来的图像存储在vector
系统采用的OpenCV提供的三个人脸识别方法中的第一个特征脸方法,它通过下面的方式进行识:①把载入的训练数据投影到PCA子空间;②把vector
3.2 数据库设计
本系统采用的数据库设计见表1和表2。
4 系统功能实现
4.1 系统总体功能实现
整个图像课堂考勤系统可分为四个功能,学生的人脸模型训练功能、检测学生人脸模块功能和学生人脸预测功能以及数据库管理等功能。登陆进入主界面后可选择训练模型功能或进行点名功能。总体功能流程见图3。人脸模型训练是实现人脸识别的第一步,也是最关键的一步,因为如果人脸模型训练不好将会直接影响到人脸识别的结果。系统主界面见图4。
4.2 人脸模型训练功能
学生的人脸模型训练是实现图像点名的第一步,也是最关键的一步,因为如果人脸模型训练不好将会直接影响到图像点名的结果。功能流程见图5。
4.3 人脸检测功能
图像点名功能由四个小模块组成,具体为课堂图像获取及学生头像检测、图像预处理、图像中的重要特性的获取以及预测模块。
课堂图像获取:采用摄像头或手机镜头将课堂开始时的学生图像拍摄下来。
学生头像检测:学生的头像检测是人脸识别的基础步骤,就是在图像中用一个矩形框检测图像中存在的学生人脸的个数和保存矩形的像素,并将检测到的人脸图像转换90 mm×90 mm大小。
人脸图像预处理:在进行完学生头像检测之后就对矩形中的像素进行处理,因为检测结果保存的是矩形的像素,并没有将图像提取出来,要进行提取图像子图和对子图进行灰度转换,直方图均衡化以及图像的归一化处理等[7]。
人脸图像特征提取:图像中的重要特征获取是运用了Haar-like特征的提取。
4.4 人脸预测功能
学生人脸预测算法是采用了OpenCV提供的Eigenfaces算法,它是一个主成分分析算法(PCA)。预测的过程就是将已经进行预处理的图像投影到PCA子空间中,在与已经训练好的模型中的子空间进行相似度比较,相似度最大的视为识别的结果[8]。点名功能流程见图6。
4.5 数据显示功能
将点名结果简单清晰地显示在主界面中,显示的基本数据包括课程的基本信息,如上课班级、课程名称、上课时间和班级人数、到勤人数以及出勤率等一些基本信息。主要的显示信息是学生的基本信息:学号、姓名、院系、专业、班级、是否到勤、学生头像以及检测到和识别为此学生的图像。
具体的实现技术:Qt采用了<模型---视图---委托>来实现数据可视化功能。数据存储和数据显示是分离的,不相关的,这样的好处就是一个数据模型可以有多种方式来显示,同时,一个可视化窗口也可以显示多种数据模型,只要你在显示的时候将模型和可视化控件进行关联。在Qt中存储数据的模型基类是QAbstractItemModel,其他的数据存储模型都是基于此类派生出来的。视图类的基类是QAbstractItemView,其他的视图类都是由此类派生出来。本系统中运用到的数据存储模型有QStabdardItemModel,它是一个用于表格的模型,还有运用到QsqlTableModel,一个用于操作数据表的数据模型。视图类运用的是QtableView,一个用于显示表格的视图类[9-15]。模型和视图类都是基于int和text的显示机制,如果要实现复杂的类型就需要用到委托类,比如本系统中要实现在单元格中绘制图像和添加一个可操作的复选框。可以为一行或一列添加自定义的委托,来实现自己想要实现的功能。点名结果显示见图7。
5 小结
由于编程思想和开发经验的不足,基于图像的课堂考勤系统还存在诸多的问题。在以后的工作中应不断完善图像的课堂点名系统,对系统的训練学生的人脸模型和检测学生人脸以及人脸预测功能不断地改进和完善。下一步工作在图像课堂考勤系统中加入肤色检测技术,使肤色检测和Haar特征检测相结合,从而改进单独使用Haar进行检测时产生的误检。多次修改训练模型的图像格式和预处理的结果,找出最好的训练模型图像格式和预处理方法。对可以进行重新构造的类和方法函数进行重新构造,提高代码的简洁性。针对写得不好的代码进行不断的优化,使代码更加易懂。深入对Qt的GUI框架学习,对信号和槽加深学习,对布局管理和模型视图机制多加应用并设计出一个更加友好、简洁、优雅的设计界面。编写一份完整的使用文档,来帮助使用者更快、更易使用基于图像的课堂考勤系统。
参考文献:
[1] JASMIN B,MARK S.C++ GUI Qt4编程[M].北京:电子工业出版社,2013.
[2] MARK S.Qt高级编程[M].北京:清华大学出版社,2011.
[3] MIKE O.SQLite权威指南[M].北京:电子工业出版社,2013.
[4] GARY B.学习OpenCV[M].北京:清华大学出版社,2009.
[5] 赵 黎.基于OpenCV的人脸检测系统设计与实现[J].科技信息(科学教研),2008(18):351,403.
[6] 齐兴敏.基于PCA的人脸识别技术的研究[D].武汉:武汉理工大学,2007.
[7] 何 荣.基于OpenCV的人脸识别系统设计[D].广州:华南理工大学,2013.
[8] 黄 昉,张宝昌,刘金琨.PCA在人脸识别中的改进算法[J].中国科技论文在线,2011,6(1):54-58.
[9] 王 进,颉小凤,胡明星,等.基于LBP预处理和子图像特征采样的人脸识别[J].江苏大学学报(自然科学版),2016,37(1):85-91.
[10] 张静端.基于人脸识别技术的图书馆门禁系统的研究[J].现代电子技术,2016,39(18):99-103.
[11] 周水生,郑 颖,穆新亮.基于Cholesky分解的K2DPCA人脸识别研究[J].系统工程理论与实践,2016,36(2):528-535.
[12] 聂海涛,龙科慧,马 军,等.基于快速SIFT算法和模糊控制的人脸识别[J].吉林大学学报(工学版),2016,46(2):549-555.
[13] 徐晓艳.人脸识别技术综述[J].电子测试,2015(10):30-35,45.
[14] 代 雷,吴 迪,张 健.基于OpenCV视觉库的ESPI图像增强技术研究[J].电子测量与仪器学报,2013,27(10):975-979.
[15] 马新明,赵晓莉,时 雷,等.基于OpenCV的图像处理系统设计与实现[J].河南农业大学学报,2014,48(1):87-90.