首页 > 编程知识 正文

机器阅卷视频,机器阅卷是怎么阅卷

时间:2023-05-03 08:31:24 阅读:164104 作者:15

本文了解作者南慕伦,CMU计算机的视觉方向,允许描述自动化阅卷,具有很好的参考意义。

33559 www.zhi Hu.com/question/35720340/answer/262160679? UTM _ medium=social UTM _ source=Weibo【该系统缺少手动评估可能错误情况的过程。 】

版权信息项目的内容公开在github仓库的地址。

3359 github.com/normanyahq/ke jinyan野性的白云sqdxmy,方河清的快乐戒指

改卷网站http://www.kejinyan.com/成立日期2017-04-26 ~2019-07-05

版权公司:上海穆伦信息科技有限公司

法定代表人:快乐戒指

电话: 13120918920

地址:浦东新区南汇新城镇环湖西二路888号c楼

背景

我纯情心的钥匙都是西南小城镇的大学老师。 从有记忆的时候开始,每次去他们的期末考试,他们都要花好几天时间改卷子。 这几年,步入中年的他们开始老花,复盘越来越辛苦,特别是我妈妈自己非常近视,有时需要学生帮忙。 但每份试卷都是40到60题的选择题,爸爸还在上公共课,学生更多。

今年过年,我刚毕业还没进公司,就闲呆在家里,请两位研究生同学来家里玩,他们也“顺便”改了选择题。 过程很无聊,得吃几碗螺丝粉才能拿回来。 然后突然意识到,我们三个可能出现了家乡历史上计算机水平最高的三个大脑。 虽然还在从CMU毕业后做智能信息系统,但是我觉得必须做这种交给计算机的工作,所以很自然地就想到了将其自动化。

痛点

答题卡读卡器虽然由来已久,但有几个主要原因。 纯情的爱心摇滚在他们学校一直没用。

设备太贵

淘宝答题卡读卡器5000元起。 反腐败,再加上审计收紧,需要统一政府购买这个价格的设备,价格会更高,购买这个设备的手续会变得非常复杂。

需要专用答题卡

这进一步提高了使用成本,一般一张答题卡的购买价格为1分钱。

使用复杂

纯情的哈特洛克已经在用电脑了,但现在现有软件的操作界面让老一辈的教师望尘莫及,有些大学需要雇人操作答题卡读卡器。

初期调查和设计正好在我系接触过图像和视频处理技术,在CMU的时候,有一个课程项目是识别手写公式并转换成Latex,个人有一定的技术积累。 正好签证定期被行政审查,暂时不能进公司,但是新年期间开始设计这样的系统。 关于以上三点,该系统需要以下特性。 我一起进行了调查。

设备尽可能简单易用

以前,我的印象是扫描还是手动模式,需要扫一张,然后再放一张……

我到了CMU才看到自动送纸(Auto Document Feeder )扫描仪。

同时,我在网上看了一下价格。 自动送纸扫描仪最便宜的新品是国产的清华紫光-F20S,只要邮寄1150元,这个价格自己掏腰包也能承受。 而且,50个纸盒已经足够用于一般教育了。

普通打印机就能打印的黑白答题卡

常见的答题卡边框通常做成红、绿、蓝三种颜色:

彩色纸答题卡支持计算机的RGB颜色显示方式。 由此,在进行图像处理时,可以用阈值法简单地筛选掉边框等非回答的内容,只留下学生涂抹的结果。 这样,根据周围的定位块决定学生的填写内容。

一旦变成黑白,就需要将学生所填内容的答案从背景中分离出来。 虽然这实际上会稍微提高难度,但是考虑到以前在CMU的课程设计中做过同样的事情,在技术上是可以解决的。

操作步骤尽可能简单

因此,需要尽量简化使用流程,避免使用者进行选择。 尽可能地只需要三个步骤。 通过选择文件——处理3354,可以获得结果

除此之外,我觉得整体看起来有点厉害。

正如我之前说的,我在CMU做过类似的事情。 大多数项目的效果是将手写公式转换为Latex公式。

手写式的识别看起来很酷,但实际上在做了以下两个假设之后一点也不难。

文字之间没有粘连

兄弟的字母基本保持在水平线上

