如何在計算機上輔助計算公式?目前的方案主要包括mathOCR、愛做業、做業幫等表明,以下:
算法
它們的缺點主要包括:編程
不支持手寫字符輸入、
不支持複雜題型、
不支持題庫外的式子等等,
對於複雜的公式難以識別,對於簡單的公式則應用場景很少。瀏覽器所以咱們但願解決上述痛點,加強產品功能。
此類產品主要針對有輔助計算需求的學者和論文寫做者,但還有一個基本的要求是近年來不斷升級的驗證碼識別,以算術形式出現的驗證碼每每由被修改過的字符以異常的形式排列,所以不要求識別工具對於複雜式子的識別,但有對識別準確率的要求。算式識別工具能夠做爲API藉口提供服務,便於爬蟲等須要自動訪問網頁的工具調用,提升對算術驗證碼的識別、經過能力。微信
識別目標:對於四則運算+-*/ 和分式具備識別和計算能力
架構設計:
接收用戶輸入 -> 圖片預處理 -> CNN識別 -> 得到算術字符流 -> 序列分析 -> 數學計算題解析樹 -> 求解並返回結果
架構設計圖示:
網絡
圖片預處理
圖片預處理以OpenCV做爲主要工具。預處理的主要目的是把圖片中的字符切割出來,同時避免無關變量對字符識別的影響。
主要步驟包括:灰度化、二值化、高斯濾波、字符切割與細化
數據結構
工具介紹:架構
- 卷積神經網絡模型(CNN)
不須要提取字符特徵值
圖像識別精確度高- 國際數學公式識別比賽數據集(CROHME)
海量字符集圖片
與實際輸入類似
具體步驟:
框架
結構分析:工具
項目重要文件介紹:post
項目配置文件:
操做說明:
運行程序:
點擊Clear按鈕:清楚輸入狀態
識別正確率
測試樣例:
> 優勢 - 提出了可行的通常化的手寫作題系統算法框架。 - 使用卷積神經網絡模型識別字符,精度高,適應性強。 - 拓展了屬性文法,使其適用於數學計算題的自動求值。 > 缺點 - 缺少更爲普遍的測試。 - 在設計邏輯上,前面環節的錯誤會致使後面環節的錯誤。
<成員> 每一個成員在beta階段更加積極配合完成任務,因爲課業影響,整個項目執行期較短,但成員基本都能加急完成分配的任務,並致力於找bug和debug。
<吸取教訓> 在alpha和beta階段的時間安排都不算很合理,不過beta階段的預備時間比alpha階段多了50%以上,算是作了必定的準備工做。其次因爲目標更爲清晰,beta階段的構建過程更加順利。
<開發評價> 咱們主要是大教堂的開發模式,由於前期感受沒有太多能夠展現的項目代碼。後續功能完善,或者在其餘更爲大型的項目中將考慮轉向市集模式。整個開發週期較長,但實際項目推動的時間較短,一方面說明項目安排是存在問題的,執行力度不足;一方面說明開發資源沒有充分利用,團隊成員能力應該高於開發此項目所需最低需求,項目能夠更快更好地完成。
咱們的軟件要解決什麼問題?是否認義得很清楚?是否對典型用戶和典型場景有清晰的描述?
咱們達到目標了麼(原計劃的功能作到了幾個? 按照原計劃交付時間交付了麼? 原計劃達到的用戶數量達到了麼?)
和上一個階段相比,團隊軟件工程的質量提升了麼? 在什麼地方有提升,具體提升了多少,如何衡量的?
有什麼經驗教訓? 若是歷史重來一遍, 咱們會作什麼改進?
是否有充足的時間來作計劃?
團隊在計劃階段是如何解決同事們對於計劃的不一樣意見的?
你原計劃的工做是否最後都作完了? 若是有沒作完的,爲何?
是否項目的整個過程都按照計劃進行,項目出了什麼意外?有什麼風險是當時沒有估計到的,爲何沒有估計到?
咱們學到了什麼? 若是歷史重來一遍, 咱們會作什麼改進?
咱們有足夠的資源來完成各項任務麼?
測試的時間,人力和軟件/硬件資源是否足夠? 對於那些不須要編程的資源 (美工設計/文案)是否低估難度?
低估了UI設計的難度,致使UI改進程度不大。
每一個相關的成員都及時知道了變動的消息?
咱們採用了什麼辦法決定「推遲」和「必須實現」的功能?
成員是否可以有效地處理意料以外的工做請求?
設計工做在何時,由誰來完成的?是合適的時間,合適的人麼?
設計工做有沒有碰到模棱兩可的狀況,團隊是如何解決的?
什麼功能產生的Bug最多,爲何?在發佈以後發現了什麼重要的bug? 爲何咱們在設計/開發的時候沒有想到這些狀況?