通用卡證信息高精度識別流程 OCR 文本檢測 文本識別 身份證 銀行卡

如何將一張身份證圖像的信息識別出來?

身份證識別點我

銀行卡識別點我

目前,人社、金融、工商、公安等政府辦事部門使用身份證OCR技術,可以快速識別用戶身份信息,緩解政府部門辦事壓力,減少業務辦理的等待時間,是智能識別產業在政務領域的一大突破。

百度、優圖等互聯網大廠紛紛建立智能識別開放平臺。

那麼我們不僅要問一張身份證圖像信息是如何被精確的結構化識別和傳遞的呢?

本文將藉助項目經驗,以身份證信息識別爲示例,着重將這一識別流程和框架總結介紹。

第一步 目標檢測

毫無疑問我們第一步需要檢測和定位我們感興趣的區域,這是高精度識別的基礎。

也就是說我們首先要找到身份證在圖像上是否存在,如果存在那麼它大概在什麼圖像座標位置。

這一步可採用主流目標檢測算法有YOLOv3,SSD,Faster RCNN等。

第二步 圖像校正

實際應用場景中圖像可能是多角度放置的。

需要通過透視變換將變形的目標校正到良好的俯瞰平面。向下面圖示一樣。。

如何獲取匹配點對座標

由透視變換原理,求解透視變換矩陣至少需要4點對映射。

也就是說我們需要獲得至少包括身份證卡片的四個頂點,將其投影到一個標準的卡片尺寸大小。

我們可以根據行業標準獲取卡片長寬比爲1.6:1,可設置目標頂點座標(0,0)(1024,0)(1024,640)(0,640)

那麼問題來了,圖像中身份證頂點座標如何獲取?

經驗告訴我們身份證卡邊都是直線,透視變換後基本也是直線,通過直線檢測獲取四條直線相交即可獲得四個頂點座標。直線檢測可採用Hough Transform, LSD等。但這些方法魯棒性較差,直線檢測容易受背景干擾。

基於深度學習的關鍵點檢測算法登場!!!

Cascaded Pyramid Network 來自face++2017年coco keypoint benchmark 數據集冠軍的文章。主要提出了基於CPN(Cascaded PyramidNetwork)結構的人體關鍵點檢測框架。

採用CPN方法獲取關鍵點還有一大優點相較於傳統方法,那就是關鍵點是有序的,再也不用面對180翻轉怎麼辦的雞肋問題了。。。

當然也有其他關鍵點檢測算法例如 Mask RCNN。。。

求解透視變換矩陣

不滿足四點對?基於四頂點擴增標籤點數量。使用最佳子集來產生單應矩陣估計內點和異常值,提升校正效果的魯棒性。

OpenCV cv2.findHomography()算法使用了RANSAC或者LEAST_MEDIAN(由標誌決定)。最優化估計的好的匹配被叫做inliers,而其他的叫做outliers。返回一個掩圖 mask 來指定inlier和outlier。如下:

M, mask = cv2.findHomography(pts0, pts1, cv2.LMEDS)
dst = cv2.warpPerspective(img, M, (WIDTH, HEIGHT))

第三步 文本檢測

處理到目前爲止我們得到了什麼?一張張校正過的身份證圖像。。。

接下來我們進行文本檢測

文本檢測不是一件簡單的任務,尤其是複雜場景下的文本檢測,非常具有挑戰性。自然場景下傳統行投影,梯度分割等算法侷限性凸顯。

例如,MSER(Robust wide-baseline stereo from maximally stable extremal regions) 最大穩定極值區域對文字形狀變化的適應性和抗干擾性比較差。

文本檢測本質上也是一種目標檢測,可通對Faster-RCNN這類通用目標檢測網絡進行改進,設計出適合文本檢測全新架構。

CTPN

採用基於faster rcnn等通用物體檢測框架的算法都會面臨一個問題?怎麼生成好的text proposal?這個問題實際上是比較難解決的。因此在這篇文章中作者提供了另外一個思路,檢測一個一個小的,固定寬度的文本段,然後再後處理部分再將這些小的文本段連接起來,得到文本行。

之所以選用CTPN這個文本檢測框架是有原因的:

  • 將文本檢測任務轉化爲一連串小尺度文本框的檢測;
  • 引入RNN提升文本檢測效果; 利用特徵前後文信息提升魯棒性;
  • Side-refinement(邊界優化)提升文本框邊界預測精準度。

這裏一些同學該反駁了,CTPN有個大缺點!對於非水平的文本的檢測效果並不好!!

這個嘛 前面我們預處理對身份證圖片進行了校正,文本位於水平方向的,完全可以與CTPN無縫銜接,充分發揮CTPN良好的工業化適用能力。

推薦一篇文本檢測算法綜述

再來一篇。。。

文本檢測效果如下

第四部 文本識別

得到多個文本行圖像後,就要進行字符識別
傳統的方法比如投影分割出單字後進行通過模板匹配,淺層神經網路分類識別幾乎已經沒有市場。
現今基於深度學習的端到端OCR技術正大行其道。

主要有兩大技術方向CRNN OCR和attention OCR。其實這兩大方法主要區別在於最後的輸出層(翻譯層),即怎麼將網絡學習到的序列特徵信息轉化爲最終的識別結果。這兩大主流技術在其特徵學習階段都採用了CNN+RNN的網絡結構,CRNN OCR在對齊時採取的方式是CTC算法,而attention OCR採取的方式則是attention機制, 本文將介紹應用更爲廣泛的CRNN算法。

CRNN

CRNN 網絡結構由CNN + LSTM 兩部分構成,LSTM的加持使它能夠結合前後文信息,同時適用變長文本行的識別。

在這裏插入圖片描述

CRNN 具有以下優勢

  • (1)可以端到端訓練;
  • (2)可以識別任意長度的序列;
  • (3)可以訓練基於字典的模型和不基於詞典的任意模型;
  • (4)訓練速度快,並且模型很小。

CRNN訓練用樣本如何獲取?有限的身份證數據集僅包含部分字符樣本,或者字符概率分佈極不平衡。

因此需要機器生成訓練用樣本,通過透視變換,模糊,抖動,背景融合等增強樣本數據。如下 Fake News。。。

最後 信息抽取

得到雜亂的文本識別結果後,就需要抽取關鍵身份證信息關鍵字段了,姓名,性別,住址,號碼。。。等

八仙過海各顯神通了,對於身份證信息來說格式相對固定,可通過關鍵字匹配,結合位置信息來編寫抽取規則。

這部分重要嗎?非常重要!!!結構化的輸出識別信息纔是客戶的最終需求,它對精度影響是直接的。

一些有用的規則不能忽略,比如身份證號碼符合國標校驗的,,,

總結

以上是筆者在對身份證信息高精度識別流程的實踐總結,可推廣應用至銀行卡,駕駛證,戶口本等其他類似卡證智能識別場景。

當然有同學會覺得流程過於複雜,比如目標檢測可以直接跳過,圖像校正也可以跳過,直接進行文本檢測。

本文提供的通用卡證信息識別流程框架,是充分考慮使用場景,保證識別精度,提升識別效率,建立在實踐基礎上的。。。

歡迎同學們可訪問如下鏈接,測試評估交流!!

Email:[email protected]

身份證信息識別服務

銀行卡信息識別服務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章