技术文档

岁酱吖の 提交于 2020-03-13 19:50:38

开发需求分析

功能:合理推荐学生找到合适的自习室,节省时间。

开发策略:通过后端处理数据,将之展现在前段搭建的平台上。

框架:

  前端:html5

  后端:OpenCV和C++

基本架构

  前段用于处理用户的输入以及需求信息,后端用于处理运算用户所需的结果

 

 

前端架构设计


一、功能

读入学生对于某教学楼的查询需求,并显示对应结果

 

二、页面构成

1.顶端是中国人民大学的logo,以及“教室资源管理系统”的字样。

2.中间是搜索框和搜索按钮

3.下方左侧是选择指定教学楼的单选表单;

4.下方右侧是显示搜索结果的表格, 一列为教室编号, 另一列为拥挤程度。

 

三、页面设计:

 

初步设计的页面如下图所示, 之后会继续修改:

 

 

后端架构设计:

 

后端人脸检测部分使用OpenCV和C++语言完成。它分为下面两个部分:

(一)分类器的训练

建立一个含有大量图片的样本库,样本库中的图片分为包含人脸特征和不包含人脸特征两种。从样本库中将人脸和非人脸的haar-like特征提取出来,作为分类器训练过程的输入,然后使用Adaboost算法训练出一个级联的强分类器。该分类器就是一个对人脸和非人脸的判断器。

 

(二)人脸检测

若待检测的是视频或摄像头的录像,则从其中提取一帧进行图片预处理;若待检测的是图片,则直接进行图片预处理阶段。加载在上一步工作中训练得到的分类器,对截取的待识别图像进行检测,若通过了分类器则表示检测出了人脸,存储该人脸的相关信息并使用一个红色圆圈将人脸标识出来,若未通过则表示没有检测到人脸。之后移动剪裁窗口并重复检测的工作,直到该测试目标的所有像素点都被扫描过,则此次人脸检测的过程结束。将最终的图片输出,在这上面所有被检测出来的人脸,都使用了红色圆圈标识了出来。

 

 

构造训练样本库

样本库的数量与质量,直接关系到了检测的效果。样本库中的图片数量越多,差异化越大,训练出来的分类器效果也就越好。由于已经选择好了准备提取人脸特征,于是我们需要准备这两组样本:一组为正样本,其中所有的图片都包含了人脸的特征;一组为负样本,其中所有的图片都不包含人脸的特征。

正样本库

来自于AT&TYale等标准人脸库。从中挑选了2706张肤色、表情、光照有较大差别的图片,作为本次训练的正样本库。并且将所有图片的人眼设置在同一个水平位置,去除样本中人的头发,将更有利于训练的进行。所有正样本库的图片都有着以下要求:

l 每张图片都要包含完整的人脸特征,我采取的是竖直方向从额头到下巴,水平方向包含左右脸颊。

所有的图片都必须统一格式和大小,我采取的文件格式是bmp图像格式,大小为20×20像素的灰度图。

负样本库

图片的背景对识别率有着很大的影响,环境越是简单,人脸的识别率越高,而环境越是复杂,人脸检测的难度也就越大。负样本库中的文件就是描述背景图片的。所有负样本库的图片都有着以下要求:

l 不能够包含人脸的特征。

l 数量要足够多,一般来说要多于正样本库的数量。

l 每张图片之间的差异性要足够大。

l 对于图片的格式及大小,没有具体要求。这里采用了4830张20×20像素的灰度图,有利于加快训练速度。

 

通过haar-like特征,积分图方法对特征进行提取,我们可以从样本库图像中提取出人脸的特征作为输入,开始我们的分类器训练(采用Adaboost算法)

 

人脸检测部分的实现

 

进行图片的预处理,并使用等比例放大检测窗口的方式来进行人脸的检测工作.

 

图片预处理

用来测试的图片、视频及摄像头获取的实时图像,都是彩色图像,必须要对图像进行一定的处理,才能够使用分类器开始检测。

对于视频或者读入的摄像头实时画面,需要从中提取一帧图片。对于图片,可以直接开始处理。首先使用cvCvtColor( , ,CV_BGR2GRAY)函数将待检测图片转换为灰度图像,再使用cvResize( , ,CV_INTER_LINEAR)对图片进行双线性插值的缩放,最后使用cvEqualizeHist( , )进行直方图均衡化,就可以开始检测了

 

检测方法

基于检测窗口等比例放大

将检测窗口等比例放大:将待检测图片的大小固定不变,不断地放大检测窗口的大小,每一次放大都采用相同的比例,且放大后的窗口大小不能够大于图片本身的大小。将每一个被放大的检测窗口,都对图片进行遍历,获得检测结果。这种方法虽然会影响一定的检测准确率,但是它不需要改变图片的大小,减少了后台计算量。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!