郭 浩 寧初明 韓壽松 李華瑩
1(六六四〇七部隊 北京 100089)
2(軍事科學院系統工程研究院 北京 100020)
3(陸軍裝甲兵學院車輛工程系 北京 100071)
當前,OCR技術在生活中廣泛使用,并能以較高正確率識別身份證、銀行卡、表格單據,為人們帶來了很大的便利,同時該技術在軍隊信息化建設中亦存有較高的使用價值。在諸如文稿數字化保存、單據記錄、裝備設備銘牌識別、故障研究記錄表格自動錄入等領域可發揮重要作用,極大節約人力成本。其準確率的進一步提升可使人工糾錯負擔顯著減輕,意義重大。OCR技術的技術設想早于計算機技術的出現,早在1929年,德國科學家Tausheck首先提出了OCR概念。第一套可用OCR軟件是由IBM于20世紀60年代早期開發的IBM1418,但僅能識別所指定字體的數字、英文字母及部分符號[1]。隨后20世紀60年代中期至70年代初期,日本東芝公司推出了基于手寫體數字識別的郵政編碼識別信函自動分揀系統,在手寫體識別上分揀率達到92%~93%,開始了成熟的商業應用[1]。在之后一個階段的發展中,OCR技術著力解決圖像質量較低的文檔與大字符集識別如多語種(如中英文)混合識別的問題,并在固定文檔的識別中取得了不錯的效果。而國內的OCR技術受限于計算機發展程度及中文OCR的研究難度問題,起步較晚,且發展較慢[2]。在1989年,清華大學成功推出了國內第一套中文OCR系統——清華文通TH-OCR1.0版本[2],使得印刷體漢字識別趨近于成熟,并成功走向市場。雖然這些技術都取得了一定的商業應用,但依據原理,傳統OCR技術通過煩瑣的文檔傾斜校正、行列切分、字切分,特征提取與匹配等流程進行文檔的字符級別識別,有著識別率低下,對視角、光源甚至字體要求苛刻的問題,使得應用局限于掃描文檔,很難應用于相機拍攝的自然環境文字識別。尤其自然環境中存在凸凹體文字、弧形排列、字體缺損等問題,更是傳統OCR技術所難以解決的。自2012年AlexNet[3]的提出使得深度學習技術取得突破以來,當前研究廣泛嘗試采用深度學習技術直接對自然環境文字進行識別,取得了在準確率遠優于傳統OCR技術的效果,但當前主流文本區域分割網絡如EAST[4]網絡仍存在有計算量較大,需要多次非極大抑制算法支持等問題,同時輕量的端到端網絡如FOTS[4]存在有較大的精度損失問題,這些問題均限制了深度學習在自然環境OCR中的進一步應用。本文中使用DBNET[4]與CRNN-CTC[5]復合二階段方法進行自然環境下的字符級別文本識別,僅需兩階段處理即可在多視角、復雜光源下使用,在高準確率的同時保證實時性,最后通過Flask高效后端框架、Celery高效消息隊列,并結合Layui前端框架實現了基于Python原生的實用化OCR識別系統。
在兩階段的深度學習方法中,首先采用文本區域分割網絡將圖像中的有文字區域與無文字區域分割,隨后采用基于卷積神經網絡(Convolutional Neural Networks, CNN)與循環神經網絡(Recurrent Neural Network, RNN)結合的CRNN網絡,并以連接時態分類(Connectionist Temporal Classification,CTC)編碼形式輸出,通過分配識別區域、檢測字符這兩個過程,并交由兩類特定網絡處理,從而提高了識別準確率。
DBNET是當前最為高效的圖像文本區域分割網絡之一,分割實時率強且準確高,在一般的語義分割網絡中,其概率圖劃分閾值對分割正確率影響較大。
DBNET采用了基于神經網絡本身的自適應二值化,對于文本區域概率圖進行逐像素的二值化,從而徹底將二值化環節融入神經網絡之中,使得分割準確率提高的同時,進一步減少了后續流程,并使得后續CRNN識別過程得到更為準確的分割圖,大幅提高了文字識別的正確率。其網絡結構如圖1所示。

圖1 DBNET網絡結構示意圖
圖1展示了DBNET網絡的一般結構[5],其結構與一般FPN(特征金字塔網絡)相似,但預測環節中除分割文本核區域之外還有閾值特征圖預測,其二值化公式表示為:
(1)


(2)
使用鏈式法則可得:

(3)
從式(3)中明顯可以看出,其梯度由放大因子k增大,使得正負樣本均可在反例時獲取較高梯度,從而提高文本區域劃分正確性。
通過DBNET實現文本區域劃分后,需采用CRNN模型及CTC編解碼方式進行區域內字符級文字識別。
圖2展示了劃分后的圖像區域通過CNN(卷積神經網絡)分析后,采用LSTM(長短時記憶神經網絡)進行CTC編碼的過程,即CRNN+CTC方法,本文所采用的輕量CRNN結構如表1所示,輸入張量尺寸為32×n×3。

