天天看點

證件識别技術進化史

去年,谷歌的阿爾法狗戰勝了南韓頂級圍棋九段高手李世石,讓“人工智能”一鳴驚人。國内外各種科技傳媒、創業公司對人工智能的大勢宣傳,更是讓廣大吃瓜觀衆仿佛一覺醒來就墜入了科幻電影中的神奇場景。

實際上,任何技術發展都是一個循序漸進的過程。人工智能并沒有那麼神乎其神,也不是那麼遙不可及,它其實早已經存在于我們周圍,以增強智能的形式為我們生活中的某個環節提供便利和更加友好的體驗。比如當我們在手機APP端綁定銀行卡、認證個人資料時,用拍照代替手工錄入,手機神奇滴識别了我們的證件類型和格式,并從中找到了它所想要的資訊,這一點是否也是很智能的呢?這項看起來神奇又簡單的功能背後的核心技術就是人工智能中的技術領域之一:OCR。當然你們可能會說了:“等一下,你先告訴我OCR是什麼!”

證件識别技術進化史

圖1:手機拍照證件識别

OCR(Optical Character Recognition,光學字元識别)是指利用電子裝置(例如掃描器或數位相機)采集目标字元,通過檢測暗、亮的模式确定其形狀,然後用字元識别方法将形狀翻譯成計算機文字的過程;簡而言之,就是令機器學會“識字”。

早在20世紀50年代,IBM就開始利用OCR技術實作各類文檔的數字化,早期的OCR裝置龐大而複雜,隻能處理幹淨背景下的某種印刷字型。20世紀90年代,針對掃描圖像印刷體文本的識别率已經達到99%以上,搭載了證件識别技術的各種文檔掃描器、名片掃描器應運而生,一時風靡,可謂OCR應用迎來的第一個高潮。

進入21世紀,高精度拍照智能手機的誕生,催生了許多以手機拍照識别文字作進行資訊錄入及查詢類應用。照片中的包含文字的場景複雜多變,已非傳統掃描器類應用所能比拟;而雲計算及無線網絡的發展,前端用攝像頭進行捕捉,後端利用雲計算對圖檔進行處理,兩者結合,更讓OCR應用充滿了想象空間。OCR技術可謂曆久而彌新,重新成為研究熱點。

證件識别是OCR技術的實踐應用陣地之一。身份認證是網際網路+的大背景下,連接配接虛拟和現實的重要一環。作為服務于微信産品的模式識别團隊,來自于微信支付、微信公衆号稽核等業務的迫切需求促使我們在證件識别領域持續鑽研,不斷創新。目前我們已經可以支援銀行卡、身份證、機動車行駛證等多類證件自動識别,識别正确率在97%以上。本文将帶領大家回顧一下證件識别技術進化的過程。

證件識别V1.0是證件識别的奠基版本,主要服務與微信用戶端的智能綁卡和身份認證。

這一版本采用帶有提示框的掃描方式采集證件圖像。圖2的操作界面想必大家都不會感到陌生:當使用者選擇綁卡并用手機對準證件時,用戶端首先會調起一個對焦子產品,采集一幀最清晰的圖像用于檢測證件區域。卡片檢測子產品則在提示框的四個邊界附近搜尋穩定的邊緣,并将檢測到的卡片邊緣用高亮表示,對使用者進行提示引導。

證件識别技術進化史

圖2:微信綁卡流程

當檢測到符合條件的邊緣後,就可以通過計算單應性矩陣,将帶有透視形變的證件區域校正成标準證件區域樣本。以利于後續的資訊檢測和識别。

證件識别技術進化史

圖3:證件檢測與校正

V1.0的證件識别流程如圖4所示。其中卡片檢測及校正環節如前所述已在用戶端完成。傳到伺服器端的标準證件區域圖像仍需要:版面分析、行切分、單字切分、單字識别、後處理驗證等環節才能輸出最終結果。其中涉及的技術分為基于經驗制定的規則政策和基于統計學習的分類模型。前者廣泛應用在預處理階段(卡片檢測、版面分析、行切分、單字切分)的邊緣提取、二值化、連通域分析、投影分析等,以及後處理階段的資訊驗證;後者包括基于方向梯度直方圖特征和多類别分類器的單字識别引擎,用于單字識别階段。

