Bubble sheet multiple choice scanner and test grader using OMR, Python and OpenCV
转自国外opencv教育网站免费教程:
https://www.pyimagesearch.com/2016/10/03/bubble-sheet-multiple-choice-scanner-and-test-grader-using-omr-python-and-opencv/
使用OMR,Python和OpenCV的气泡板多选扫描仪和测试分级机
在过去的几个月里,我已经收到大量的请求登陆我的收件箱,以使用计算机视觉和图像处理技术构建一个泡泡板/类似Scantron的测试阅读器。
虽然我在机器学习和深度学习这个系列中玩得很开心,但如果我说这个小小的项目并不是一个短暂的,欢迎的休息时间,我会 说谎。我最喜欢运行PyImageSearch博客的部分之一是演示如何使用计算机视觉构建 问题的实际解决方案。
事实上,这个项目 如此特别的原因在于我们将结合以前许多博客文章中的技术 ,包括构建文档扫描程序,轮廓排序和透视变换。利用从以前的帖子中获得的知识,我们将能够快速完成这个气泡板扫描仪和测试分级机。
你看,上周五下午我快速上了一个示例泡泡试卷,打印出几份副本, 然后开始编写实际实现的编码。
总的来说,我对这个实现非常满意,我认为你绝对可以使用这个bubble bubble grader / OMR系统作为你自己项目的起点。
要了解有关利用计算机视觉,图像处理和OpenCV自动评定气泡测试表的更多信息, 请继续阅读。
寻找这篇文章的源代码?
跳到下载部分。
使用OMR,Python和OpenCV的气泡板扫描仪和测试分级机
在本博文的其余部分,我将讨论光学标记识别(OMR)究竟 是什么。然后,我将演示如何使用严格的计算机视觉和图像处理技术以及OpenCV库来实现气泡板测试扫描仪和分级机 。
一旦我们实施了OMR系统,我将在一些示例考试中提供我们的考试评分员的样本结果,包括那些充满邪恶意图的考试。
最后,我将讨论当前气泡板扫描仪系统的一些缺点,以及我们如何在未来的迭代中对其进行改进。
什么是光学标记识别(OMR)?
光学标记识别(简称OMR)是 自动分析人工标记文档并解释其结果的过程。
可以说,OMR最着名,易于识别的形式是 泡泡纸多项选择测试,与你在小学,初中甚至高中时所采用的测试不同。
如果您不熟悉“气泡纸测试”或“Scantron测试”的商标/公司名称,它们只是您作为学生的多项选择测试。考试中的每个问题都是多项选择 - 您使用#2铅笔标记对应于正确答案的“气泡”。
在填写大学录取申请之前,您经历过的最值得注意的泡泡板测试(至少在美国)是在高中期间参加SAT考试。
我 相信 SAT使用Scantron提供的软件来执行OMR和年级学生考试,但我很容易在那里出错。我只注意到这一点,因为Scantron在美国98%以上的学区使用。
简而言之,我想说的是,光学标记识别有一个 巨大的市场,并且能够对人类标记的形式和考试进行评级和解释。
使用OMR,Python和OpenCV实现气泡板扫描仪和分级器
现在我们已经了解了OMR的基础知识,让我们使用Python和OpenCV构建一个计算机视觉系统,可以 读取和 评估气泡板测试。
当然,我将提供大量的视觉示例图像,以便您可以 准确理解我正在应用的技术以及 我使用它们的原因。
下面我列出了一个填写泡泡板考试的例子,我已经为这个项目整理了一个:
![](https://www.pyimagesearch.com/wp-content/uploads/2016/10/omr_test_01.png)
图1:我们将在开发测试扫描仪软件时使用的填充气泡板的示例。
当我们完成构建测试分级器的步骤时,我们将使用它作为示例图像。在本课程的后面部分,您还可以找到其他样本考试。
我还将空白考试模板作为.PSD(Photoshop)文件包含在内, 以便您可以根据需要进行修改。您可以使用本文底部的 “下载”部分下载代码,示例图像和模板文件。
构建气泡板扫描仪和平地机的7个步骤
这篇博客文章的目标是使用Python和OpenCV构建一个气泡表扫描程序和测试分级程序。
为实现这一目标,我们的实施需要满足以下7个步骤:
- 步骤1:检测图像中的检查。
- 步骤#2:应用透视变换以提取自上而下的鸟瞰视图。
- 步骤#3:从透视变换检查中提取气泡集(即可能的答案选项)。
- 步骤#4:将问题/气泡排序成行。
- 步骤#5:确定每行的标记(即“冒泡”)答案。
- 步骤#6:在我们的答案键中查找正确的答案,以确定用户的选择是否正确。
- 第7步:重复考试中的所有问题。
本教程的下一部分将介绍我们算法的实际 实现。
使用Python和OpenCV实现泡泡板扫描程序
要开始,请打开一个新文件,将其命名为 test_grader 。py ,让我们开始工作:
<div id="crayon-5d52be9f4eb30930014621" class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" style="margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important; height: auto;"><div class="crayon-toolbar" data-settings=" show" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><span class="crayon-title">Bubble sheet scanner and test grader using OMR, Python and OpenCV</span><div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><div class="crayon-button crayon-nums-button crayon-pressed" title="Toggle Line Numbers"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-plain-button" title="Toggle Plain Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-expand-button" title="Expand Code" style="display: none;"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="Open Code In New Window"><div class="crayon-button-icon"></div></div><span class="crayon-language">Python</span></div></div><div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;"></div><div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 12px !important; line-height: 15px !important; z-index: 0; opacity: 0; overflow: hidden;"># import the necessary packages
http://www.taodudu.cc/news/show-5701660.html
相关文章:
- 安利!快速识别图像光学标识!Aspose.OMR助你获取图像中的数据
- 示例:教你在.NET应用程序中创建OMR工作表扫描仪软件
- 面向对象延伸至SQL/OMR
- Patch:Aspose.OMR for .NET 22.11.X
- Aspose.OMR for .NET 22.11.X Crack
- OMR数据查询
- django的OMR
- 人工智能项目实战-使用OMR完成答题卡识别判卷
- 百度网盘关闭同步空间的方法
- Hololens2眼镜视角内关闭CPU框与空间网格
- oracle回滚表空间的操作
- oracle查找不到表空间,Oracle 一些表空间问题的处理
- oracle查看pdb表空间,管理与使用PDB的表空间
- linux开启关闭删除交换空间
- 春节临近 青海彩民喜获双色球万元大礼包
- 瑞虎迎春,开源新年礼包天天送,立即打卡集好礼!
- 元宵节礼包来了,程序员的福利来了!!!
- 程序员春节回家装逼反击指南!
- 春节红包
- 某休闲游戏春节活动数据复盘
- 春节大礼包|刷题技巧+80道Leetcode
- 支付宝企业认证失败,原因及解决方法
- 支付宝摘下客服界的“奥斯卡”奖 支付宝的D+服务厉害在哪?
- 支付宝资金预授权开通客户端授权与案例讲解
- 如何调用支付宝接口
- 支付宝6轮面试经验
- 从两通客服电话看支付宝和快钱
- 关于支付宝集成在APP中
- 支付宝踩坑记 | 如何帮公司避免一场在线支付事故
- android x86 支付宝,亿级APP支付宝在移动端的高可用技术实践
Bubble sheet multiple choice scanner and test grader using OMR, Python and OpenCV相关推荐
- Java multiplechoice,雅思听力八大题型之Multiple Choice题型篇
雅思听力考试有8大题型,上海新航道雅思培训班会一一为大家分享,今天为大家带来的是Multiple Choice题型,一起来看看吧! 雅思听力八大题型之Multiple Choice题型篇 1.题型介绍 ...
- 论文阅读笔记(二):Bridging Video-text Retrieval with Multiple Choice Questions
文章目录 前言 一.Introduction 二.Method 1.双编码器结构 2.Multiple Choice Questions(MCQ) 3.目标函数 4.模型结构 4.1视频编码器 4.2 ...
- Knowledge-Driven Distractor Generation for Cloze-Style Multiple Choice Questions翻译
摘要 在本文中,我们提出了一种新的可配置框架,可以自动为开放领域完型填空类型的多项选择题生成若干选项.该框架包含一个通用知识库,以高效地构建一个小型的选项候选集,还包含一个特征丰富的 learning ...
- python wx模块下choice列表框值怎么更新_wx python
一.静态文本控件 wx.StaticText(parent, id, label, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, n ...
- python中multiple函数_关于多处理:在Python中将多个参数传递给pool.map()函数
本问题已经有最佳答案,请猛点这里访问. 我需要一些方法来使用pool.map()中接受多个参数的函数.根据我的理解,pool.map()的目标函数只能有一个iterable作为参数,但是有没有其他参数 ...
- python CV 趣味项目 答题卡识别
英文原文来自 Bubble sheet multiple choice scanner and test grader using OMR, Python and OpenCV 说到答题卡,满满的都是 ...
- 万字长文|如何定义“失败的产品经理”
前言:总有一种错觉,别人家的产品经理都是神一样,动不动改变世界的那种.就没有失败的产品经理吗? 提出问题的背景 前阵子刚刚和阿里.百度的产品经理聊过产品这块,总结输出了<腾讯产品流程>和& ...
- choice() 函数
描述 choice() 方法返回一个列表,元组或字符串的随机项. 语法 以下是 choice() 方法的语法: import randomrandom.choice( seq ) 注意:choice( ...
- 【python】choice函数
来源:http://www.runoob.com/python/func-number-choice.html 描述 choice() 方法返回一个列表,元组或字符串的随机项. 语法 以下是 choi ...
最新文章
- Carrier frequency 和 EARFCN的关系
- 【解决】联想thinkpad E40 如何禁用触摸板
- TCP连接的建立和终止
- springmvc 使用fastjson 处理 json 数据时中文乱码
- 电脑销售技巧_汝州市,如何查询楼盘详细销售数据?官方公布,精确到房间
- mysql动态扩展_动态可扩展查询MYSQL5.7JSON+虚拟列+Mybatis
- linux qgis编译安装,QGIS安装
- 来兄弟连了,你还在用面向过程唱高音歌曲的你就OUT了
- Linux NTP服务器配置
- Eclipse和JDK版本对应关系
- IDCC2018|上海数据港股份有限公司副总裁、数据中心首席架构师王海峰:标杆管理驱动数据中心建设变革...
- ajax poker,《使命召唤15》大逃杀模式介绍 人物解锁方法一览
- 在Textview中获取指定文字位置(兼顾网址链接和emoji表情),并在其附近展示图片
- 在树莓派上安装麦克风监测音量
- H5移动端如何推送消息
- IB学校书单合集请收藏好
- Oracle 查询临时表空间
- 查询2021高考成绩广西排名,2021广西高考成绩排名顺序查询,广西省高考全省排名怎么查...
- MSCKF 2.0 理论推导以及能观性分析
- MySQL实现排名、分组筛选、TopN问题