毕业设计-基于机器视觉的答题卡生成及批阅分析系统-OpenCV

目录

前言

课题背景和意义

实现技术思路

一、系统分析

二、系统设计

三、系统实现

四、系统测试

五、结束语

实现效果图样例

最后


前言


    📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

选题指导: https://blog.csdn.net/qq_37340229/article/details/128243277

大家好,这里是海浪学长毕设专题,本次分享的课题是

🎯毕业设计-基于机器视觉的答题卡生成及批阅分析系统-OpenCV

课题背景和意义

为降低阅卷的人力成本,提高考试情况分析的准确率和效率,对答题卡模板生成以及答题卡识别的算法进行研究和 设计。实现动态设置答题卡信息,用word文档形式生成答题卡模板,以图片形式读入实物答题卡,通过图像识别获取答题 卡填涂内容,将识别结果与设定的答案信息进行比对,得出考试结果。系统运用OpenCV计算机视觉库对答题卡图片进行 灰度化、降噪、模板匹配、透视变换、二值化等一系列图像处理,最终实现答题卡模板生成以及答题卡识别。网上阅卷系统已经应用于中考、高考和国考等大规模考 试,然而在复杂环境下的中小规模考试如月考和测试等,该系 统并未得到广泛应用,基本上仍在进行手工阅卷。设计一种可以根据使用者要求 生成答题卡兼阅卷并对考试情况进行分析的软件,能够最大限度降 低成本和软件对设备的要求,如答题卡打印纸张采用普通A4 纸即可,使用方式尽可能简单,以减轻教师的工作负担。

实现技术思路

一、系统分析

答题卡生成与批阅分析系统可以依照使用者对答题卡信 息、客观题题型和题数的设置生成相应的答题卡模板并导出 word文档,提供答题卡批量识别功能,根据使用者预设的答案 数据得出答题卡的填涂结果,并根据预设的知识点类型,统计 每个知识点和每道题的得分率。

二、系统设计

系统功能设计

本系统的整体功能图如图所示。

1、新建答题卡模板

在新建答题卡模板的功能里,使用者可以自定义答题卡的 基本信息,如题目数量、题目选项数量、题目分值、知识点数量 等;根据使用者的设置,生成相应数量的文本框等控件让用户 定义知识点、答案等,最后,以Word文档形式生成相应信息、题 量的答题卡模板,以供使用者打印。 2、已存答题卡模板

在已存答题卡的页面,显示使用者已创建的所有答题卡模 板,可对答题卡模板进行“批量识别”“导出”“删除”等操作。 1)实现批量识别实物答题卡,将需要识别的答题卡单独拍 照,然后全部导入程序进行识别,记录答题卡识别结果。 2 )实现答题卡模板导出功能,使用者可以重复导出答题卡。 3)实现删除答题卡模板功能,使用者可以随时删除不需要 的答题卡模板。 4)把实物答题卡识别结果与使用者定义的答案数据进行 比较、判断,并输出每张实物答题卡的得分和每道题的正确率 以及每个知识点的得分率。

标准答题卡模板设计

本系统所设答题卡标准模板如图所示,图中黑色圆块作 为整体定位锚点,最下边和最右边的黑色矩形作为学号区域和答题区的定位锚点,代表题目选项和学号选项位置的纵坐标和 横坐标。将答题卡模板生成时需要插入内容的区域添加为 书签。

三、系统实现

答题卡模板生成的实现

创建答题卡模板的流程如图所示。

1、题目数量溢出判断

判断题目数量n是否超出限制,即题目数量是否在答题卡 模板的题目容量范围。根据答题卡标准模板的设计,用于插入 题目选项内容的区域共23行、19列,在每一行里,题号占一列, 每个选项占一列,两道题间的间距占一列,所以每道题所占列 数为选项数量s+2,特殊的,每行最后一题无须留出与下一题的间距,因此所占列数为选项数量s+1;假设每行能容纳n道题, 满足式:

 即:

 假设每类题型有x道题,每行最多放n道题,那么放完该类 m满足式:

答题卡识别的实现

答题卡识别,是把答题卡以照片形式导入,通过对图片的 一系列处理如转换灰度图、降噪、模板匹配、透视变换、区域投 影、膨胀腐蚀、阈值判定等,从而得出答题卡的识别结果,再与 标准答案数据比较,进行结果分析 。答题卡识别流程如图所示。

1、模板匹配

根据答题卡模板的设计规则,把答题卡分割成左上、左下、 右上、右下四个相等大小的区域时,每个区域上必然有且只有 一个黑色圆点,分别对4个区域进行模板匹配,就可以得出4个 整体定位锚点的坐标。在此以左上角的区域为例进行介绍。 在完成了对图像的灰度化、高斯滤波降噪、二值化后,进行 模板匹配,算法主要流程如图所示。

 1)OpenCV 提供模板匹配函数 matchTemplate 匹配模板块和输入图像 ,图a是左上区域原始图像,获得匹配结果图像,越亮的点匹配度越高,左上区域模板匹配结果如图b所 示。

