当前位置: 首页 > 编程日记 > 正文

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

640?wx_fmt=jpeg

作者 | 红色石头

转载自 AI有道(id:redstonewill)


让我们不妨先来盘点下从 2016 年起过去三年间 Google  I/O 开发者大会亮相的重磅 AI 产品:


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


640?wx_fmt=png


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


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


640?wx_fmt=png


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


项目介绍


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


640?wx_fmt=jpeg


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


整个系统流程图如下:


640?wx_fmt=png


1. 预处理


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


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


640?wx_fmt=png


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


640?wx_fmt=png


2. 字符识别


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


640?wx_fmt=png


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


640?wx_fmt=png


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


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


实验结果


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


640?wx_fmt=png


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


640?wx_fmt=png


项目开源


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


https://github.com/Roujack/mathAI


GitHub 上公开了系统代码。


640?wx_fmt=png


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


例如图像预处理代码:


640?wx_fmt=png


例如字符识别代码:


640?wx_fmt=png


运行程序


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


1. 网页模式


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


640?wx_fmt=png


2. 接口模式


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


640?wx_fmt=png


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



优点与缺点


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


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


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


(*本文为 AI科技大本营转载文章,转载请联系原作者)


CTA核心技术及应用峰会


5月25-27日,由中国IT社区CSDN与数字经济人才发展中心联合主办的第一届CTA核心技术及应用峰会将在杭州国际博览中心隆重召开,峰会将围绕人工智能领域,邀请技术领航者,与开发者共同探讨机器学习和知识图谱的前沿研究及应用。


更多重磅嘉宾请识别海报二维码查看,点击阅读原文即刻抢购。添加小助手微信15101014297,备注“CTA”,了解票务以及会务详情。


640?wx_fmt=jpeg


推荐阅读

  • “搞垮” 微博服务器?每天上亿条用户推送是如何做到的

  • 百度宣布:搜索业务总裁向海龙离职,另回购10亿美元股份

  • AI画家——毕业设计大杀器之Flask

  • 干货 | 超实用的PyTorch常用代码段合集

  • 60K!刚面完Python!这个被Oracle裁掉的程序员求职刷爆全网!

  • 厉害!女学生偷师男子学校,变身区块链开发工程师

  • 真壕!腾讯员工平均月薪 7 万!

  • 如何使用「番茄法」高效的写算法题?

  • 深扒! 币安被盗的7074.18枚比特币去哪了?

  • 这家公司的 IoT ,你可千万别低估!


640?wx_fmt=png

点击阅读原文,了解CTA核心技术及应用峰会

相关文章:

黄聪:IE6下用控制图片最大显示尺寸

div img { max-width:600px; width:600px; width:expression(document.body.clientWidth>600?"600px":"auto");overflow:hidden; } ◎ max-width:600px; 在IE7、FF等其他非IE浏览器下最大宽度为600px。但在IE6中无效。 ◎ width:600px; 在所有浏览器中…

漫画:有趣的海盗问题 (完整版)

————— 第二天 —————海盗分金币问题:有5个海盗,获得了100枚金币,于是他们要商量一个方法来分配金币。商议方式如下:1. 由5个海盗轮流提出分配方案。2. 如果超过半数海盗(包括提出者)同意该方案&…

【Qt】error: undefined reference to `vtable for MainWindow‘

1、问题描述 在写一个demo时,想尽量简单,就把MainWindow类的定义和实现都写在main.cpp中,结果编译时报错: main.cpp:-1: error: undefined reference to `vtable for MainWindow :-1: error: collect2.exe: error: ld returned 1 exit status2、原因分析 错误信息vtable…

Sql Server:创建用户并指定该用户只能看指定的视图

1,在sql server中选择好要操作的数据库2,--当前数据库创建角色 exec sp_addrole seeview--创建了一个数据库角色,名称为:[seeview]3,--分配视图权限 GRANT SELECT ON veiw TO [角色] --指定视图列表 指定seeview这个角色可以查看的视图表名称&#xff1…

10 款可以找回删除文件的好软件

电脑突然死机或者断电,硬盘数据丢失?U盘重要文件不小心删掉了? 电脑中毒,文件丢失或无法读取? 系统突然崩溃,重要文件丢失?使用计算机最怕的就是象以上这些突如其来的灾难性故障导致重要数据的丢失,误操作、计算机病毒的***和软、硬件故障等天灾人祸…

万万没想到,逛B站也能学编程了

