GitHub 最強 AI 數學解題神器!拍照上傳秒給答案,連微積分都難不倒他
Posted on2019/05/27
TO 精選觀點
【為什麼我們要挑選這篇文章】AI 應用越發奇葩,過去寫數學一支筆、一顆腦,現在連腦都不用,帶個 AI 就行。
中國 GitHub 大神研發數學 AI,透過深度學習與影像識別,打造最強解題神器。每個學生都夢寐以求的數學 AI 究竟怎麼下載?怎麼用?接著看下去。(責任編輯:陳伯安)
作者:量子位/ 曉查 銅靈
一位叫 Roger 的中國學霸小哥的拍照做題程式 mathAI 一下子火了,這個 AI,堪稱數學解題神器。
輸入一張包含手寫數學題的圖片,AI 就能辨識出輸入的數學公式,然後給出計算結果。
不僅加減乘除基本運算,就連高等數學中的微積分都不在話下。
就像下面這樣:
還在苦苦糾結高數作業如何求解?還在東奔西走的找學霸借作業?手握 mathAI,不就是手握了新時代的解題利器嗎?
此項目程式碼已半開源
短短幾天時間,這個項目在微博就收穫了上百次轉發。看到畫風如此新奇,似乎還能開啓無限可能應用,網友們紛紛召喚自己的印象筆記(中國版 Evernote)小助手收藏,大呼:以後教數學就是它了。
作者表示,這個專案已經是半開源狀態了,目前開源的部分可以辨識計算加減乘除簡單運算。
如果想要辨識更加複雜的運算式,可以參考數學公式辨識的論文自己進行擴展。
具體來看看這個解題神器。
深度學習辨識數學題,正確率逼近 80%
全能型選手 mathAI 是怎麼實現這個功能的?
作者在 Github 中介紹說,整個程式使用 python 實現,具體處理流程包括:圖像預處理 → 字元辨識 → 數學公式辨識 → 數學公式語義理解 → 結果輸出。
整個系統的處理流程如下:
圖片預處理主要以 OpenCV 作為主要工具,將圖片中的字元單獨切割出來,避免無關變數對字元辨識的影響。
隨後,國際數學公式辨識比賽資料集(CROHME)對通過卷積神經網路進行訓練。
此外,還進行結構分析,對字元的空間關係進行判定。比如一個字元的上標和下標,含義自然不一樣。
在語義分析階段,就需要匯集上面得到的資訊,判斷運算該如何進行了。節點屬性傳遞過程如下圖所示:
作者在用 160 道手寫測試題進行了測試:
結果表明,平均字元辨識率達到了 96.23%,且系統做題的平均正確率達到了 79.38%。
手把手教學怎麼用
來,實際上手操作下。
作者給出兩種使用模式:網頁模式和介面模式(Interface)。介面模式比較直觀,只需打開網頁上傳圖片即可自動給出解題結果。
下面以介面模式為例介紹一下 mathAI 的安裝使用方法。
首先需要安裝 flask、虛擬環境、科學資料庫 numpy、sympy 等,它們都可以用 pip 安裝。
pip install flask
pip install virtualenv
將項目的 lib.zip 檔解壓到系統目錄的 venv 資料夾下。(lib.zip 可以回覆 lib 獲取)
配置置好運行環境後,用 PyCharm 打開下載好的專案,在載入過程中,PyCharm 會自動安裝好專案依賴的軟體資料庫。
使用命令列進入專案所在目錄,並啓動虛擬環境:
. venv/bin/activate
將 FLASK_ENV 環境變數設置為啓用開發模式:
export FLASK_ENV=development
然後使用指令運行 flask 網站框架 :
export FLASK_APP=welcome.py
flask run
打開流覽器,在位址中輸入 127.0.0.1:5000,即可打開項目網頁。在網頁中輸入一張包含數學公式的圖片,就好返回運算結果。
目前 GitHub 專案頁上的程式碼只支持加減乘除這樣的簡單運算。
中國神人 Roger 的其他 GitHub 發明
做出這個自動求解系統的,還是一位元中國少年。
這位 GitHub ID 為 Roger,本名羅文傑,是中山大學資料科學與電腦學院的研一在讀碩士生,主要攻讀電腦視覺方向。
不僅這個解題神器,在 Roger 的 GitHub 主頁上還能看到其此前參與的很多有趣研究。
比如這個基於帖子的校園互助交友平臺 LiBond。用戶可以在裡面發佈任務,然後使用虛擬幣荔枝進行交易。
羅同學的設想是,有閒置時間的同學可以在此平臺上幫助他人,然後結交好朋友,荔枝幣還能用來兌換喜歡的物品。
再比如,一個基於 C++ 的無禁手五子棋 AI,可以通過 openGL 實現圖形介面。
在這個項目中,羅同學使用了最經典的極大極小博弈樹、alpha-beta 剪枝、置換表等演算法,還附上了核心程式碼。
確認過眼神,是學霸無疑了。
資料來源:https://buzzorange.com/techorange/2019/05/27/math-ai/…
「python pip install教學」的推薦目錄:
- 關於python pip install教學 在 台灣物聯網實驗室 IOT Labs Facebook 的精選貼文
- 關於python pip install教學 在 Re: [問題] github下載package使用的問題- 看板Python - 批踢踢 ... 的評價
- 關於python pip install教學 在 Re: [問題] github下載package使用的問題- 看板Python - 批踢踢 ... 的評價
- 關於python pip install教學 在 wurmen/Gurobi-Python · GitHub - 安裝教學 的評價
- 關於python pip install教學 在 安裝Python與Package 的評價
python pip install教學 在 Re: [問題] github下載package使用的問題- 看板Python - 批踢踢 ... 的推薦與評價
※ 引述《BeAnActuary (Actuary)》之銘言:
: 謝謝指正,這個專案本身就是一個完整的工具,我只是想要直接使用它並作一些數據測試
: 我以為install就是意指安裝...
Install 是安裝沒錯
但是因為 Python 本身就有太多種用法
所以「安裝一個套件」可以代表很多種意思, 每種用法有自己的最佳解
回到你的問題, 看起來這主要有兩種解法, 都是用 Pip
1. pip install
看你的描述, 這個工具並沒有被放上 PyPI
但是 Pip 支援直接從 Git 安裝, 所以你可以
pip install git+https://github.com/author/repo.git#egg=套件名
注意最後面的 #egg=... 部分
這會被 Pip 用來為這個套件取名
通常你可以看 setup.py 裡面的 name 參數, 用一樣的就好
這樣的缺點是沒辦法使用 Pip 的更新功能
因為它自己不知道套件有沒有更新, 也不懂要怎麼用 Git 更新
當你發現有新版本時, 只能重新安裝一次
pip install --ignore-installed git+...後面一樣
2. pip install --editable
Pip 同時也支援 out-of-site 安裝
這個模式可以讓你把任意本地路徑的套件裝到 Python 裡
git clone https://github.com/author/repo.git 專案目錄
pip install --editable 專案目錄
這會讓 Python 能夠直接使用你 clone 下來的那個目錄, 而不另外裝一份
(類似捷徑的概念, 不是拷貝一份, 而是連結到這裡)
所以當你要更新時, 直接在專案目錄裡 git pull, 就能在 Python 用到新版本
缺點是你自己要記得這件事情, 不要不小心把 clone 下來的東西刪了
===========
順帶講一下, 這年頭如果你不需要開發 Python 套件, 只需要「使用」套件
那麼應該不會直接用到 setup.py (其實開發的時候也不太需要, 這是別話)
Pip 應該可以滿足你所有的安裝需求
如果套件沒辦法正確用 Pip 安裝, 就應該回報作者
如果作者不修復, 這個套件的狀態大概也很危險
要嘛是根本沒人用, 要嘛是作者根本放生 (通常好像也是同一件事)
那你用下去了大概也是遲早要出事, 早點跳船才是上策
--
"問おう、貴方が私のマスターか?"
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.94.62
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1517821461.A.891.html
... <看更多>
python pip install教學 在 wurmen/Gurobi-Python · GitHub - 安裝教學 的推薦與評價
(三)安裝Anaconda. - 選擇適合自己電腦的版本並安裝. 可至Gurobi載點 or Anaconda官網下載. 安裝過程中,請在此步驟時打勾,這樣可以節省之後去環境變數設定python/pip ... ... <看更多>
python pip install教學 在 Re: [問題] github下載package使用的問題- 看板Python - 批踢踢 ... 的推薦與評價
※ 引述《BeAnActuary (Actuary)》之銘言:
: 謝謝指正,這個專案本身就是一個完整的工具,我只是想要直接使用它並作一些數據測試
: 我以為install就是意指安裝...
Install 是安裝沒錯
但是因為 Python 本身就有太多種用法
所以「安裝一個套件」可以代表很多種意思, 每種用法有自己的最佳解
回到你的問題, 看起來這主要有兩種解法, 都是用 Pip
1. pip install
看你的描述, 這個工具並沒有被放上 PyPI
但是 Pip 支援直接從 Git 安裝, 所以你可以
pip install git+https://github.com/author/repo.git#egg=套件名
注意最後面的 #egg=... 部分
這會被 Pip 用來為這個套件取名
通常你可以看 setup.py 裡面的 name 參數, 用一樣的就好
這樣的缺點是沒辦法使用 Pip 的更新功能
因為它自己不知道套件有沒有更新, 也不懂要怎麼用 Git 更新
當你發現有新版本時, 只能重新安裝一次
pip install --ignore-installed git+...後面一樣
2. pip install --editable
Pip 同時也支援 out-of-site 安裝
這個模式可以讓你把任意本地路徑的套件裝到 Python 裡
git clone https://github.com/author/repo.git 專案目錄
pip install --editable 專案目錄
這會讓 Python 能夠直接使用你 clone 下來的那個目錄, 而不另外裝一份
(類似捷徑的概念, 不是拷貝一份, 而是連結到這裡)
所以當你要更新時, 直接在專案目錄裡 git pull, 就能在 Python 用到新版本
缺點是你自己要記得這件事情, 不要不小心把 clone 下來的東西刪了
===========
順帶講一下, 這年頭如果你不需要開發 Python 套件, 只需要「使用」套件
那麼應該不會直接用到 setup.py (其實開發的時候也不太需要, 這是別話)
Pip 應該可以滿足你所有的安裝需求
如果套件沒辦法正確用 Pip 安裝, 就應該回報作者
如果作者不修復, 這個套件的狀態大概也很危險
要嘛是根本沒人用, 要嘛是作者根本放生 (通常好像也是同一件事)
那你用下去了大概也是遲早要出事, 早點跳船才是上策
--
"問おう、貴方が私のマスターか?"
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.94.62
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1517821461.A.891.html
... <看更多>