表1 CRNN模型結構參數表

圖2 CRNN+CTC工作流程圖
可以看出,n表示文字區域圖像寬度,理論上對于圖像寬度沒有限制,從而避免了長列文字識別困難的問題。對于LSTM的輸出進行Softmax處理,所得到y為文本的后驗概率矩陣,定義為:
y=(y1,y2,…,yt,…,yT)
(4)
式中:T指輸出LSTM輸出第三維度。考慮到存在空格,標點符號與空字符(因輸出序列長度遠遠大于文字序列長度)設定字符集為:
L′=L∪{blank,punctuation}
(5)
式中:L指代通用漢字及英文字符集合,組成L′為全字符集,由此生成神經網絡所預測的后驗字符矩陣。
CTC解碼方法通過空字符分割與重復字符拋棄的方式進行:
B(π1)=B(sst-aaa-tee-)=stateB(π2)=B(—stta-t—e)=state
(6)
式中:“—”表示blank空字符,使得LSTM的多種輸出都可以得到有效解釋,從而很大程度上增強了CRNN網絡預測的魯棒性。
在文本檢測訓練中,本文采用了多種數據集融合方式進行數據增廣。Chinese Text in the Wild數據集是當前數量最大的中文數據集之一,共含中文字符1 018 402個,32 285幅圖像,圖像來源為騰訊街景,包含中文字符類型多,且清晰度高(2 048×2 048像素)。為同時完成中英文識別任務,引入ICPR MWI 2018中英文OCR數據集作為補充,其主要由合成圖像、網絡廣告圖片組成,字體樣式較為豐富。最終在ICDAR2015數據集驗證其模型效果,對比EAST、PSENET算法及谷歌開源OCR引擎Tesseract如表2所示。

表2 ICDAR2015數據集測試結果
表2中Hmean為加權精確率與召回率的綜合評價指標:
(7)
式中:β=1,表示精確率和召回率重要性相當。表2體現了DBNET與基于機器學習的OCR算法以及以往深度學習算法的比較,可以明顯看出,基于DBNET的文本區域檢測算法能夠在保證效率的同時大幅提升運算效能,對比普通機器學習OCR算法更能在復雜環境中表現出優異的性能,對比其他大型網絡如EAST時,在精確度僅微小下降時,運算效能提升幅度極大,而對比輕量網絡PSENET,其精確率和實時率都有提升,運行效率更加符合服務器的使用需求,部分復雜光源環境及彎曲文本的檢測效果如圖3所示。

圖3 DBNET與CRNN+CTC部分檢測效果圖
由圖3可見對于彎曲或平直中英文文本區域及各類樣式字體識別,該算法組合均有優良表現。
在工程應用上,由于深度學習的算法部署存在圖像解碼、模型運算等環節,具有計算IO資源高占用的特點,為提高并發效率,異步消息隊列處理方式成為必然選擇。采用異步消息隊列處理的硬、軟件方案部署如圖4所示。

圖4 OCR識別系統硬、軟件方案簡圖
為避免過高的IO占用成為系統響應速度瓶頸,提高OCR識別系統負載能力,系統后端分別部署業務服務器與GPU服務器以及存儲服務器,業務服務器采用Nginx作為高性能反向代理服務器,提供前端響應,接收上傳圖片并置入消息隊列,隨后GPU服務器通過消息隊列提取云存儲服務器圖片數據進行異步分析,并在分析結束后將結果返回業務服務器。出于基于Python語言原生構建的需要,在軟件層方面,業務服務器后端采用Flask作為Nginx反向代理所代理的Web框架,并提供基于云存儲的圖像存儲,在此基礎上采用Celery作為圖像消息隊列,提供業務服務器與GPU之間的通信,GPU服務器則使用TensorFlow作為算法模型部署的深度學習框架。經實際測試,該架構有良好的并行性能,能夠滿足中等規模(100~1 000人)的OCR使用需求。
針對當前傳統OCR方法存在有光照、視角、字體要求苛刻的問題,本文設計了一種基于DBNET及CRNN+CTC的兩階段復合深度學習OCR方案,并在大型開源自然環境中英文檢測數據集上進行訓練,結果與傳統OCR及其他基于深度學習的方法對比,表明該方法對于自然場景文字識別效果突出,優于其他算法且在運算效能上有著顯著提升。在該技術的應用方面,創新性地進一步探究了基于異步消息隊列處理的深度學習OCR系統部署方案,使得該技術進一步得到實用化。該方法未來將在軍隊信息化建設中發揮重要作用。