不定向选择题之所以设计成这样,是因为实际使用中让学生写多个选项的时候不连笔这个假设很难成立:一方面自然是学生书写习惯的问题;另一方面,即便学生书写没有问题,也可能会因为纸张、扫描仪的问题意外出现一些笔迹的断裂和符号的粘连。
一旦出现笔迹断裂、字母粘连的情况,就需要加入切割算法——这恰恰是验证码中一个比较难解决的问题——更何况,验证码识别器只需要30%的准确率就能凑合用,达到60%的准确率就基本满足需求了,而评卷时的准确率是以人的识别准确率(95%以上)作为标准的。
同时,就算能够成功切割,往往也会引入一些变形,对识别准确率造成负面影响。
所以,这个表格定下来后,大致处理方法是这样:提取出三块最大的矩形,然后利用框线检测方法去掉框线,提取出表格中的字母,标准化(居中、放大、填补边缘)之后利用上次收集的手写字符数据训练分类器并识别。
然而,这时候我才发现,训练出来的模型能够平均达到97%的准确率,但是具体测试总会出现一些匪夷所思的识别错误,有点类似(针对深度神经网络的单像素攻击)里面提到的问题。虽然97%的准确率也算可以接受了,因为要是我自己来改看走眼一两个很正常,但是我自己很不满意,毕竟如果有人刚好因为一个识别错误冤枉挂了那是很不好的(明明没过的过了那就不管了)。而且有一部分识别错误发生在学号部分,这会导致登记分数的时候需要额外的人工核对工作,尽管把学号改成填涂式能够解决这个问题。
主要原因我估计是数据集不够(总共加起来有效样本才一千来份),加上采集数据时示例字体是我手写的,可能很多人的写法会受到我的影响,然而真正测试的时候则会用自己的写法。再进行大规模采集的话,估计比较困难,所以我最后放弃了手写识别这个想法。
由于基于框线的定位在实际使用中并不是特别让人满意,我也没想出来什么简单可靠的算法,于是我打算另辟蹊径,寻找更好的定位的方法。普通识别卡是在角上放色块,但是色块本身也比较容易受干扰,调试起来也比较麻烦,还是不方便。
领取专属 10元无门槛券
私享最新 技术干货