梁麗華 趙 凱 唐 琳 王 冰 孫玉冰 房家琦
(1.山東建筑大學信息與電氣工程學院,山東 濟南 250101;2.山東建筑大學材料科學與工程學院,山東 濟南 250101)
隨著計算機技術的發展,數字識別技術更加成熟,逐漸應用于車牌識別、印刷體數字識別和手寫數字識別等領域[1]。日常生活中,經常遇到綁定身份證或需提供身份證號碼的情況,而手動輸入身份證號碼易錯且耗時長,更需要仔細二次核對。因此,提出一種身份證號碼識別方法十分必要。李美玲[2]提出了基于計算機視覺的身份證號碼識別算法,該算法基于LeNet-5模型[3]自動訓練樣本圖像,優點是達到了自動識別身份證號碼的效果,不足之處在于該模型所需要的訓練樣本數量大,訓練速度慢且模型的穩定性較差。成利敏[4]構建一套基于BP神經網絡和GUI的身份證號碼識別系統,該系統雖然在訓練完成后識別準確率高,識別速度快,但是傳統的BP神經網絡存在收斂速度慢和閾值穩定性低等問題,若要得到更好的身份證號碼識別效果,仍需對算法進行進一步優化。因此,本文中提出了一種基于模板匹配的身份證號碼識別方法,該方法邏輯清晰、結構簡單且可跨平臺應用,實現身份證號碼自動識別。
身份證號碼識別前需對圖像預處理,預處理過程包含圖像灰度化、圖像二值化和ROI提取,剔除由出生日期或者家庭住址中的數字導致的身份證號碼識別干擾。
采集的原圖像通常為一幅彩色圖像,直接對彩色圖像進行處理計算復雜且難度較大,所以要對彩色圖像進行灰度化處理[5]。本文使用加權法對原圖像進行加權平均處理,算法如式(1)所示,其中g(i,j)是轉換后的灰度圖像,fR(i,j) 、fG(i,j) 、fB(i,j)分別為彩色圖像的三個分量。處理后的圖像數據類型為8位,像素灰度值的取值范圍為[0,255],處理結果如圖1所示。由于身份證圖像帶有背景圖案,所以需要對圖像進行裁剪處理。經前期實驗發現,裁切后的圖像,寬度和高度分別為原尺寸的90%時效果最佳,裁剪結果如圖2所示。


圖1 灰度圖像

圖2 裁剪后的灰度圖像
為使背景與數字的區分度更大,利于身份證號碼識別,所以對灰度圖像進行二值化[6]操作,使灰度圖像轉化為二值化圖像。本文使用大津法[7],根據輸入圖像計算出最佳閾值進行全局閾值分割,避免在固定閾值條件下,由于圖像灰度差異而造成的圖像分割錯誤等問題,閾值計算方法如式(2)~(8)所示。設輸入圖像尺寸為Mr×Nr,灰度值取值范圍為[0,L-1],ni代表了圖像灰度值為i的像素數量,pi代表了這一灰度值i出現的概率,計算公式為pi=ni(Mr×Nr) ,本文使用的是單域值分割所以,將所有像素點一共分為兩類分別為C0類、C1類,閾值分割點為T,C0類出現的概率為P0(T) ,C1類出現的概率為P1(T)。u0(T) 、u1(T)分別表示C0、C1這兩類和圖像的平均灰度級。為類間方差,T*即最佳閾值。處理結果如圖3所示。


圖3 二值化圖像
本文的目的是為了識別身份證圖像中的數字,所以需提取感興趣區域(ROI),即身份證二值化圖像中的號碼區域。本文采用特征定位方法提取身份證號碼的ROI[8]。先確定提取身份證號碼的最佳區域范圍即特征區域,然后生成了一幅掩膜圖像,如圖4所示,再使用掩膜圖像對二值化圖像進行ROI提取操作,即可得到只含有身份證號碼的二值化圖像,如圖5所示。

圖4 掩膜圖像

圖5 ROI操作取反圖像
身份證號碼識別過程包含字符提取[9]、歸一化處理和模板匹配,非常適合只有簡單數字和字母的身份證號碼提取,具有算法簡單和計算量小的優點。
經過前期身份證圖像預處理,得到一幅只含有身份證號碼的二值化圖像,該圖像分為黑色背景和白色數字和漢字,所以需要提取圖像中的數字和文字,并把每個數字和文字分離,即字符提取,再進行后續的操作。
圖像中的數字和文字并不是緊密相連的,數字或字符間存在著一定的間隔。本文使用8鄰域連通域標記法[10]實現身份證號碼字符分割,連通域標記原理如圖6和圖7所示。

圖6 連通域標記路徑