作者 | 徐麟,某互联网公司数据分析狮转载自 | 数据森麟(id:shujusenlin)前言很多人提到B站,首先想到的就会是二次元或者鬼畜,上个月,我们公众号也发表了一篇关于B站鬼畜视频的文章:《…

【Qt】Qt再学习(十一):图形视图框架(Graphics View Framework)的一个小demo

1、简介 使用的主要类:QGraphicsTextItem、QGraphicsScene、QGraphicsView。 QGraphicsTextItem继承自QGraphicsObject,而QGraphicsObject继承自QObject和QGraphicsItem; QGraphicsItem可以是2D曲面上的图形项目,例如线条,矩形,文本甚至自定义项目,本例中演示的文本QGr…

国产海翼号水下滑翔机首次应用于北极科考

中国第九次北极科学考察队7月28日在白令海公海区域成功布放我国自主研发的“海翼”号水下滑翔机。这是我国自主研发的水下滑翔机首次在白令海布放,也是首次应用于中国北极科考。 北京时间28日5时23分,考察队队员们将“海翼”号水下滑翔机缓缓送入海中。在…

高性能网站性能优化与系统架构(ZT)

转载请保留出处:俊麟 Michael’s blog (http://space.itpub.net/7311285/viewspace-97) 我在CERNET做过拨号接入平台的搭建,而后在Yahoo&3721从事过搜索引擎前端开发,又在MOP处理过大型社区猫扑大杂烩的架构升级等工作,同时自…

非常全面的AutoML资源,看这个就够了!

整理 | Rachel责编 | 琥珀出品 | AI科技大本营(id:rgznai100)深度学习的发展促进了相关应用的涌现。但是,深度学习模型往往具有非常大的参数搜索空间,为了保证模型的效果,经常需要机器学习专家耗费大量的时…

【Qt】Qt再学习(十二):QGraphicsItem

1、简介 QGraphicsItem是用于场景QGraphicsScene中在所有图形项的基类,它是一个纯虚类,不能直接使用。子类化QGraphicsItem后,需要重新实现图形项的几何形状、碰撞检测、绘画实现、事件处理。 常用图形项: 类名图形项QGraphicsEllipseItem椭圆QGraphicsLineItem直线QGrap…

一堆乱七八糟绝不正经的排序算法

原文 索引 猴子排序 钻石排序(戴蒙德排序) 恶魔排序 珠排序 地精排序(怂货排序) 智能设计排序 1. 猴子排序 (提供者cy1306110516) 猴子排序的思想源自于著名的无限猴子定理。 既然猴子们能敲出《哈姆雷…

好久没有更新了!

好久没有更新博客了,主要是因为本人在从事信息化监理行业,遇到了困惑的事情,不时地在问自己,选择这个行业,对吗? 从事这个行业,已经换了两家公司,对于信息化监理事业却秉承不同的理念…

多人开发情况下的字符串本地化

项目开发中,独立开发的还是少数。经常会有多人开发的情况,这种情况,如果多人同时操作本地化文件,极有可能会存在冲突。另一方面,我们又不希望自己的本地化文件受到对方的污染,也就是说,我们不希…

【Ubuntu】制作usb启动盘安装ubuntu18.04时报错:“failed to load ldlinux.c32”

1、问题描述 使用UltraISO制作ubuntu18.04操作系统的usb启动盘后,按照时报错: failed to load ldlinux.c32ubuntu16.04、ubuntu14.04没有遇到这个问题。 2、原因 未知 3、解决方法 参考博客 https://blog.csdn.net/tnaig/article/details/81139887…

清华AI学堂班:姚期智担任首席教授,2019年首批招收30人

整理 | 琥珀出品 | AI科技大本营(id:rgznai100)清华流传一句话,半国英才聚清华,而清华一半英才在“姚班”。据不完全统计,自 2005 年开班至今,“姚班”已有10位毕业生进入学界执教斯坦福大学、普…

php函数get_magic_quotes_gpc详解

2019独角兽企业重金招聘Python工程师标准>>> set_magic_quotes_runtime是用来设置PHP 环境配置的变量 magic_quotes_runtime 值。 0-关闭 1-打开 程序中检测状态用get_magic_quotes_runtime,返回 0 表示关闭本功能;返回 1 表示本功能打开。若magic_quote…

掌声送给TensorFlow 2.0!用Keras搭建一个CNN | 入门教程

作者 | Himanshu Rawlani译者 | Monanfei,责编 | 琥珀出品 | AI科技大本营(id:rgznai100)2019 年 3 月 6 日,谷歌在 TensorFlow 开发者年度峰会上发布了最新版的 TensorFlow 框架 TensorFlow2.0 。新版本对 TensorFlow…

【Qt】Qt再学习(十四):QGraphicsView

1、简介 QGraphicsView提供显示QGraphicsScene的功能,它继承自QAbstractScrollArea,因此它还是一个带滚动条的窗口,这样可以实现只场景的一部分。还可以创建多个QGraphicsView来显示同一个QGraphicsScene,类似 QTableView、QTreeView和QListView的显示,官方专业的描述是“…

6月27日任务 配置Tomcat监听80端口、配置Tomcat虚拟主机、Tomcat日志

2019独角兽企业重金招聘Python工程师标准>>> 16.4 配置Tomcat监听80端口 1. vim /usr/local/tomcat/conf/server.xml Connector port"8080" protocol"HTTP/1.1" 修改为Connector port"80" protocol"HTTP/1.1" 2. /usr/loca…

Excel导入SQL数据库完整代码

protected void studentload_Click(object sender, EventArgs e){//批量添加学生信息SqlConnection conn DB.dataBaseConn();//链接数据库conn.Open();try{string fileurl typename(studentFileUpload);//调用typename方法取得excel文件路径DataSet ds new DataSet();//取得…

33关Python游戏,测试你的爬虫能力到底及格不?

作者 | 苏克1900责编 | 胡巍巍转载自高级农民工(ID: Mocun6)最近在网上看到一个非常有意思的 Python 游戏通关网站,一共有 33 关,每一关都需要利用 Python 知识解题找到答案,然后进入下一关。很考验对 Python 的综合掌…

【Qt】Qt再学习(十五):关于paintEvent、QPainter学习这一个demo就够了

1、描述 关于绘画事件paintEvent和绘制类QPainter的使用,推荐参考QtCreator中自带的示例basicdrawing。通过这个例子就能掌握QPainter的所有基本用法。下面是这个例子的几张截图:

HTTP缓存——304与200 from cache

个人博客原文地址 HTTP与缓存相关的字段 1. 通用字段 字段名称释义Cache-Control控制缓存具体的行为PragmaHTTP1.0时的遗留字段,当值为"no-cache"时强制验证缓存Date创建报文的日期时间(启发式缓存阶段所用)2. response字段 字段名称释义ETag服务器生成资…

一个多年网络工程师总结的工作实用经验

转载自:51CTO下载频道 1、 交换机选购指南l 设备基本指标:网络接口类型、用户可用插槽数、端口密度。l 设备功能指标:VLAN划分、堆叠、单播和组播协议支持、可网管。l 设备性能指标:背板带宽、包转…

【Qt】Qt再学习(十六):QObject::connect: Cannot queue arguments of type ‘QString‘

1、问题描述 跨线程使用信号和槽时,如果是非const的引用传参,就会报如下的错误: QObject::connect: Cannot queue arguments of type QString& (Make sure QString& is registered using qRegisterMetaType().)2、测试示例 #include <QCoreApplication>

微软提出极低资源下语音合成与识别新方法,小语种不怕没数据!| ICML 2019

作者 | 谭旭转载自微软研究院AI头条&#xff08;ID: MSRAsia&#xff09;编者按&#xff1a;目前&#xff0c;人类使用的语言种类有近7000种&#xff0c;然而由于缺乏足够的语音-文本监督数据&#xff0c;绝大多数语言并没有对应的语音合成与识别功能。为此&#xff0c;微软亚洲…

面试准备--7.31

22222转载于:https://www.cnblogs.com/czlovezmt/p/9398015.html

那些年,让我面试头大的几个排序算法,今天终于搞懂了!

作者 | 逆流的鱼yuiop转载自何俊林&#xff08;ID:smartyuge&#xff09;算法上&#xff0c;最基础的就是排序算法&#xff0c;几乎在面试中&#xff0c;或多或少会要求你手写一些基础算法。今天鱼哥带大家这些基础算法回顾下。快速排序介绍&#xff1a;快速排序&#xff08;Qu…

【天线】天线基础:名词解释

1、定向天线和全向天线 先上图&#xff0c;第一张图是定向天线&#xff08;一根棍子加一块板&#xff09;&#xff0c;第二张图是全向天线&#xff08;一根棍子&#xff09; 网上的几种解释&#xff1a; 全向天线就是一个棍子&#xff0c;围绕棍子有一圈儿信号&#xff1b;定…