智能识别计算器

2017 DDC中国区选拔赛作品 | 嵌入式视觉

inky   项目发起人  06-16

1.通过usb摄像头获取纸上的方程,省去了手动输入方程的麻烦。
2.通过图像识别获得方程输入,然后通过算法解得方程的根。因为时间紧张,我们就只实现了一元一次方程和一元二次方程按我们的标准输入的解。图像的识别用的是tesseract ,是在arm中实现的。
3.通过oled显示方程的解,可视化,接口也是在arm中完成的,所以很慢。

项目详情

项目创意灵感
我们的智能计算器在解方程的时候需要手动输入,非常麻烦。
设计特色创新
机器视觉与计算器的结合
系统原理功能
机器学习实现手写字体识别,利用fpga强大的并发运算的能力。但实际从usb获取的数据流本身就非常小,所以实际如果用usb摄像头就没什么意义。
利用牛顿法等算法获得方程的解。
通过oled屏显示。
完成情况概述
1.从usb拿到图片信息大概要花去5秒左右
2.同过arm识别图片5秒左右
3.oled显示10秒左右,这里吐槽一句用python发数据跑的实在是慢。
制作周期分工
赵同学负责图片获取,解方程模块,都完成的很好。
沈同学负责fpga图像的识别,自己写的识别算法挂了。python写的oled驱动跑起来太慢。
展望项目未来
我们真的很想做好这个项目。
1.usb摄像头可以改用hdmi接口输入数据流。
2.fpga直接拿到图片信息,完成识别任务
3.arm从fpga获取识别结果。
4.解方程
5.在fpga中设计oled发送模块(pmod设计的spi总线的oled模块与我们的oled模块不兼容),arm只需改变寄存器中的数据。
收获感悟分享
一开始打算自己提取手写字体的扫描特征来进行识别,不打算用机器学习,但到了实际实现过程中却发现自己用的就是机器学习。我将自己的手写样例像素二值化后,进行扫描,记录每行每列特定位置(如1/4 2/4 3/4)所经过的黑色像素次数。用这个序列来进行手写字体的区别。本以为就10个数字,识别成功率会很高,实际发现这单单10个数字识别成功率不到10%。然后我去查找了手写识别机器学习部分的相关算法,发现自己的算法其实仅仅只是机器学习提取的特征值的一部分,那些95%识别成功率的算法都是综合了多种特征值提取算法(如字体重心位置,笔画的密度等特征),给这些算法添加了一定的判定权重之后才能有那么完美的识别率,非常复杂。
鉴于上述情况,我们小组决定使用别人的图像识别库:'tesseract 。
还有oled驱动的相关内容,因为要用pynq自带的usb摄像头的图像获取库,因此不能自己搭建fpga——我们要写fpga的内容现在必须从零建起,因为我们还没能拿到base.bit文件的原理图。现在是arm直接调用arduino的IO口,等暑假有空了还想试一下在fpga里面自己写了一个图形信息的发送模块。到时候arm只要修改fpga中的数组信息,fpga自己实现实时发送,应该可以很快。
因为考试没有时间了,fpga实现图像识别这一块也只能等暑假再补了。为了应付作业就先这样了。
项目采用平台:

我要评价