难点是有等号、阶乘号码和I、j这样分为两个部分的文字,需要合并。 ……能否集成到“启发式”中,或者假设他们不存在太难了。 …() )科学就是这样进步的。 基础性、积累性的工作大部分由ysdyt解决,挑战性的工作大部分由天才解决。

识别这个区块。 机器学习的库现在太打包了,基本上收集数据扔进无脑训练就可以了。 更何况,这只是机器学习入门必读教程——识别手写数字的升级版。 你只需要多收集一些手写数据就可以了。

我制作了这样的表格,让纯情的心在课上让学生填写:

手写采集卡随后使用几种边框检测算法和字符提取算法建立数据集,并对模型进行了训练

型的测试效果也还行。

所以我刚开始做的时候野心比较大,想把填涂式改为手写式的答题卡,因为选项最多只有ABCDEFG和勾叉。

实现


有了之前的想法,我就开始动手实现。

答题卡

第一步肯定是核心功能,识别。第一版的答题卡设计我已经找不到了,但是大致思想跟第二版差不多,学号部分也是手写的:

手写版答题卡

不定向选择题之所以设计成这样,是因为实际使用中让学生写多个选项的时候不连笔这个假设很难成立:一方面自然是学生书写习惯的问题;另一方面,即便学生书写没有问题,也可能会因为纸张、扫描仪的问题意外出现一些笔迹的断裂和符号的粘连。

一旦出现笔迹断裂、字母粘连的情况,就需要加入切割算法——这恰恰是验证码中一个比较难解决的问题——更何况,验证码识别器只需要30%的准确率就能凑合用,达到60%的准确率就基本满足需求了,而评卷时的准确率是以人的识别准确率(95%以上)作为标准的。

同时,就算能够成功切割,往往也会引入一些变形,对识别准确率造成负面影响。

所以,这个表格定下来后,大致处理方法是这样:提取出三块最大的矩形,然后利用框线检测方法去掉框线,提取出表格中的字母,标准化(居中、放大、填补边缘)之后利用上次收集的手写字符数据训练分类器并识别。

然而,这时候我才发现,训练出来的模型能够平均达到97%的准确率,但是具体测试总会出现一些匪夷所思的识别错误,有点类似One pixel attack for fooling deep neural networks(针对深度神经网络的单像素攻击)里面提到的问题。虽然97%的准确率也算可以接受了,因为要是我自己来改看走眼一两个很正常,但是我自己很不满意,毕竟如果有人刚好因为一个识别错误冤枉挂了那是很不好的(明明没过的过了那就不管了)。而且有一部分识别错误发生在学号部分,这会导致登记分数的时候需要额外的人工核对工作,尽管把学号改成填涂式能够解决这个问题。

主要原因我估计是数据集不够(总共加起来有效样本才一千来份),加上采集数据时示例字体是我手写的,可能很多人的写法会受到我的影响,然而真正测试的时候则会用自己的写法。再进行大规模采集的话,估计比较困难,所以我最后放弃了手写识别这个想法。

由于基于框线的定位在实际使用中并不是特别让人满意,我也没想出来什么简单可靠的算法,于是我打算另辟蹊径,寻找更好的定位的方法。普通识别卡是在角上放色块,但是色块本身也比较容易受干扰,调试起来也比较麻烦,还是不方便。

经过反复思考,第三版答题卡设计成了这样: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190506204125803.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQxNzEwOTE=,size_16,color_FFFFFF,t_70)

第三版答题卡

没错,就是这么简单粗暴。角上借鉴了二维码的定位块技术。二维码还有一个名称叫做Quick Response Code,原因就在于这三个定位块,它能够让程序很方便地定位二维码的区域。定位这三个方块的算法有很多,具体实现我参照的是这篇文章:OPENCV: QR CODE DETECTION AND EXTRACTION

大致的原理是对图像进行边沿检测,然后根据边沿的嵌套关系提取出候选块,最后抽出最可能的三个。

然后四周的黑块用于辅助答案的定位。其实,因为扫描仪扫描的图像基本没有形变,所以可以不需要的。但是当时考虑到我需要一次性设计多种满足不同需求的答题卡,所以采取了这种实现。后来想想其实如果在提交的时候已经知道答卷类型,其实完全可以去掉这些黑色辅助定位方块,以降低印刷难度(有的打印机在打印黑色色块的时候会有油墨不均匀的情况)和油墨消耗。

