【手写识别计算器】项目总结和介绍
一 、项目的总体思路
小组实现了一个基于手写识别的计算工具。其基本功能如下:
①实现多个数字的手写识别
②实现加减乘除符号的识别
③输出手写识别的应用程序
起初,微软的工程师为我们提供了Mnist数据集和单个手写数字的窗体程序。尽管如此,小组仍面临着一些挑战。一是多个数字的分割识别,另一个是运算符号的识别(因为原数据及相关开源网站的资源都难尽人意)。对于第一个难点,从微软工程师那学习了分割算法的大致思路后,组员结合已有的图像处理知识,编写了相关函数。对于第二个难点,团队成员做了一个头脑风暴,整理出了两种方案:
①由于没有很多的字符数据集,所以另辟蹊径,使用了工程师们提供的在线训练模型的平台。(https://www.customvision.ai/projects)这个平台中,所训练的数据集无需很多,且能够简单地下载获取离线模型。
②利用tensorflow中的例程 mnist.py ,手工绘制运算符图片,编程扩充数据集,然后转换成符合 mnist.py 要求的数据集进行训练,得到一个可以识别数字和运算符的 model ,然后直接对分割后的图像进行识别。
二 、项目的时间进度
第一周周四:开始项目,小组组员挑选合适的课题并从软件工程师那里得到相关建议。
第一周周六:成功实现了图像分割算法,并能输入模型得到较为满意的识别结果。
第一周周日:小组成员并行地开展工作:一方面,用简单的数据集在云平台上反复训练,并取得了较为理想的训练效果。另一方面,将手工绘制的图像按照要求格式并入mnist数据集,改进原有的模型。
第二周周一:增加表达式的后续处理算法。两种模型都能较好地完成任务。
三 、过程中遇到的困难
方案一:
①并未找到 api 的 confidence index 接口,只能得到概率最大的tag;
②模型对部分字符识别率偏低,存在过拟合和欠拟合的问题,需要反复训练。
方案二:
①mnist数据集的解析和扩充有一定的难度;
②数据集的大小难以控制。原有的mnist数据集中包括了上万个数字,故而运算符数据也需要有一个合适的量。此外,数据集并非随机收取到的,降低了模型的普适性。
四、 数据集处理代码
①从28*28的图片生成mnist数据集:
②用来还原生成的mnist数据集
五 、项目的成果展示
(见附录)
六、AI工具的反馈
①模型的预测概率对外是不可见的,难以通过设置阈值增加程序的鲁棒性。
②mnist训练模型需要的数据集庞大,给扩充带来了一定的困难。
七 、项目总结
①利用开源api可以实现功能丰富的应用程序。
②在处理大量数据时,要有备份数据的习惯。
③在生成大量数据时,要先写几个测试一下看看是否可用,避免生成大量不可用的数据。
(附:解决方案访问https://github.com/Handwrite/Handwrite_caculator)
④小组得分评价:(岳锴:21,耿子钢:20,袁靖松:19)