圖7 連通域標記結果
先粗定位身份證號碼區域,通過剪切后圖像中的非零灰度值像素點的返回坐標,定位數字和漢字的初步裁剪區域,如圖8所示。再對裁剪區域進行連通域標記,得到一幅帶有標記點的圖像和連通域標記的數量。

圖8 粗定位結果
連通域進行比對、拼接、裁剪。定義一個常數n= 1即從第一個連通域標記開始比較。令Lh為粗定位結果的高度,Lw為剪切后圖像的寬度。
第一步:找出第一個連通域的所有非零像素點坐標,然后計算該連通域的高度H1、寬度W1、寬高比R1、面積S1,判斷是否為最后一個連通域,若不是則尋找下一個連通域。
第二步:計算第二個連通域的高度H2、寬度W2、寬高比R2、面積S2。
第三步:對這兩個連通域進行拼接,計算拼接連通域的拼接高度Uh、寬度Uw、寬高比Ur。再計算出兩連通域的重疊高度Oh、寬度Ow、面積Os。
第四步:若兩個連通域重疊,則根據式(9)和式(10)判斷兩個連通域是否屬于同一字符。若兩式同時滿足,則判定為同一字符,若Ow<-(Lw/7)則表示兩連通域相距較遠,判定不屬于同一字符,若0<Ow則表示兩連通域重疊,且滿足式(11)或式(12),則判定兩連通域屬于同一字符。
第五步:經過第四步的判斷,若兩個連通域為同一字符,則進行拼接,再根據返回的坐標裁剪字符,若不是同一字符,則裁剪第一個連通域,再對常數n加1后返回第一步。
經過多次循環,可得到分割后的獨立字符,如圖9所示,再對其進行后續操作。


圖9 數字和漢字的字符分割結果
裁剪后的圖像尺寸可能不一致,與模板圖像的尺寸也有差別,所以將裁剪后的圖像和模板圖像歸一化[11],變換成相同的尺寸圖像以便模板匹配操作。對于二值化圖像本文采用最近鄰插值法,設圖像像素點坐標為(i,j) ,所求灰度值為,公式如(13)~(15)所示。


模板匹配法[12]是數字圖像處理中的經典算法,本文使用了自主建立的字庫T(i,j) ,字庫文件中包含了所需的數字模板和漢字的字符模板。下面根據公式(16)來計算相似度Ck,公式中的f(i,j)為所需識別的身份證號碼圖像,為所需識別身份證號碼的平均灰度,若輸入為二值化圖像則代表了圖像所有像素點的平均值。模板的表達函數由fk(i,j)和表示,分割后獨立字符和模板的寬度和高度分別表示為M和N,令M=36,N=23。使用循環對比的方式對比每一幅身份證圖像與字庫文件每一幅圖像之間的相似度Ck,Ck的數值越大,代表匹配程度越高,則最大值所對應的模板就認定為最后的識別結果。

定義的一串字符串包括了數字、字母和漢字,通過對識別出的模板圖像結果添加返回值的方式,定位到字符串編號,再進行字符拼接,得到身份證號碼的識別內容。
本文提出的基于模板匹配的身份證號碼識別方法,在MATLAB 2020b軟件,Core i7-7700處理器,16G內存和500G硬盤的計算機硬件環境下,設計一個邏輯清晰、結構簡單的數字識別仿真平臺,實現身份證號碼自動識別功能。在均勻光照、強光照和弱光照下采集30張身份證圖像,使這些圖像的明暗差異較大。分別采用BP神經網絡、Keras框架下的卷積神經網絡與本文方法作對比實驗,測試結果如表1所示。

表1 身份證號碼識別正確率
在均勻光照條件下,本文提出的基于模板匹配的身份證號碼識別方法正確率最高為96.7%,而采用BP神經網絡和Keras框架下的卷積神經網絡方法,身份證號碼識別正確率分別為86.7%和80.0%。在光照不均勻的強光照和弱光照下的身份證號碼識別,三種方法識別結果的正確率都比較低,均在75%以下。由實驗結果可知,身份證號碼識別對光照條件有一定要求,只有在均勻光照條件下正確率較高,強光照和弱光照都不利于身份證號碼識別。
本文提出了一種基于模板匹配的身份證號碼識別方法,該方法通過對身份證圖像的灰度化、二值化和感興趣區域(ROI)提取等操作,完成對身份證圖像的預處理,實現18個數字和字符分割,通過對分割后的字符圖像進行歸一化處理,得到與模板相同尺寸的圖像,最后進行模板匹配,計算號碼識別結果。實驗結果表明該方法在均勻光照條件下,身份證號碼的識別準確率較高,驗證了方法的可行性和有效性。