之后妈妈在年级搞英语能力竞赛,试用了一下,识别上没有什么大问题,但是这张答题卡的设计上却有些问题:由于空间不足的关系,我把学号拆成了两栏,内部横向填写,两栏却是纵向摆放,同时既有手写的框,又有填涂的框(主要想顺便采集手写数字的数据)。这样很多学生在填涂学号的时候就出现了如下情况:

写了学号没填涂

只填上面一栏学号,同时前五位学号手写,后五位学号填涂

漏填学号某一位

……

真是感叹,你永远不知道用户会以什么奇怪的姿势用你的产品。于是,最后我把答题卡设计成了这样: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190506204145615.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQxNzEwOTE=,size_16,color_FFFFFF,t_70)

最终版全页答题卡

这样之后,学生犯错误的概率大大降低,也基本达到效果了,有时间的话,下一步就是把四周的黑色定位块给去掉。

评卷系统

答题卡设计好之后,识别算法基本上水到渠成,只不过实际情况中会有一些琐碎的细节和特殊情况需要仔细调较。

下一步就是评卷系统了,从提交答案、答题卡到汇总成绩,要尽可能简单。首先我不想让他们安装任何软件,因为这会引入额外的操作步骤,每多一步他们就会困惑一点;其次,我要使用他们尽可能熟悉的操作模式和软件来完成我的功能。

于是我最后采用的是:扫描成PDF文件——网页提交——网页预览——下载详表的模式。

我自己买回来测试的是富士通(Fujitsu) IX500的扫描仪,这个扫描仪实在是太给力了,一键扫描保存成PDF,这给我省了很大的事。

后面的网页处理看似简单,但是实际上琐碎的事情非常多:

首先说网页提交吧,一个班扫描出来的文件往往3~20M大小(有的扫描仪扫出来的灰度模式,没有压缩),考虑到国内网站需要备案,而且国内运营商的上传带宽都小得可怜,所以我得把服务器放在大陆之外,这样一来上传时间过长会导致他们忍不住刷新,所以必须至少有一个上传进度条,更好的实现是切片上传。

其次,尽管识别算法已经足够强壮,但是仍然免不了一些识别不了的情况,比如学生把识别块给整个涂黑了(真有这样的学生),印刷缺陷等等,这时候必须把识别出错的答题卡给列出来,悄无声息地出错然后把学生的答题卡吞了就不好了。

还有,因为大部分情况下最后的个人总分、单项总分、平均分、每一题的正确率等信息都是需要汇总给教务处的,我需要一个方便他们提取这些信息的方式。

说起来上一次写这种网站还是三年前在大摩实习的时候,当时前端Bootstrap+jQuery,后端Django还是主流,本着先让它跑起来的目的我沿用了当时的架构,虽然可能已经有一点老了,但是至少一切都在我的控制之内。

具体实现细节没太多可以说的,三个字概括的话就是:糙快猛,要是在公司写这种代码的话是会被拖出去打的,就给大家简单看看效果吧。

提交界面

预览界面1

预览界面2

Excel

值得一提的是,我在做Excel输出的时候费了很大的力气,因为我想做到以下几点:

保证数据一致性,即老师改了答案和分值,后面学生的得分也要改

支持筛选,比如提交了全年级的答卷,如果筛选了某个班级的学生,对应的统计数据也得改

支持多选题少选给一半分,不选错选给0分的情况

尽可能使表格好看、通用、易用

为了保证一致性,我需要使用大量的公式,大部分公式还是比较简单,主要是公式多了工作比较琐碎,可谓牵一发而动全身。但是有少部分公式要写起来还是非常蛋疼的,主要原因是我想避免使用VBA,因为大部分老师的电脑安全设定是屏蔽VBA的,这大大增加了工作量,比如答案分值是一列,而学生的得分是一行,EXCEL里行列乘法是没有的。

还有第三点,大家可以想想怎么用EXCEL的公式实现这一点,我的实现方法非常的猥琐……

实战


