小言_互联网的博客

用Python+OpenCV+PyQt开发的答题卡识别软件

551人阅读  评论(0)

用Python+OpenCV+PyQt开发的答题卡识别软件

软件使用视频

软件使用说明

软件设计思路

如何设置答案

界面风格

备注


这是一个可以识别定制答题卡的软件,它可以根据用户自定的答案来进行识别,校对正误并统计分数。该软件可以识别80道选择题,支持单选和多选。用户在识别前可以进行图像调整,去除噪点,以减少自然光带来的识别误差。

注:源码需付费下载,如不需要,可以就看下软件的设计思路,希望能够帮到你。

 

源码下载地址:

https://download.csdn.net/download/La_vie_est_belle/18371132

https://k.koudai.com/l1jMrXp5

 

软件使用视频

用Python+OpenCV+PyQt开发答题卡识别软件

 

软件使用说明

1. 下载源码后,首先安装依赖库。项目所用到的依赖库已经放在了requirements.txt文件中,大家可以使用以下命令进行安装(注意要先进入项目路径):

pip3 install -r requirements.txt

 

2. 安装完毕后,运行main.py即可打开软件:

 

3. 接着点击"请选择答案文件"按钮选择试卷的标准答案:

 

4. 然后点击"图像调整"按钮,调整图像识别参数,去除图像噪点:

  • 点击定位按钮,定位试卷:

  • 调整高斯模糊值以及Thresh阈值,去除噪点。可以看到学生填涂区域(准考证号和选择题)的很多噪点已经被清除了。接着点击确定参数按钮即可,之后在答题卡识别时都将以该参数调整图像:

 

5. 最后点击开始识别按钮进行识别,识别出来的准考证号和选择题填涂区域将显示在屏幕上:

注:每张答题卡都将会验证6次,验证次数可以在settings/config.json文件中修改。

在下方的表格中会显示学生的准考证号以及填涂答案。如果文本为红色,则说明学生的答案跟标准答案不匹配。如果单元格是空的话,说明学生未填涂或者光线导致的识别误差(可以再调整识别参数)。

 

6. 全部识别完毕后,点击"停止识别"按钮,再点击"导出成绩"按钮即可获得识别结果的Excel表格:

 

软件设计思路

1. 首先设计好答题卡模板,在四个边角加上定位标志。

2. 将答题卡模板各个区域涂黑,然后使用OpenCV获取到准考证区域和选择题区域所有的长方形轮廓,将所有目标填涂区域的轮廓坐标进行保存。因为图片质量很高,所以我们可以用OpenCV很容易地获取到描黑的填涂区域轮廓。此时程序所需的答题卡识别坐标文件就制作好了。

3. 之后我们识别学生填涂的答题卡时,可以从文件中直接读取坐标,然后让程序判断相应区域的非零值(None Zero Value),符合条件的话说明学生有填涂该区域。准考证区域的判断稍有不同,我们应该判断非零值最符合条件的一项,因为同一列只能填涂一个数字,描得最黑的那个区域上的数字即为目标数字。

4. 开始识别时打开了一个识别线程,该线程接收摄像头传过来的图像。在定位、优化、识别图片之后,通过PyQt信号将准考证号和选项返回给主窗口。

5. 识别出来后,将学生的准考证号和选项显示到PyQt的QTableWidge控件上,如果学生选项跟答案的字符串不一致,则标红并且扣除相应分数。

6. 最后利用openpyxl模块生成excel。

 

如何设置答案

请将标准答案放在txt文件中:

每一行填写一个答案,左侧为题号,中间为标准答案,右侧为该题分值。题号、标准答案和分值用-进行分隔。

如果某一题是多选的话,那只用把当中的选项修改下就行了:1-AB-1

 

界面风格

该软件还提供了三种不同的界面风格:

flatwhite.css:

lightblue.css:

psblack.css:

可以在main.py中修改以下代码来设置不同的风格:


  
  1. qss = read_qss( './res/qss/flatwhite.css')
  2. app.setStyleSheet(qss)

 

备注

1. 答题卡模板已经随源码放在项目文件夹中,可以自行打印出来填涂。

2. 答题卡四个边角处有长方形黑块,用于定位。所以在识别时一定要让摄像头看到这四个角。

3. 请在识别前调整图像,否则图像的噪点会很多,不利于识别。

4. 由于是在自然光下进行的识别(不是在机盒的暗室中),所以自然光有一定小概率导致识别误差。

5. 当因为光照无法识别到试卷时,用户可以用手轻轻移动碰触下试卷。

6. settings/config.json中的verify_num为验证次数,改大可以提高验证准确率,但会影响识别速度。stu_number_length为准考证号长度,该值可以依据学生考试时所用的准考证号长度来定,最大值为6。

7. 笔者采用的摄像头是720p的,即分辨率1280x720,请不要低于该分辨率。

8. 如果其他疑问或建议请私信我。


转载:https://blog.csdn.net/La_vie_est_belle/article/details/116396031
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场