讓我們不妨先來盤點下從 2016 年起過去三年間 Google I/O 開發者大會亮相的重磅 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 技術如此成熟的今天字符識別已經不算有挑戰的東西了。
缺點:字符空間關系判斷只用了人類啟發式規則,圖像預處理不夠魯棒,數學公式的結構識別算法不夠完美(可以考慮使用二維文法來做)。系統還有很大的提升空間。
總的來說,這個程序相對比較簡單,能夠實現一般的手寫圖片微積分高數題,較復雜的還不能實現。但是該項目確實是一個有意思的嘗試,相信作者也會不斷優化。有興趣的可以看一下,試一試你手寫的算術題,看看準確率如何。
-
神經網絡
+關注
關注
42文章
4771瀏覽量
100772 -
AI
+關注
關注
87文章
30896瀏覽量
269108 -
python
+關注
關注
56文章
4797瀏覽量
84690
原文標題:開源!mathAI手寫拍照自動能解高數題,還不快試試?
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論