黃松豪 徐建華 杜佳玲


摘要:針對深度學習如何應用于數學書面作業批閱問題,通過對圖像的預處理以及優化圖片訓練集和圖像處理算法,實現文本字符切割,采用Tesseract-OCR光學字符識別方法,訓練公式中存在的字符樣本,通過與紙面上的公式匹配提高識別的準確性,最后采用java可視化界面實現算式識別的功能,對不同情況下拍攝的照片進行測試。測試結果表明該系統高效、精準、實用。
關鍵詞:深度學習;圖像處理;光學字符識別;算式識別
中圖分類號:TP391 文獻標識碼:A
文章編號:1009-3044(2020)12-0196-02
教育領域對作業批改智能化的需求越來越多。教師每天需要批改大量數學作業,費時費力。將紙質作業拍攝成照片用機器智能識別并評判成為一個有價值的課題。當前市場上已推出多個OCR產品廣泛應用于車牌識別、名片識別、身份證識別等。但這些OCR產品中,除了Tesseract OCR外,其他均為商業性軟件,收費高。由于并無與教學場景具有對應性的專項算式字庫,造成實際識別度并不高,無法直接應用于書面作業的識別。本文研究如何將OCR技術運用于學校的數學書面作業批改與分析中,設計具有可實施性的識別方法。
1方法
1.1作業圖像處理
由于拍攝受外面環境的影響,如空氣中的塵埃,光照,攝像頭拍攝角度等因素影響,作業圖像處理容易受到干擾。為確保圖像質量,提高字符識別度,在機器進行識別之前需要對圖像進行一定的預處理。排除對應圖像中存在的各項干擾項,以提升圖像處理效果,為字符識別創造條件。在OCR技術應用時,首先開展的預處理工作流程可以分為讀取圖片、灰度化、二值化、降噪等。
1.1.1作業圖像灰度化
我們日常所見的圖片,其實都是由RGB模型(Red,Green,Blue)組成,如果R=G=B時,則表示一種灰度色,因此各灰度像素可通過單個字節的方式進行灰度值存放,相應的灰度值結果介于0至255之間,通常對圖片進行二值化之前都要進行灰度化操作,經過灰度化操作的圖像在進行二值化處理時的效率就會高很多,并且能有效地減少圖像中的噪聲像素,當前常見的灰度化算法包括分量法、最大值法、加權平均法等。在紙面作業拍攝過程中,時常會遇到圖像亮度分布不均衡的情況,為便于后續處理,本論文選用加權平均法的方式進行處理,對坐標為(x,y)的像素點進行灰度化,見公式(1):
Gray(x,y)=0.31Red(x,y)+0.591Green(x,y)+0.11Blue(x,y)(1)
1.1.2作業圖像二值化
在作業圖像處理流程中,圖像二值化是其中的一項重要環節,在進行視覺檢測、智能識別時,都需要開展圖像二值化工作?,F階段常見的二值化算法主要包括固定閾值法、雙閾值法、大律法、遞歸閾值法等。在經過上文的灰度化處理之后,本文對比上述方法發現圖像采用固定閾值二值化處理會方便許多,拍攝的紙質作業經過灰度化處理之后,通過迭代的閾值分析,選取出170作為最優閾值,處理之后的圖像效果非常理想。
1.1.3作業圖像降噪
圖像噪聲主要是指圖片中所出現的不必要、對圖片質量造成干擾的像素信息。在生活中進行拍攝或傳輸時,可能形成圖像噪聲,這會在一定程度上降低圖像質量,使得機器和人眼對圖像的敏感度下降,成為后期圖像識別等一系列操作中的難題。圖像降噪處理可以在很大程度上降低這些噪音數據給后期進行識別帶來的麻煩。圖像降噪工作不光可以使得圖像更為平滑,更能突出圖像的主要表達信息,也是對圖像進行識別時需要首先開展的前提工作,圖像識別的前期進行降噪處理能夠很好地提高后期識別的精準度和識別速度。
圖像中出現頻率較高的噪聲可以分為椒鹽噪聲、瑞麗噪聲、高斯噪聲等,本文的處理對象為普通圖像中的椒鹽噪聲。
椒鹽噪聲通常是圖片中在隨機位置形成的黑點或白點。其產生大部分是由圖片的切割出現問題引起,一般對應于這種情況,可以采用中值濾波的方式實現椒鹽噪聲消除。
中值濾波是將周圍的像素進行排序之后進行排序取出中值來替代各點。同時它也是目前消除圖像噪聲最常用的方法之一,特別是對于椒鹽噪聲的降噪效果。因此中值濾波進行噪聲消除成為本文的首選方法。
1.2作業圖像OCR技術
Tesseract是由普惠實驗室進行研發后來交由谷歌優化升級的開源OCR引擎。同時也是當前市場上較少能夠支持漢字的專項開源識別庫。Tesseract精確性較高,在1995年的全球測試中排名第三位,其精準度與商業領域的OCR技術引擎十分接近。用戶可以根據自己的需求有針對性地進行樣本數據的訓練,并且研發出滿足自身實際需要的專用引擎。本文以Tesseract為基礎,首先研究作業批改要進行的流程和實現細節,然后開發了作業批改OCR引擎。
Tesseract的識別主要基于KNN算法。KNN算法又叫K鄰近算法,是分析測試圖片中的每個像素點和樣本圖像中對應像素點距離的總和實現的,一般計算距離的方式有歐氏距離和曼哈頓距離兩種方式(歐氏距離采用較多),將距離最近的K個點排序出來,選取其中出現頻率最高的幾個樣本標簽作為預測值。Tesseract使用KNN算法來返回預測的值。圖1展示了基于Tesseract的作業批改OCR引擎訓練步驟:
1.2.1字庫訓練步驟
(1)生成Tiff圖片集。在進行訓練集的生成前,需要先準備一些自己手寫字符的圖片和電腦印刷體字符的圖片。并確保各字符產生的最低頻次。通常而言,對于較少出現的字符需保持十次以上的數量樣本,對于較多出現的字符需保持二十次以上的數量樣本。尤其在進行字庫訓練時,需將該字庫中的樣本圖片作出整合,放入專用Tiff圖片集中,以備后期訓練時處理。需要特別注意的是,在一個字庫的訓練樣本中,要確保文本字體統一。若有多種字體的要求,要分開訓練成不同的字庫。把準備好的同一個字庫的樣本圖片整合進一個Tiff圖片集里面,供后面訓練使用。實現步驟首先打開JTessBoxEditor,隨后以此打開打開tools選項和merge tif選項,點擊樣本圖片,生成Tiff格式圖片集。
(2)生成Box文件。在字庫訓練過程中,需要開展文本檢測工作,對文本做出定位,且形成包圍框。Box文件會有序的檢索樣本圖片中的字符,并且用藍框上下左右包圍當前字符以及顯示當前字符的坐標位置。
(3)修正Box文件,更正樣本中存在的各項識別錯誤。修改Box文件,糾正樣本中的識別錯誤問題。在識別復雜情況下拍攝的圖片時,Tesseract識別率較低,造成Box文件中出現較多錯誤字符。因此需采取手動修正的方式進行更改。盡管該過程耗時較長,但是能夠直接的影響最后識別效果的精準度。實現步驟首先打開JTessBoxEditor,選擇BoxEditor選項,最后單擊Open,選擇Tiff圖片集。打開之后將Tiff圖片集與Box文件處于同一層目錄,否則會沒有字符坐標、識別結果等對應信息。
隨后對左側文字識別錯誤做出修改,并且可以通過Merge、Split、Insert、Delete來對識別框進行合并、分離、添加和刪除。
(4)生成Unicharset文件。該文件包括Tesseract引擎在完成訓練后所識別的各字符信息,因此也被視為Tesseract新字庫中的重要組成項目,該文件會顯示當前文件中存在多少個字符,以及每個字符的信息。
(5)創建字體特征專用文件。在日常生產生活中,同一語言可能會出現手寫體、印刷體等多種字體,因此在訓練集中出現的字體形式也較多。創建專用的font.txt文件,里面的內容為“”。
其中“font-name”可以表明對應字體的具體名稱,與前面的Box文件名相對應。
(6)編制作業批改的詞典。為加強搜索效果,Tesseract中的詞典以向無環字圖(DAWC)進行表示,DAWG可以支持多部詞典搜索,如系統詞典、文檔詞典、用戶自建的單詞詞典等。寫詞典時,首先建一個TXT文件,每行一個字,將所有四則運算中會出現的字符都寫入文件中,然后保存為UTF-8文本文件。
(7)整理形成模糊字文件。模糊字文件不是生成最終文字庫必需的文件,但能夠有效識別并修改存在的錯誤,提高實際應用中的準確率,保存為UTF-8格式的文本文檔,并以“unicharambigs”進行命名,在創建該文件時,需做出多次驗證,找尋常見的易錯字符,這也是模糊字文件整體形成的關鍵。
(8)創建.traineddata格式的訓練文件。步驟為:首先以“tesser-act名稱,tif名稱nobatchbox.train”的方式創建TR文件;再通過“mftraining-F font-Unicharset名稱.tr”指令,并將對應的字體加入,tr文件;隨后,啟用“cntraining why4.tr”命令,會發現文件夾下生成了很多新文件,對這些文件加上前綴,以“combine_tessdata why4”命令的方式實現文件合并,即形成專項字典文件。
2識別準確率的驗證結果及分析
為驗證該方法的有效性,從南京某校園內收集作業100份,統計題目共1000條,利用開發的作業識別應用進行識別,實驗結果為其中911條識別完全正確,另外89條有識別錯誤,準確率為91.1%。識別結果如圖2所示,從圖中可見,大部分的識別能夠保證正確并且也能做出正確判斷,只有少數的數據存在識別異常或者識別錯誤的情況,圖中可以看出第三行將“1”識別成“+”,第五行將“1”識別成“0”,無法完成較好的錯誤糾正,只能通過Tesseract判斷,故識別錯誤率較高。圖片清晰度較差也會對圖像的處理造成很大的問題,添加識別難度,故圖片拍攝光線較好的情況下識別正確率會大大提高。
3討論與總結
經實驗得到總體識別率能保持在91.1%,精準度相對較高,基本滿足正常情況下的應用,其中少數的錯誤需要老師或者家長進行手動校對,而對于這些錯誤,最根本的辦法就是提高樣本的數量以及質量,在往后實際應用的深度優化中擬采用BP算法對本文進行進一步的優化以提高精準度,在識別出現異常時用BP算法訓練的數據集來替代模糊字文件進行錯誤矯正。