讓我們不妨先來(lái)盤(pán)點(diǎn)下從 2016 年起過(guò)去三年間 Google I/O 開(kāi)發(fā)者大會(huì)亮相的重磅 AI 產(chǎn)品:
深度好玩!文章開(kāi)始紅色石頭先在草稿紙上寫(xiě)一道高數(shù)微積分題目給大家看看如何求解:
怎么算呢?趁著高數(shù)知識(shí)還沒(méi)忘完,趕緊拿起紙演算起來(lái)。大部分人是這么做的。但是如果現(xiàn)在跟你說(shuō),可以用 AI 來(lái)做,你信嗎?
現(xiàn)在就有這樣一個(gè) AI 程序,你只要輕松上傳上面這張手寫(xiě)算術(shù)題,程序就能幫你自動(dòng)分析,寫(xiě)出解題步驟和答案!你信嗎?就像下面一樣:
Amazing!有沒(méi)有!今天就給大家介紹這個(gè)有趣的 mathAI 項(xiàng)目。它是一個(gè)拍照做題程序。輸入一張包含數(shù)學(xué)計(jì)算題的圖片,就會(huì)自動(dòng)輸出識(shí)別出的數(shù)學(xué)計(jì)算式以及計(jì)算結(jié)果。
項(xiàng)目介紹
該項(xiàng)目名為:mathAI,是一個(gè)自動(dòng)計(jì)算手寫(xiě)公式的程序。作者是一名中山大學(xué)的學(xué)霸碩士小哥 Roujack,他的研究方向就是計(jì)算機(jī)視覺(jué)。
整個(gè)程序使用 Python 實(shí)現(xiàn),具體處理流程包括了圖像預(yù)處理、字符識(shí)別、數(shù)學(xué)公式識(shí)別、數(shù)學(xué)公式語(yǔ)義理解、結(jié)果輸出。
整個(gè)系統(tǒng)流程圖如下:
1. 預(yù)處理
首先,需要對(duì)手寫(xiě)圖片進(jìn)行預(yù)處理。圖片預(yù)處理以 OpenCV 作為主要工具。預(yù)處理的主要目的是把圖片中的字符切割出來(lái),同時(shí)避免無(wú)關(guān)變量對(duì)字符識(shí)別的影響。
預(yù)處理主要包括:灰度化、二值化、高斯濾波、字符切割與細(xì)化。
對(duì)圖片預(yù)處理的效果如下圖所示:
2. 字符識(shí)別
預(yù)處理之后,下一步就是對(duì)字符進(jìn)行識(shí)別。選擇的模型是卷積神經(jīng)網(wǎng)絡(luò) LeNet5,因?yàn)椴恍枰崛∽址卣髦?,而且圖像識(shí)別精確度高。
訓(xùn)練網(wǎng)絡(luò)選用的數(shù)據(jù)集是國(guó)際數(shù)學(xué)公式識(shí)別比賽數(shù)據(jù)集(CROHME)。CROHME 數(shù)據(jù)集具有海量字符集圖片,而且圖片類型與實(shí)際輸入非常相似。每種字符有 400 張圖片,其中 60% 的圖片用于訓(xùn)練,40% 的圖片用于測(cè)試。
接下來(lái)就是結(jié)構(gòu)分析和語(yǔ)義分析。
總的來(lái)說(shuō),對(duì)于數(shù)學(xué)公式的識(shí)別,主要是將識(shí)別出的獨(dú)立的字符組織成計(jì)算機(jī)能夠理解的數(shù)學(xué)公式(這里的數(shù)學(xué)公式就是純字符的可求解的數(shù)學(xué)計(jì)算題)。大概的方法是使用編譯原理的算符優(yōu)先法和遞歸下降法進(jìn)行實(shí)現(xiàn)。 然后根據(jù)屬性文法的值傳遞思想,將數(shù)學(xué)公式的值計(jì)算出來(lái)。最后使用 Python 的 Matplotlib 庫(kù)把計(jì)算過(guò)程和答案打印出來(lái)。
實(shí)驗(yàn)結(jié)果
模型訓(xùn)練完成之后,作者驗(yàn)證了字符識(shí)別的準(zhǔn)確率:
然后,作者對(duì) 160 道測(cè)試題進(jìn)行測(cè)試,系統(tǒng)做對(duì) 127 道題目,正確率為 79.38%??梢哉f(shuō)相當(dāng)不錯(cuò)了!
項(xiàng)目開(kāi)源
真正令人激動(dòng)是作者已將這個(gè)項(xiàng)目的源碼發(fā)布在了 GitHub 上,供大家查看。開(kāi)源地址為:
https://github.com/Roujack/mathAI
GitHub 上公開(kāi)了系統(tǒng)代碼。
其實(shí),這是一個(gè)半開(kāi)源的項(xiàng)目,目前上傳的版本只能處理較簡(jiǎn)單的一維算術(shù)表達(dá)式(如果想要識(shí)別更加復(fù)雜的表達(dá)式,可以參考數(shù)學(xué)公式識(shí)別的論文)??梢詤⒖嫉拇a是前面字符識(shí)別部分以及整個(gè)算法處理框架。
例如圖像預(yù)處理代碼:
例如字符識(shí)別代碼:
運(yùn)行程序
要運(yùn)行這個(gè)系統(tǒng)分為兩種,一種是網(wǎng)頁(yè)模式,一種是接口模式。
1. 網(wǎng)頁(yè)模式
在項(xiàng)目的網(wǎng)頁(yè)上,輸入圖片,即可獲得處理結(jié)果。
2. 接口模式
項(xiàng)目有一個(gè) solver 的 Python package。里面的 solve 方法封裝了整個(gè)系統(tǒng)。其功能是輸入一張圖片路徑,將輸出計(jì)算題識(shí)別過(guò)程和計(jì)算結(jié)果。
作者還專門錄制了一個(gè)視頻,講解如何在網(wǎng)頁(yè)模式上運(yùn)行程序并驗(yàn)證正確率。
優(yōu)點(diǎn)與缺點(diǎn)
優(yōu)點(diǎn):這是一整套拍照做題的算法框架,同時(shí)能夠處理多種多樣的計(jì)算題,目前市面上還沒(méi)有看到實(shí)現(xiàn)。OCR 技術(shù)如此成熟的今天字符識(shí)別已經(jīng)不算有挑戰(zhàn)的東西了。
缺點(diǎn):字符空間關(guān)系判斷只用了人類啟發(fā)式規(guī)則,圖像預(yù)處理不夠魯棒,數(shù)學(xué)公式的結(jié)構(gòu)識(shí)別算法不夠完美(可以考慮使用二維文法來(lái)做)。系統(tǒng)還有很大的提升空間。
總的來(lái)說(shuō),這個(gè)程序相對(duì)比較簡(jiǎn)單,能夠?qū)崿F(xiàn)一般的手寫(xiě)圖片微積分高數(shù)題,較復(fù)雜的還不能實(shí)現(xiàn)。但是該項(xiàng)目確實(shí)是一個(gè)有意思的嘗試,相信作者也會(huì)不斷優(yōu)化。有興趣的可以看一下,試一試你手寫(xiě)的算術(shù)題,看看準(zhǔn)確率如何。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4733瀏覽量
100420 -
AI
+關(guān)注
關(guān)注
87文章
29810瀏覽量
268109 -
python
+關(guān)注
關(guān)注
55文章
4767瀏覽量
84376
原文標(biāo)題:開(kāi)源!mathAI手寫(xiě)拍照自動(dòng)能解高數(shù)題,還不快試試?
文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論