證件識别技術進化史

圖4:證件識别流程V1.0

版面分析需要判别證件類型以及正面背面、将倒置的證件轉正、提取卡片中待識别的感興趣區域(Region Of Interest)等。由于各種卡片的版式不同,這一環節往往需要定制大量精細調節的人工規則。

得到ROI之後,需要進一步在區域内進行行切分和單字切分,得到單字區域輸入給識别核心。這一步通常采用連通域分析或投影分析的方法,為了适應光照和背景等幹擾,我們研發了基于模闆的最優投影分割算法,可以得到較好的切分結果。

證件識别技術進化史

圖5:基于模闆的最優投影分割算法進行單字切分的結果

單字識别是展現OCR性能的核心技術。V1.0采用了基于統計學習的單字識别方法。從切分出的單字圖像中提取文字的筆畫、特征點、投影資訊、點的區域分布等有效特征,經過融合,交給分類器。分類器将提取的待識别字元特征與識别特征庫的比較,找到特征最相似的字,提取該文字的标準代碼,即為識别結果。

單字識别的輸出不免有誤識,需要利用卡片号碼校驗規則、日期有效範圍等先驗知識對結果進行後處理,争取将正确的結果最終呈現給使用者。

V1.0版上線之後,反響不錯,基本解決了産品的剛需。然而在應用過程中也暴露出一些問題:首先,版面分析的性能不穩定,主要是人工規則的疊加造成算法魯棒性較差,case-by-case的調節很容易陷入顧此失彼的困境。其次,單字識别的誤識率較高,尤其是在光線不理想或是清晰度不高的情況下識别結果較差。針對這些問題,我們引入了深度學習方法,推出了證件識别V2.0。

我們将版面分析和行切分兩個依賴人工規則的預處理環節進行合并,以目标檢測的思路判斷圖像中的卡片類型和放置方式,并直接提取卡片中的待識别資訊行。這其中包含了兩類任務:

檢測卡片類型,将輸入圖像分為三種情況:卡片正面、卡片背面、非卡片;

檢測資訊位置和形變并校正。通用的目标檢測算法隻能定位目标的最小外接矩形框,不能直接判斷形變類型和角度資訊;我們通過回歸估計得到資訊行的頂點,從頂點的位置關系即可推理得到形變和角度資訊,進而巧妙解決這一問題。

上述兩類任務雖然屬于不同類型,但是依賴的底層圖像特征卻可以共享。這裡借鑒了人臉關鍵點檢測的思路,采用multi-task learning,基于一個CNN網絡同時輸出兩類任務結果:

證件識别技術進化史

圖6:基于multitask-learning的資訊行檢測

在我們之前的許多實踐工作中已經證明:在樣本充足的前提下,即使一個簡單的CNN的單字識别性能依然可以完勝傳統的特征工程模型。如果對于某些資訊欄僅包含漢字(比如姓名)或者英文數字(比如證件号碼或有效日期)的情況,識别性能還可以通過限定識别字元集得到進一步的提升。證件中的字形、字型和排版較為規整,我們采用包含3~4層卷積的簡單CNN模型作為單字識别引擎來兼顧速度和性能需求。經過單字識别引擎的更新,單字識别性能提高了約10個百分點。

技術的進步總是來源于産品無限追(zhe)求(teng)。基于掃描模式的證件識别方案優化之後,産品又有了新的需求:掃描的接口不夠通用,能不能基于拍照、甚至直接上傳照片的方式來進行證件識别呢?

聽起來不是一個很過分的要求,然而實際體驗之後,發現:由于用戶端不再具有檢測校正的機會,傳到伺服器的待識别對象的畫風就由7A變成了7B和7C。這就引入了三個難題:

