毕业实习报告
题 目:使用计算机视觉方法对答题卡进行识别
院 系: 软件学院
专 业: 软件工程 __________
年 级: 2019 级 __________
学 号:_______221900124______________
姓 名: 汪辉阳 __________
指导教师: 陈昱 __________
实习地点: 软件工程系_______ ___
2023 年 1 月 8 日
正文
1. 研究的问题
答题卡识别是机器视觉研究中的一项关键的内容,也是图像处理以及人工智
能研究的一个关键的方向。本项目针对具有大量客观题的答题卡识别任务场景,
设计了一套利用填涂点特征信息进行填涂信息识别的算法。该算法首先对采集的
图像信息进行二值化、滤波、倾斜校正等预处理,其次综合利用模板匹配、灰度
等信息以及训练好的图形分类的模型对目标图像进行识别,最后得到识别结果。
使用到了 OpenCV-Python 工具包以及 pytorch 深度学习的框架,识别出选择题
的填涂结果和学号,提高试卷选择题评分的智能化水平,节约人员的时间和精力。
2. 课题背景
随着国民经济水平的飞速发展,家长对于孩子的教育越来越重视。由于现在
的教育信息化的发展,云计算、大数据、物联网等技术的完善成熟,各个学校的
教育硬件资源越来越丰富,可在考试方面,普通的学校和老师无法完全使用答题
卡进行考试,大量的阅卷无法避免,教师费神劳力却不能得到解决。我便以《使
用计算机视觉方法对答题卡进行识别》这一题目作为我的实习选题。
3. 课题目的
提高答题卡改卷的效率。解决传统改卷中大量重复繁琐的工作使改卷老师劳
神费力的问题,解放生产力。减轻教师阅卷负担、提高教学质量、推动考试教学
的信息化进程。
4. 意义
使用新兴的计算机视觉技术和深度学习技术,改变传统的答题卡评卷方式,
省去无意义的重复的人工劳动,解放生产力,也提高答题卡评卷的效率。
5. 范围及研究目标
5.1. 使用的技术范围
OpenCV:OpenCV 的全称是 Open Source Computer Vision Library,是一个
跨平台的计算机视觉处理开源软件库,支持与计算机视觉和机器学习相关的众多
算法。OpenCV 可用于开发实时的图像处理、计算机视觉以及模式识别程序。
OpenCV 基于 C++实现,同时提供 python, Ruby, Matlab 等语言的接口。
OpenCV-Python 是 OpenCV 的 Python API,结合了 OpenCV C++API 和 Python 语言
的最佳特性。OpenCV 可以在不同的系统平台上使用,包括 Windows,Linux,OS,
X,Android 和 iOS。OpenCV 具有完善的传统计算机视觉算法,涵盖主流的机器
学习算法,同时添加了对深度学习的支持。
Pytorch:Pytorch 是 torch 的 python 版本,是由 Facebook 开源的神经网
络框架,专门针对 GPU 加速的深度神经网络(DNN)编程。Torch 是一个经典的
对多维矩阵数据进行操作的张量(tensor )库,在机器学习和其他数学密集型
应用有广泛应用。与 Tensorflow 的静态计算图不同,pytorch 的计算图是动态
的,可以根据计算需要实时改变计算图。作为经典机器学习库 Torch 的端口,
PyTorch 为 Python 语言使用者提供了舒适的写代码选择。
5.2. 研究目标
学习并掌握 OpenCV 相关 api 的使用方法,了解 api 背后的原理。学习并掌
握 pytorch 图像分类模型的训练过程,并训练自己的模型,应用到项目中。
设计一个用计算机视觉相关技术进行答题卡识别的用户接口,可以识别出答
题卡中填涂的答案和学号。
6. 主要成果
6.1. 答题卡裁剪出选择题和学号填涂部分
答题卡中最重要的信息就是填涂的选择题和学号,本项目的目的也是通过答
题卡的图片,识别出填涂的选择题和学号。具体思路,先对识别图片的四个定位
点,根据定位点定位图片,再通过计算机视觉的一些操作过滤掉图片的一些细节
之后,将答题卡裁剪成一些小区域,再识别这些小图片中的选择题和学号的填涂
部分的图片,再分别对选择题和学号的填涂图片进行识别,得到填涂的结果。
通过灰度处理、开操作、高斯滤波、边缘检测等操作之后过滤答题卡图片中
的大部分细节,提取到了答题卡的轮廓。通过这些轮廓可以提取答题卡四个角落,
方便定位。得到的轮廓如图 1 所示。
图 1 答题卡预处理之后得到的轮廓
使用 OpenCV 的 findContours 函数找出边缘图片中的轮廓。根据轮廓得到图
片的外接矩形,再根据矩形裁剪图片,将裁剪的图片使用 vgg16 图像识别模型对
图片进行识别,判断是否属于定位点,用这种方法确定答题卡的四个定位点。得
到的四个角落定位点如图 2 所示。
图 2 识别到的四个角落点位点(图中使用红色标注)
由于输入的图片不一定是正常的、方便识别的角度进行拍摄,所以需要对图
片进行一个透视变换,方便后面的识别。根据得到的四个定位点计算答题卡四个
角落的坐标,计算答题卡的宽度和高度,再使用 OpenCV 的
getPerspectiveTransform 函数进行透视变换,得到答题卡的填涂区域的图片。
透视变换之后得到的图片如图 3 所示。
图 3 经过定位和透视变换之后得到的答题卡图片
得到答题卡填涂部分的图片之后,再经过灰度处理,开操作,二值化,轮廓
检测等操作之后,根据轮廓得到轮廓的外接矩形,再根据外接矩形裁剪图片,再
使用 vgg16 图像识别模型对图片进行识别,识别答题卡中的选择题填涂部分和学
号填涂部分。从答题卡中裁剪出来的选择题和学号填涂部分的图片如图 4、图 5
所示。
图 4 从答题卡中裁剪出来的选择题填涂部分的图片