這款神祕的移動端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相關的業務帶來更深遠的影響和更高的價值。



本文做者:亦弦

閱讀原文

本文來自雲棲社區合做夥伴「 阿里技術」,如需轉載請聯繫原做者。

相關文章
相關標籤/搜索