神奇开源!mathAI 手写拍照自动能解高数题,还不快试试?

2019 年 6 月 14 日 计算机视觉life

点击上方“计算机视觉life”,选择“星标”公众号

重磅干货,第一时间送达

本文转载自AI有道


深度好玩!文章开始,先在草稿纸上写一道高数微积分题目给大家看看如何求解:



怎么算呢?趁着高数知识还没忘完,赶紧拿起纸演算起来。大部分人是这么做的。但是如果现在跟你说,可以用 AI 来做,你信吗?


现在就有这样一个 AI 程序,你只要轻松上传上面这张手写算术题,程序就能帮你自动分析,写出解题步骤和答案!你信吗?就像下面一样:



Amazing!有没有!今天就给大家介绍这个有趣的 mathAI 项目。它是一个拍照做题程序。输入一张包含数学计算题的图片,就会自动输出识别出的数学计算式以及计算结果。


项目介绍


该项目名为:mathAI,是一个自动计算手写公式的程序。作者是一名中山大学的学霸硕士小哥 Roujack,他的研究方向就是计算机视觉。



整个程序使用 Python 实现,具体处理流程包括了图像预处理字符识别数学公式识别数学公式语义理解结果输出


整个系统流程图如下:



1. 预处理


首先,需要对手写图片进行预处理。图片预处理以 OpenCV 作为主要工具。预处理的主要目的是把图片中的字符切割出来,同时避免无关变量对字符识别的影响。


预处理主要包括:灰度化、二值化、高斯滤波、字符切割与细化。



对图片预处理的效果如下图所示:



2. 字符识别


预处理之后,下一步就是对字符进行识别。选择的模型是卷积神经网络 LeNet5,因为不需要提取字符特征值,而且图像识别精确度高。



训练网络选用的数据集是国际数学公式识别比赛数据集(CROHME)。CROHME 数据集具有海量字符集图片,而且图片类型与实际输入非常相似。每种字符有 400 张图片,其中 60% 的图片用于训练,40% 的图片用于测试。



接下来就是结构分析和语义分析。


总的来说,对于数学公式的识别,主要是将识别出的独立的字符组织成计算机能够理解的数学公式(这里的数学公式就是纯字符的可求解的数学计算题)。大概的方法是使用编译原理的算符优先法和递归下降法进行实现。 然后根据属性文法的值传递思想,将数学公式的值计算出来。最后使用 Python 的 Matplotlib 库把计算过程和答案打印出来。


实验结果


模型训练完成之后,作者验证了字符识别的准确率:



然后,作者对 160 道测试题进行测试,系统做对 127 道题目,正确率为 79.38%。可以说相当不错了!



项目开源


真正令人激动是作者已将这个项目的源码发布在了 GitHub 上,供大家查看。开源地址为:


https://github.com/Roujack/mathAI


GitHub 上公开了系统代码。



其实,这是一个半开源的项目,目前上传的版本只能处理较简单的一维算术表达式(如果想要识别更加复杂的表达式,可以参考数学公式识别的论文)。可以参考的代码是前面字符识别部分以及整个算法处理框架。


例如图像预处理代码:



例如字符识别代码:



运行程序


要运行这个系统分为两种,一种是网页模式,一种是接口模式。


1. 网页模式


在项目的网页上,输入图片,即可获得处理结果。



2. 接口模式


项目有一个 solver 的 Python package。里面的 solve 方法封装了整个系统。其功能是输入一张图片路径,将输出计算题识别过程和计算结果。



作者还专门录制了一个视频,讲解如何在网页模式上运行程序并验证正确率。视频放在下面,感兴趣的可以看一下。



优点与缺点


优点:这是一整套拍照做题的算法框架,同时能够处理多种多样的计算题,目前市面上还没有看到实现。OCR 技术如此成熟的今天字符识别已经不算有挑战的东西了。


缺点:字符空间关系判断只用了人类启发式规则,图像预处理不够鲁棒,数学公式的结构识别算法不够完美(可以考虑使用二维文法来做)。系统还有很大的提升空间。


