手写识别项目总结(7.15)
近一周完成了之前计划表上的两个任务并有额外完成部分:
一:分辨率问题的处理
最初我们认为对程序进行预处理的效果很差是因为程序的不完善,在对程序修改了之后发现还是无法解决预处理效果不好的问题。然后我们转换了一个角度,认为有可能是在软件拍照上传环节图片失真所导致的。我们对程序进行修改后,使其可以直接读取计算机内的图片进行处理,再与通过软件上传图片处理的效果进行对比后验证了我们的猜想。软件上传图片过程中是将图片压缩再传到电脑上进行处理的,测试中一张普通2M左右的照片通过软件上传进行处理时图片被压缩到了仅仅3k,图片的质量大大降低,所以预处理方面总是无法得到想要的结果。
二:文件可以处理多个图像并进行数据清洗。
1.此部分我们的程序主要完成的功能:
①对一个含框的算式进行处理并识别其中的数字
②:在①的基础上对多个算式进行识别,主要是先对多个算式分割成单一算式然后分别单个处理识别。
实验所用算式样例:
(便于实验:算式间隔恒定,方框统一为正方形)
2.此过程中所遇到的一些问题及解决方法:
①同一竖列中相邻算式的间隔不可变化,由于程序分割是根据算式坐标定位,若变化则对算式的分割有一定影响
②单列算式题量不能太多(目前按照要求只实现单列五个算式为最好效果),因为程序分割部分算法仍存在一些不可消除的误差,已经将误差降到最低
③拍照时相机若不与卷面平行,则拍出来的试卷边框不为理想中的正方形(或长方形),容易对程序的算法处理部分产生偏差,对结果会有一定的影响。理想认为此产品投入使用时用扫描仪对试卷进行扫描上传,所以此部分的问题及上一个模块内的分辨率问题对实际使用并不会产生太大的影响
④算式分割时对单个方框内数字的提取总是无法提取出完整的数字,而总产生数字与方框下边框相连的地方,从而对数字的二值化处理及识别产生影响。问题原因:对程序分割和数字提取出的坐标错误。
⑤其他部分:由于学姐之前完成的是手写识别部分,直接在软件上手写的字体较粗,图片二值化后较容易识别。但是拍照上传模块与直接手写模块较不同,拍照(扫描)传输到程序上的字体较细,所以识别率有所降低。这个地方的问题我们目前预想两种处理方法:
1)看能不能将二值化的数字加粗后进行识别,此方法算法较难实现;
2)扩充更多的数据库,以增加识别率,但是存在数据库越大程序的运算速度也会随之降低等问题。目前这方面问题仍在与学姐沟通寻求解决方法
附:项目组每个人测试100个数据的统计表(可能会有一些类似书写不规范现象等问题影响识别率)
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 合计 |
A | 80% | 70% | 100% | 70% | 70% | 100% | 30% | 80% | 40% | 30% | 67% |
B | 90% | 90% | 100% | 70% | 70% | 100% | 40% | 80% | 50% | 30% | 72% |
C | 90% | 90% | 100% | 70% | 80% | 100% | 50% | 80% | 50% | 40% | 75% |
D | 90% | 80% | 100% | 60% | 80% | 100% | 40% | 70% | 30% | 30% | 68% |
E | 80% | 90% | 100% | 80% | 80% | 100% | 40% | 70% | 40% | 40% | 72% |
总识别率 | 86% | 84% | 100% | 70% | 80% | 100% | 40% | 80% | 42% | 34% | 71.6% |
三:额外完成部分
在以上任务完成的基础上,由于之前程序的结构并不是很突出,所以我们开始对程序进行模块化处理,并添加一些便于使用者理解的注释。另外bug调试工作也正在进行中。(此部分的细化总结将在下一次项目总结中给出。)