mathAI基于 Python 的拍照做題程序
mathAI 是一個(gè)拍照做題程序。輸入一張包含數(shù)學(xué)計(jì)算題的圖片,輸出識(shí)別出的數(shù)學(xué)計(jì)算式以及計(jì)算結(jié)果。整個(gè)程序使用 Python 實(shí)現(xiàn),具體處理流程包括了圖像預(yù)處理、字符識(shí)別、數(shù)學(xué)公式識(shí)別、數(shù)學(xué)公式語(yǔ)義理解、結(jié)果輸出。
目前上傳的版本只能處理簡(jiǎn)單的一維加減乘除算術(shù)表達(dá)式(如果想要識(shí)別更加復(fù)雜的表達(dá)式,可以參考數(shù)學(xué)公式識(shí)別的論文)??梢詤⒖嫉拇a是前面字符識(shí)別部分以及整個(gè)算法處理框架。
本程序使用 opencv 對(duì)輸入的圖像進(jìn)行預(yù)處理,并將字符裁剪出來再歸一化成固定大小的矩陣。對(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ì)算出來。最后使用 python 的 matlibplot 庫(kù)把計(jì)算過程和答案打印出來。
優(yōu)點(diǎn):這是一整套拍照做題的算法框架,同時(shí)能夠處理多種多樣的計(jì)算題。OCR 技術(shù)如此成熟的今天字符識(shí)別已經(jīng)不算有挑戰(zhàn)的東西了。
缺點(diǎn):字符空間關(guān)系判斷只用了人類啟發(fā)式規(guī)則,圖像預(yù)處理不夠魯棒,數(shù)學(xué)公式的結(jié)構(gòu)識(shí)別算法不夠完美(可以考慮使用二維文法來做)。 系統(tǒng)還有很大的提升空間。
評(píng)論
圖片
表情