总的来说,这个程序相对比较简单,能够实现一般的手写图片微积分高数题,较复杂的还不能实现。但是该项目确实是一个有意思的尝试,相信作者也会不断优化。有兴趣的可以看一下,试一试你手写的算术题,看看准确率如何。

学术交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、算法竞赛、图像检测分割、人脸人体、医学影像、综合等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

推荐阅读

CVPR2019 | Decoders 对于语义分割的重要性
CVPR2019 | R-MVSNet: 一个高精度高效率的三维重建网络
CVPR2019 | SiamMask:视频跟踪最高精度
CVPR 2019 | 用异构卷积训练深度CNN:提升效率而不损准确度
CVPR 2019 | 人大 ML 研究组提出新的视频测谎算法
CVPR2019 | 医学影像:MIT 利用学习图像变换进行数据增强
CVPR 2019 | GeoNet:基于测地距离的点云分析深度网络
CVPR2019 | 中科大&微软开源:姿态估计新模型HRNet
CVPR 2019 | 京东提出 ScratchDet:随机初始化训练SSD目标检测器
CVPR 2019 | 微软亚研院提出用于语义分割的结构化知识蒸馏
CVPR2019 | 6D目标姿态估计,李飞飞等提出DenseFusion
CVPR 2019 | PointConv:在点云上高效实现卷积操作
CVPR 2019 | 图像压缩重建也能抵御对抗样本
CVPR 2019 | 神奇的超分辨率算法DPSR:应对图像模糊降质
综述 | CVPR2019目标检测方法进展


关注计算机视觉life,加星标,获取最新AI干货~


最新AI干货,我在看  

登录查看更多
1

相关内容

Python分布式计算,171页pdf,Distributed Computing with Python
专知会员服务
108+阅读 · 2020年5月3日
【新书】Pro 机器学习算法Python实现,379页pdf
专知会员服务
204+阅读 · 2020年2月11日
【机器学习课程】Google机器学习速成课程
专知会员服务
168+阅读 · 2019年12月2日
最全Python算法实现资源汇总!
AI100
3+阅读 · 2019年5月13日
100行Python代码,轻松搞定神经网络
大数据文摘
4+阅读 · 2019年5月2日
实战 | 图像矫正技术
计算机视觉life
5+阅读 · 2019年2月28日
从零开始一起学习SLAM | 神奇的单应矩阵
计算机视觉life
9+阅读 · 2018年11月11日
如何上手深度学习中的图像领域?有这个资源库就够了
数据挖掘入门与实战
5+阅读 · 2018年4月13日
Python | 拯救鉴黄师
计算机与网络安全
5+阅读 · 2018年2月17日
干货 | 卷积神经网络入门这一篇就够了
机器学习算法与Python学习
8+阅读 · 2018年1月16日
相似图片搜索的原理
数据库开发
9+阅读 · 2017年8月11日
Revisiting CycleGAN for semi-supervised segmentation
Arxiv
3+阅读 · 2019年8月30日
Arxiv
8+阅读 · 2018年5月1日
Arxiv
6+阅读 · 2018年4月4日
Arxiv
3+阅读 · 2018年3月21日
Arxiv
6+阅读 · 2018年1月14日
VIP会员
相关资讯
最全Python算法实现资源汇总!
AI100
3+阅读 · 2019年5月13日
100行Python代码,轻松搞定神经网络
大数据文摘
4+阅读 · 2019年5月2日
实战 | 图像矫正技术
计算机视觉life
5+阅读 · 2019年2月28日
从零开始一起学习SLAM | 神奇的单应矩阵
计算机视觉life
9+阅读 · 2018年11月11日
如何上手深度学习中的图像领域?有这个资源库就够了
数据挖掘入门与实战
5+阅读 · 2018年4月13日
Python | 拯救鉴黄师
计算机与网络安全
5+阅读 · 2018年2月17日
干货 | 卷积神经网络入门这一篇就够了
机器学习算法与Python学习
8+阅读 · 2018年1月16日
相似图片搜索的原理
数据库开发
9+阅读 · 2017年8月11日
相关论文
Top
微信扫码咨询专知VIP会员