證件在圖像中占比、角度不固定,可能存在較大旋轉和透視形變;

證件圖像背景可能比較複雜;

同一張圖中可能存在多個證件對象。

這時,直接回歸定位證件資訊的方法效果已經不能滿足實用需求。為此,我們在V3.0版中對證件資訊定位子產品進行了進一步改進。

證件識别技術進化史

圖7:證件識别的各種應用模式

基于圖像統計分析的證件檢測子產品

加入這一子產品的主要目的是應對使用者上傳照片中存在多個證件的情況,如圖7c。我們通過一系列的圖像處理和投影分析操作,判别圖像中證件個數,并得到單個證件的感興趣區域(Region Of Interest, ROI),即保證每個ROI中有且隻有一個證件,而且證件的區域占比超過50%。這一環節的主要難點在于:

尋找關鍵切點,即對應證件之間的區分位置, 需要針對背景和光照變化較為魯棒;

需要判别證件個數,避免誤切。

在算法研發過程中,我們針對各種實際情況進行了測試和調節,以保證較好的性能。

證件識别技術進化史

圖8:證件檢測子產品的輸出結果

由于拍照模式下證件本身的形變可能較大,直接回歸條目位置已經不能達到很好的效果。于是,我們在V2.0的資訊行定位網絡中加入卡片頂點檢測的分支,得到證件的類型、位置和擺放角度。這些資訊同時可以輔助資訊行的檢測和定位。由于這個子產品的加入,V3.0已經可以完美支援證件的360°旋轉,較大角度的透視形變,以及複雜的拍攝背景等情況。圖9給出了一些實際場景中Demo示例。

證件識别技術進化史

圖9:支援全角度旋轉和較大透視形變的證件識别

OCR的一個經典難題就是形近字的識别,這些看起來長得很像的字元經常讓識别引擎“傻傻分不清楚”--即使是強悍的深度神經網絡也難免挂一漏萬。在V3.0中,我們引入了一個提高類别區分度的損失函數:center loss。其原理大緻如下:之前的分類損失函數,如softmax loss,隻關注了待識别的圖像應該屬于哪個類别,但是并沒有關心一個同樣重要的問題:同類别的樣本特征是否足夠聚集?

以分類界的hello world問題--“mnist手寫數字識别”為例,把網絡倒數第二層全連接配接層輸出一個2維的特征向量可視化,其分布如圖10A。可見,每個類别内的特征分布呈狹長條狀,類内差異較大。Center loss就是給每個類别的資料定義一個center,大家要向center靠近,離得遠的要受懲罰。進而把特征分布變成了圖10B的樣子。采用center loss,我們的單字識别引擎性能提高了約2%。

證件識别技術進化史

圖10:center loss 示意圖

所有的深度學習網絡都有一個共同點:成也資料,敗也資料。充足的資料燃料才能使網絡的性能得到飛升。然而證件屬于身份敏感資訊,搜集和标注都有較大的成本。當實際樣本不能滿足我們的訓練需求時,我們就轉向合成樣本的途徑:通過開發各種合成樣本的工具,得到大批量的接近真實情況的合成樣本;采用合成樣本訓練、實際樣本微調和測試的形式,以較為經濟高效的方式達到各類網絡性能的實用化水準。圖11為我們為證件定位任務和單字識别任務準備的訓練樣本,這些合成樣本已經廣泛應用到了各類模型訓練中。

證件識别技術進化史

圖11:利用合成工具産生的訓練樣本

作為人類需求牽引科技發展走到今天,智慧的延伸決定了世界的無限潛能。證件識别作為連接配接網際網路線上和線下的重要一環,在各種網際網路應用入口中承擔着重要的角色。微信AI一直以來以業務需求為驅動,以實際應用為産出,在證件識别領域深入鑽研,廣泛實踐。目前我們可以自信地說,微信AI在證件識别這一技術領域處于業界領先地位,歡迎各位同行交流探讨。