2)归一化是把数据经过处理后限制在需要的一定范围内, 使得数据之间对比性明显。OpenCV提供函数normalize进行 归一化处理,图为对模板匹配结果做归一化处理。

3)OpenCV提供函数 minMaxLoc 在给定矩阵中获取最大和 最小值(包括它们的位置)。通过该函数可得匹配度最高的点 的坐标,再经过计算得出该点在原图的坐标。 实现模板匹配获取 4 个整体定位锚点坐标的主要伪代 码为:

void getImageTag(Mat 匹 配 原 图 , Mat 原 图 局 部 图 片 ,
Point2f 坐标容器[])
{ double 宽 ←匹配原图.rows;
double 长 ←匹配原图.cols;
double tmpLoc[4][4] = { {0, 0},
{cols / 2, 0},{0, rows / 2},
{cols / 2, rows / 2} };
Mat tmpImg[4]; //区域:0左上,1右上,2左下,3右下
Mat resImg; //匹配结果图
double minVal, maxVal; //最小,大匹配值
Point minLoc, maxLoc; //最小,大匹配值坐标
for (int i = 0; i < 4; i++)
{ tmpImg[i] ← 匹 配 原 图 (Rect(tmpLoc[i] [0], tmpLoc[i] [1],
cols / 2, rows / 2));
matchTemplate(tmpImg[i], 原图局部图片, resImg, 5);
normalize(resImg, resImg, 0, 1, NORM_MINMAX, -1,
Mat());
minMaxLoc(resImg, &minVal, &maxVal, &minLoc, &max⁃
Loc, Mat());
坐标容器[i] = Point(maxLoc.x+ tmpLoc[i][0],maxLoc.y+tmp⁃
Loc[i][1]); }}

2、透视变换

透视变换(Perspective Transformation)是将图片投影到一个 新的视平面(Viewing Plane),也称作投影映射(Projective Map⁃ping) 。 透视变换的数学公式为:

 u、v是原始图片坐标,对应得到变换后的图片坐标x、y,其 中x = x'/w',y = y'/w'。展开之后可以得到:

OpenCV 提供 getPerspectiveTransform 函数和 warpPerspec⁃ tive 函数进行透视变换 。getPerspectiveTransform 根据答题卡 标准模板中4个整体定位锚点的坐标与前文模板匹配所得到 的 4 个坐标计算出透视变换矩阵,warpPerspective 根据所得透 视变换矩阵对图片执行透视变换。透视变换效果如图所示。

3、区域投影计算

学号选项和答案选项的定位,是通过答题底部和最右侧的 黑色矩形来确定坐标。

投影计算的思路是计算区域中每一行或每一列非零像素 的数量,再通过判断阈值和区域连续确定每个黑色矩形的起始 坐标。 区域投影计算流程如图所示。

 以对底部黑色矩形区域的处理为例,根据模板匹配得到的 整体定位锚点坐标,对底部黑色矩形区域进行裁剪。

为了方便计算像素灰度值,须将图片处理成只有零(黑色) 和非零值(白色),可以通过图像二值化的方法实现。图像二值 化就是将图像上的像素点的灰度值设置为两个值,一般为 0, 255或者指定的某个值,这样将使整个图像呈现出明显的黑白 效果,从而能凸显出目标的轮廓

OpenCV 提供了 countNonZero 函数获取非零像素点数,而 需要进行识别的是黑色矩形(灰度值为0),所以先将图像使用 大津法OTSU进行二值化,凸显黑色矩形区域。 再将图像用反二进制阈值法 THRESH BINARY INV 进行 二值化,达到置目标区域灰度值非零,效果如图所示。

 对二值化处理后的图像以列为单位进行遍历,通过count⁃ NonZero得出每一列的非零像素点数,并按顺序记录到容器,然 后遍历容器里的数据,相邻两个数据做比较,设差异阈值为10, 如两个数据存在差异,则视此处为边界,并记录数据。 实现投影计算的主要伪代码为 :