经过三个月的开发和不停地调较,现在整个系统的稳定性和识别率都非常不错,后来给我中学老师拿去试用反馈也非常好,这可能是我目前为止自己做的最有用的一个项目了。

只是纯情的心锁最后想拿去期末考试使用的时候,遇到了学院里面的一些阻力,某些认识了十几年的人以种种奇怪的理由作梗,最后我妈妈三番五次打报告,一再声明不要钱,并请计算机系的老师写书面测试证明了之后才同意使用。爸爸那边则只在他自己教的班级使用,不过这也就够了。

好在我写的代码质量还是可以的,成功经受住了接近两千多份的试卷的考验,办公室的老师也纷纷表示好使,写试卷分析也爽多了。他们也进一步提供了一些意见,比如最后每个学生的选项需要打印存档确认,所以需要用下划线标识对的、错的、部分对的各种细节等等。

总结


从工程上说,这其实算是我写的第一个比较大的实用型项目,给我最大的感受就是,你永远不知道客户以什么姿势用你的产品。在发布前进行内部封测还是很必要的,的的确确能够发现很多的问题和改进建议。

我最近在读《人月神话》,里面提到一点就是,如果说程序需要一倍的工作量,那么到程序系统产品组件需要九倍的工作量。我第一次切切实实感受到,此言不虚。写识别算法的时候尤其感受到回归测试的重要性——然而我一直没有写回归测试,因为工作量有点太大了。

回到题主的问题,什么时候觉得读书有用?我曾经回答过这样一个问题:知乎用户:为什么软件工程专业要学习大学物理?这个回答引起了很多人的讨论,包括我一些很厉害的同学也有表示反对的。这一次,我觉得又可以增加一条论据了:在答题卡识别的算法中我使用了仿射变换,如果不是学过线性代数、大学物理、机器视觉,我可能会卡在那儿很久甚至放弃。

可能因为纯情的心锁是老师的缘故,我一直觉得读书、做题、工作是一件很有意思的事情,有时候理论的确枯燥,但是绝大部分理论都是出自生活中非常有意思的问题。所以,就知识而言,它一定是有用的,只是需要在合适的地方发挥作用。

本科有一个同学是学临床医学的,但是他课余在心理学上花费了很多的时间。我们当时就问,心理学毕业的话,除了能做心理医生还能干嘛呢?他跟我说,很多啊,心理学有一个分支叫工程心理学,专门研究人、机器与环境的关系。很多毕业生都跑去飞机制造业,研究飞行员的心理,以设计出尽可能让飞行员操纵简单、不犯错的飞行控制系统。很多产品功能上完全一样,但是就是交互上有天壤之别,比如前面我提到的答题卡中学号的排布,以及飞机上操纵杆的位置,等等。

所以说,保持眼界开阔,多接触新知识,往往在意想不到的时候会对自身有所帮助。

另一方面,说实话,这个项目拉给任何一个合格的一流计算机专业毕业生来做应该都不是问题,现实中这样不需要太多技术就可以改进和提高的东西还有很多。哈哈,“改变世界”的门槛似乎并没有那么高嘛。很多人不太喜欢kkdzjy老师的“鸡汤”,但是我很欣赏他自传《世界因你不同》中的信念,并且努力践行。女朋友一直说我是情怀党,做这个项目我慢慢感觉到,可能还真是。我很享受这种利用自己所学来产生正面影响的事情,哪怕只是一丁点。这一次,当满头华发的爸妈不再费劲地批阅选择题,远在他乡的我感到了一点点慰藉,我的所学似乎赚回了一点点学费。

最后,罗哩罗嗦写了这么多,非常感谢你能够听我分享这个故事。:)

其它


其实,我现在最想做的功能是手机拍照了之后就能识别,就像全能扫描王那样的,不需要专门扫描仪。这样会大大方便一些没法购买ADF扫描仪的老师。

但是手机拍照最大的问题是成像质量不稳定。可能会由于光照的原因导致现有的二值化算法不适用,同时在不同情况下会有形变和畸变,形变尚好解决,只需要一个坐标变换,但是畸变就难了。我有一些初步的想法,基于网格变换搞一个估价函数然后做梯度下降来寻找最优变换,但是这个工作量比较大也不知道效果如何,感觉这应该是一个很有趣的问题。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。