这款神秘的移动端OCR引擎,如何做到“所见即所得”?
阿里妹導讀:隨著深度學習,尤其是CNN和RNN等技術的飛速發展,文字識別技術(OCR)近幾年得到了迅速的提升。與此同時,在智能化終端的大趨勢下,本地化智能識別憑借更高效快捷的體驗以及高度的隱私保護和零流量消耗等優勢備受矚目和親睞,越來越多的應用算法開始傾向終端化完成,OCR也不例外。接下來,螞蟻金服的算法專家亦弦為我們剖析這個輕量而精準的移動端OCR引擎——xNN-OCR。
背景及概述
移動端OCR的優勢
受算法效率和算法模型大小的限制和約束,目前大部分的OCR端上應用都是上傳圖片到服務端識別再將識別結果回傳到客戶端。雖然滿足了部分業務需求,但一方面,對一些實效性要求較高的業務場景來說用戶體驗無疑是一個巨大的損失,尤其是弱網環境下。另一方面,在面臨大促業務并發請求量過大的情況下,服務端不得不采用降級方案,而如果端上也具備識別能力的話,便可以極大地減少服務端的壓力。此外,涉及到身份證、銀行卡等重要私人證件采用OCR進行信息提取的時候,端上“識完即焚”這種方式,對這種敏感數據和隱私保護來說是天然的堡壘。因此,具備終端OCR識別能力有著極其重要的業務價值和意義。
移動端OCR的難點
OCR采用深度學習技術使得識別精度在特定的場景下面有了一定的保障,但模型大小和速度問題在端上依然是一大難題。目前大部分的后臺OCR模型通常幾十M或者上百M,可能比整個App安裝包都要大,是不可能直接放到移動端的,而如果走實時下載的辦法,模型過大也會造成下載失敗率高、等待時間長、App占用空間大、流量消耗大等問題。另外,現在很多OCR算法在云端GPU上運行尚且需要幾十到上百毫秒,要在手機CPU上保持較高的運行效率是一個極大的挑戰。
我們做了什么?——xNN-OCR
xNN-OCR是專門針對移動端本地識別研發的的高精度、高效率、輕體量文字識別引擎,目前支持場景數字、場景英文、場景漢字以及特殊符號的識別。xNN-OCR針對移動端開發和優化了一套基于深度學習的文字檢測和文字行識別算法框架,結合xNN的網絡壓縮和加速能力,檢測和識別模型可以壓縮到數百K級別,在中端及以上手機CPU上達到實時(最高15FPS),可結合“掃一掃”的模式在視頻流中做到所見即所得。
移動端OCR識別技術
移動端OCR技術主要分為二個方面,一是OCR算法框架的研究和優化,主要目標是探索高精度且輕量級的檢測和識別框架,確保在壓縮之前模型的大小和速度在一個適當的范圍以內,二是利用xNN對模型進行剪枝和量化壓縮到實際應用需要的大小。下圖是我們以銀行卡檢測和識別模型為例子展示整個壓縮流程精度和模型的變化,其他OCR場景識別均是類似流程。
銀行卡檢測/識別模型壓縮
輕量級OCR算法框架的探索
目前大部分的移動端OCR技術都是以傳統算法為主,在復雜自然場景下識別率相對較低,而基于深度學習的方案可以很好的解決這一類問題,識別率和穩定性遠超傳統算法。目前主流的深度學習OCR主要分為文字行檢測和行識別兩大塊,下面我們分別介紹下:
文字行檢測
在檢測方面,我們將物體檢測的Region-CNN框架與FCN的圖像分割框架融合在一起,保留了FCN的簡單框架以適應端上對模型尺寸和預測時間的要求,同時又在模型中加入了目標檢測的位置回歸模塊,實現了對任意形狀文本的檢測能力。在基于FCN的整體框架中,為了在精簡模型的同時不降低檢測效果,我們采用了各種模型精簡結構(例如Separable Convolution、Group Convolution + Channel Shuffle等,如下圖),模型的尺寸雖然不斷減小,精度并未隨之下降,在滿足端上對模型的苛刻限制的同時取得了較好的檢測效果。
Group Convolution + Channel Shuffle
文字行識別
在識別方面,我們在CRNN(CNN+LSTM+CTC)框架基礎上進行了優化改進,在Densenet的基礎上結合Multiscale Feature、Channel-wise Attention等技術設計出了一套專門用于移動端文字行識別的輕量級CNN網絡,同時對LSTM內部參數采用Project技術、全連接層采用SVD、BTD等降維技術進一步減少參數數量(如下圖),在ICDAR2013數據集(NOFINETUNE)上,模型大小下降約50%的前提下識別率高出CRNN近4個點,這一改進優化點為上端打下了強有力的基礎。
LSTM Projection
xNN模型壓縮
目前我們的OCR算法模型都是基于tensorflow開發的,xNN已經增加了對TFLite模型的支持,并且在性能上已經遠超TFLite。xNN對于我們OCR算法的模型壓縮比在10-20倍之間,不同的場景稍微有些區別,與此同時,壓縮后模型的精度基本保持不變。由于OCR是一個較復雜的識別任務,算法模型通常都非常大,并且目前大部分的后臺OCR算法都是在GPU上運行,要想在端上運行,除了需要在算法層次上做很多優化外,更需要xNN強大的模型壓縮和加速能力。
移動端OCR應用
OCR技術是信息提取和場景理解極其重要的技術手段之一,應用領域非常廣泛。目前移動端本地OCR應用從技術角度可以分為2大類,一類是印刷體文字識別,主要是針對字體變化不大、背景單一的場景,例如身份證識別、名片識別、車牌識別等等,另一類是場景類文字識別,主要是針對字體變化大且背景復雜的場景,例如銀行卡識別、燃氣表/水表識別、門頭名識別、場景英文識別(AR翻譯)等等,這兩類場景中后者識別難度較大,面臨的挑戰性更多。我們將xNN-OCR用于這些場景并根據場景的特點做了各種優化,取得了一系列的成果,特別是在復雜環境下面識別依然可以保持高效和精準,具體的數據如下表。下面簡介了幾個比較重要和常見的應用場景。
OCR部分業務場景數據指標
- 銀行卡識別:銀行卡識別是金融類行業非常重要的一項技術,是場景數字類識別的一個典型代表。目前大部分銀行卡識別均是采用端上識別的方案,因為端上識別不僅能帶來更好更快的體驗,同時由于不需要數據上傳也能一定程度保護用戶的隱私數據。基于xNN-OCR開發的銀行卡識別在中端手機上耗時<300ms,大部分銀行卡都是秒識別。此外,在面對復雜背景以及復雜環境干擾的時候,xNN-OCR在識別速度和精度上均展現了非常明顯的優勢。
- 燃氣表識別:通過OCR識別燃氣表讀數是目前燃氣自助抄表中的一項關鍵性技術,相比于傳統上門抄表,一方面可以節省很大的人力物力,避免上門抄表帶來的麻煩,另外一方面也可以減少漏抄、誤抄等問題。目前已經有很多燃氣公司已經開始應用這一項技術,但實際應用過程中,由于燃氣表的位置有時候比較隱蔽,拍攝角度和光照難以控制,通常一般的用戶拍照上傳到后臺識別的圖片質量都比較差,識別率偏低。xNN-OCR在端上完成整套識別流程,通過識別反饋引導用戶拍攝,可較大程度的提升識別率,在與一家燃氣公司的合作中,我們測試識別率可以達到93%+,模型尺寸可保持在500k以內,識別成功耗時<1s。
- 車牌/VIN碼識別:車牌/VIN碼識別是傳統印刷體類文字應用的一個經典場景,在移動警務、車輛維修定損等日常場景中起著非常重要的作用。由于車牌/VIN碼識別在實際應用中可能同時需要,為了避免交互流程上的繁瑣以及端上2套算法模型過大,xNN-OCR將車牌和VIN碼這2個場景識別合二為一,模型尺寸依然<500k,在中端手機上識別成功耗時<1s,并且對光照、模糊、拍攝角度等干擾因素不敏感,同時由于端上可以反復識別尋求置信度最高的結果作為最終結果,所以相對于后臺識別“一錘子買賣”而言,在識別精度上會更勝一籌。
- 身份證識別:身份證識別也是金融類行業非常重要的一項技術,在實名認證、安全審核等場景起著非常重要的作用,但由于中文漢字字庫較大,導致模型較大,目前大部分的身份證識別均采用的是服務端識別,但由于端側質量難以控制,往往會導致體驗和精度上面難以均衡。xNN-OCR在大字庫中文識別方面也作出了一些突破,整體模型小于1M,在端側用單字識別信度控制識別精度,避免了對圖片質量判斷的依賴,通過多幀融合提升識別效率,單次識別中端手機上<600ms,識別成功<2s。
展望
xNN-OCR目前在端上已經能較好的識別場景數字、英文以及部分漢字,無論是模型大小、速度、準確度均已達到工業應用的水平,并且全面超過基于傳統算法識別的OCR端上應用,在多個實際應用項目中對比得以驗證。另外,我們在端上全量7000多類漢字識別上也做出了一些成果,在不久的將來會分享出來,歡迎有興趣的同學來一起研究和探討。
我們堅信,隨著深度學習的移動端化逐步增強和移動硬件設備的逐步升級,終端智能化的應用與業務將會越來越多,未來xNN-OCR必將會給OCR相關的業務帶來更深遠的影響和更高的價值。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的这款神秘的移动端OCR引擎,如何做到“所见即所得”?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018年的AI/ML惊喜及预测19年的
- 下一篇: 当学术大家遇到技术大拿,如何攻克数据库应