void getBordLocation (Mat 源图片, vector<int>& 上沿坐标容
器, vector<int>& 下沿坐标容器, int 排列类型, int 间距值)
{
Mat 原图片 ← 源图片.clone();
vector<int> 像素值记录容器;
int 干扰线条最大宽度 ← 10;//线条宽度影响
if 0 ==排列类型 then
{
for i ← 0 to原图片列数
{
Mat 单列数据←原图片.col(i);
int 非零像素数量 ← countNonZero(单列数据);
像素值记录容器.push_back(非零像素数量);
}
}
else {
for i ← 0 to 原图片行数
{ Mat单行数据←原图片.row(i);
int非零像素数量← countNonZero(单行数据);
像素值记录容器.push_back(非零像素数量);
}
}
//整形,去除长度小于gap的零的空洞
if 像素值记录容器.size()<=间距值 then return;
for i ← 0 to像素值记录容器.size() – 间距值
{ if 像素值记录容器[i] >=干扰线条最大宽度&& 像素值记
录容器[i + 间距值] >=干扰线条最大宽度 then
{
for j ← i to i + 间距值
{
像素值记录容器[j] =干扰线条最大宽度;
}
i = i + 间距值 - 1;
}
}
//记录上下沿
for i ← 1 to像素值记录容器.size()
{
if (像素值记录容器[i - 1] <干扰线条最大宽度&&像素值
记录容器[i] >=干扰线条最大宽度)
上沿坐标容器.push_back(i);
if (像素值记录容器[i - 1] >=干扰线条最大宽度&&像素
值记录容器[i] <干扰线条最大宽度)
下沿坐标容器.push_back(i); }
if 上沿坐标容器.size() <下沿坐标容器.size() then
上沿坐标容器.insert(上沿坐标容器.begin(), 0);
}
}

4、比较阈值判断是否填涂

经过对图片的一系列处理以及锚点坐标的获取,可以找到 选项所在的区域,并判断是否填涂。要从答题卡获得的有学号 信息和作答信息,在进行判断之前先把透视变换后的图片二值 化,然后对图像进行膨胀和腐蚀,可以更进一步降噪,凸显目标 区域 。如图所示。

四、系统测试

软件开发过程中对软件进行测试是必要的,在软件开发过 程中需要进行多次测试,查明系统中的bug,然后分析和解决问 题,以便最大限度地改善软件。

答题卡模板生成测试

在答题卡模板的生成中,影响题目排序的关键数据是单选 题数量、单选题选项数量、多选题数量、多选题选项数量、判断 题数量,在不计较其他输入的情况下用表1的数据进行答题卡 模板生成测试。测试效果显示,答题卡模板生成结果与理论预 测结果一致。

答题卡识别测试

本系统总共进行了46次答题卡识别的实验,其中有37次 完全识别;5次遗漏识别,原因是填涂模糊;4次无法识别,原因 是照片阴影太重;0次误判识别,识别率80.4%。答题卡识别完 成后会给出分析结果,可以根据设置的数据来验证结果是否正 确,在此列举其中一次试验结果。 表2是测试答题卡预测结果数据,

图a是答题卡,图b是答题卡识别效果。

下图是答题卡识别分析结果:

其显示结果与表测试答题卡预测结果数据表的相应数据完全一 致,且在识别过程中对填涂区域的识别也非常准确。

五、结束语

本系统实现了用户自定义生成答题卡Word模板,通过对 图片的一系列处理来识别答题卡,并对识别结果进行统计分 析。由于是以拍照的形式获取答题卡图片,所以照片的完整 性、清晰度越高,识别的准确率就越高。因此,在答题卡损坏、 模糊的情况下,识别结果出错是难以避免的。

实现效果图样例

答题卡生成及批阅分析系统:

我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。

毕设帮助,疑难解答,欢迎打扰!

最后

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
机器视觉人脸识别技术是一种通过计算机视觉算法对人脸进行识别和验证的技术。在课堂签到系统的设计与实现中,可以使用OpenCV作为开源的机器视觉库,来进行人脸识别相关的操作。 首先,系统需要进行人脸数据的采集和注册。可以通过摄像头捕捉学生的人脸图像,并使用OpenCV提供的人脸检测算法进行人脸检测和人脸特征提取。提取的特征信息可以存储到数据库中,在后续的识别过程中进行比对使用。 其次,在签到过程中,系统可以实时从摄像头获取学生的人脸图像,并使用同样的人脸检测和特征提取算法,对比提取到的特征与注册时的特征进行匹配。如果匹配度高于设置的阈值,即认为该学生准确签到,系统记录签到时间;否则,认为签到失败。 为了提高系统的准确度和鲁棒性,还可以考虑引入一些优化措施。例如,可以对图像进行灰度化和归一化处理,去除光线和尺度的影响;同时,可以使用人脸识别技术中的降维算法,如主成分分析(PCA)或线性判别分析(LDA),提取更具代表性的特征。 此外,为了保证系统的安全性和保护学生个人隐私,系统还可以采用加密存储人脸数据,只允许授权用户进行操作,并设置相应的权限控制机制。 综上所述,基于机器视觉人脸识别技术的课堂签到系统的设计与实现中,使用OpenCV作为机器视觉库,可以通过人脸检测和特征提取等操作实现学生的人脸识别和签到功能。系统可以采集注册学生的人脸数据,并在签到过程中实时匹配识别,提高签到的准确度和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值