基于视频的智能考勤系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于视频的智能考勤系统
一、概述
由于目前高校对到课率抓的比较严,而传统的考勤方法具有滞后性和低效性,所以我们开发了《基于视频的智能考勤系统》。
《基于视频的智能考勤系统》的创意是来自与开发人员自己的学习体会和老师的启发。作者最初的想法是做一个自习教室的自动管理系统,主要功能有防止恶意占座和空位提示等功能,但是在和老师交流过程中发现难度较大,并且市场前景比较小,于是就改成了《基于视频的智能考勤系统》。
《基于视频的智能考勤系统》的主要思想是利用摄像头采集图像,通过数字图像处理,检测人头的个数,从而实现对每个班的到课率的考勤。由于在大部分教室中,摄像头都是安装在教室的后部,所以我们只能实现对人的头发的检测,而不能进行通常的人脸检测。
在这个系统中,主要的核心部分就是人头的检测。主要难点也在于此。具体的来说,主要是以下几个方面:1、由于很多教室是阶梯教室,所以如果从后面拍摄照片的话会造成很多人头重合在一起(如图1);2、有的同学穿的黑色衣服会对检测造成很大的干扰(如图2)。
图1 图2
对于以上两点,经过研究和讨论,我们决定采用基于特征的检测和adaboost算法两种算法的综合,对人头实施检测。基于特征的检测主要是针对人头的形状、灰度、面积等特征进行提取检测,主要优点是速度快,便于理解和实现,但是主要缺点是抗干扰性差。Adaboost 算法主要是根据Paul Viola和Michael J.Jones的在《Robust Real-Time Face Detection》中所提到的adaboost算法对人头实行检测,唯一所不同的是此处的训练样本是人头的后部,而不是人脸。这种方法的好处是速度快,精确率较高,但是对于我们几位大二的同学来说难度有些大。最后根据adaboost算法中的级联思想,将二者级联,取最后的结果作为检测结果。具体的做法就是要求两个分类器具有低去真错误率(把对的判断成错的)和一定的存伪错误率(把错的判断成对的),然后对一副图像进行检测时,先用基于特征的分类器进行检测,然后用adaboost分类器进行检测,只要有一个分类器判断为否,就将该图像判断为否。
在工程部分,我们采用的是用VC++将核心算法做成dll,然后用vb来实现界面和数据库。由于这是我们第一次做项目,并且以前没有接触过任何有关图像处理的知识,所以我们在做项目的过程中都是摸着石头过河,而且这学期的课程较多,所以此次工程中我们只实现了核心算法中的第一个部分,就是基于特征的检测部分。第二个部分目前正在开发之中,预计能在下个学期之前完成。
二、工程(1.0版本)
此次出炉的《基于视频监控的智能考勤系统》1.0版本主要有主程序、dll部分和数据库三部分组成。
他们的关系如下图所示:
1、主程序:dll和数据库的桥梁,通过他可以实现数据在dll和数据库之间的交换。
同时,它也是用户的接口,用户可以操作他得到自己想要的信息。
2、Dll:包含了该工程的整个图像处理部分,包括图像预处理部分和模式识别部分。
接口:Int initialclassdata(int);
参数为班级号码,从.txt文件导入班级座位信息。返回TRUE
Int loaddib(int,int,int);
参数依次为日期、时间、教室编号,返回教室人数。
a、预处理部分:将彩色图像转换为灰度图像。
b、模式识别部分:对每个座位进行判定,然后累加。对于每个座位,首先计算人
头部分占当前座位框的比值,当然,这里会有黑色衣服对比值的影响。当发现
当前比值高于我们给定值的时候,再通过判断宽度的方法判断是否有头存在,
因为衣服的宽度是远远大于人头宽度的。此种方法最后对多幅图片进行测试,
准确率在90%左右。
首先,为了能够开始识别,程序需要一些教室的信息。1、教室中每个学生的人头可能会出现的大概位置(seat[][]二维数组存储)。当我们得到一幅教
室图片,我们应该对每个座位上的学生的人头可能出现的位置进行判断,然后
确定一个任意四边形,将这个位置框出来。确定位置的标准是:只考虑学生坐
姿端正时候的人头位置,不考虑学生人头侧移的情况。这个位置框还要在人头
的四周留有一定的空间,给学生头部运动留有一定的空间。2、对与每个人头,
我们还要确认一个人头宽度的大概范围(headlength[][]存储)。即,图片中横
向看到的人头宽度。由于透视原理,教室前、后排的学生人头宽度肯定有较大
的差别。这两个部分的手工录入在实际当中是很繁琐的,但是一但录入完毕,
数据对于当前教室就可以在摄像头位置、角度不变的情况下永久使用。以上部
分的单位均为像素。3、对于每个人头,还需要一个灰度比值,即符合要求的
灰度较小部分面积占总框面积的比值下限(ratio[])。这个值的设置比较灵活,
即可以对每个座位逐个设置,也可以全部座位只采用一个值。
下面,还有3个应用于全图像的值:允许判断的灰度最大值(grademax),灰度误差范围(graderange)和座位个数(numofseat)。程序从用户给的头部
框中选取中间点,取它的灰度,如果这个灰度值太高,就表明它不是头,直接
返回假。而这个灰度是否太高的判断标准就是灰度最大值。灰度误差范围就是
在当前选取灰度值的一个范围当中的灰度全部判断为人头。比如当前选定灰度
为30,那么在30±灰度误差范围中的灰度都被计算。座位个数记录总共要
被判断的座位个数。
以上的所有数据为简单起见,被存储在一个.txt文件中。格式:
允许判断的灰度最大值灰度误差范围座位个数
人头位置框的4点坐标(左上,右上,右下,坐下)灰度比值人头宽度下
限人头宽度上限
……(根据座位个数输入相应数据)
3、数据库: