陳佳林
(應(yīng)急管理部信息研究院,北京 100029)
隨著智能手機(jī)、PAD 等智能設(shè)備的迅速發(fā)展,移動(dòng)支付不斷普及。對(duì)于移動(dòng)支付而言,需要用戶綁定16~19 位信用卡號(hào)碼。手機(jī)端手工輸入信用卡號(hào)碼速度慢、易出錯(cuò),造成用戶體驗(yàn)差。為提高在移動(dòng)終端設(shè)備包括智能手機(jī)、PAD 等的信用卡號(hào)碼錄入速度和準(zhǔn)確率,提高移動(dòng)支付用戶體驗(yàn),如何快速自動(dòng)提取并錄入信用卡號(hào)碼則成為一個(gè)充滿商機(jī)和亟待解決的問(wèn)題。
字符識(shí)別技術(shù)研究,特別是印刷體字符的識(shí)別研究已經(jīng)相對(duì)成熟。字符識(shí)別技術(shù)可以簡(jiǎn)單分為基于傳統(tǒng)模式識(shí)別技術(shù)和基于深度學(xué)習(xí)的字符識(shí)別技術(shù)。傳統(tǒng)的字符識(shí)別技術(shù),由圖像預(yù)處理、特征提取、分類器設(shè)計(jì)等幾個(gè)關(guān)鍵步聚組成。經(jīng)典的字符識(shí)別特征包括Gabor 特征[1]、方向線素特征[2-3]、梯度方向特征[4-5]等。分類器則有最小距離分類器MDC、修正二次鑒別分類MQDF[6]、支持向量集SVM等?;谏疃葘W(xué)習(xí)的字符識(shí)別技術(shù)采用卷積神經(jīng)網(wǎng)絡(luò)CNN 提取特征和分類[7-9],是一種端到端(Endto-End)的識(shí)別技術(shù)?;谏疃葘W(xué)習(xí)的識(shí)別技術(shù)需要大量的訓(xùn)練樣本,并且在一些中低端移動(dòng)設(shè)備的推理速度較慢,很難達(dá)到實(shí)時(shí)。而傳統(tǒng)的識(shí)別技術(shù),只要每個(gè)類別字符樣本數(shù)不為0 就可以訓(xùn)練,預(yù)測(cè)速度遠(yuǎn)快于基于深度學(xué)習(xí)的算法。信用卡作為個(gè)人隱私數(shù)據(jù),很難收集大量樣本,所以采用了傳統(tǒng)技術(shù)方案。
傳統(tǒng)的OCR 方法一般基于二值圖像進(jìn)行定位、切分和識(shí)別。很明顯信用卡號(hào)碼無(wú)法通過(guò)二值化得到滿意的效果,必須另尋他路[10-19]。根據(jù)手機(jī)預(yù)覽圖像視頻流識(shí)別的模式,文中設(shè)計(jì)了圖像預(yù)處理、信用卡號(hào)碼行定位、信用卡號(hào)碼字符串分割、單字符識(shí)別引擎、識(shí)別結(jié)果校驗(yàn)等幾個(gè)主要模塊。
信用卡因?yàn)槠渖虡I(yè)性一般采用絢麗的背景加Farrington-7B 字體進(jìn)行凸印,如圖1 所示。
圖1 信用卡號(hào)碼樣本
通過(guò)手機(jī)等移動(dòng)終端設(shè)備的相機(jī)預(yù)覽視頻流獲取的圖像一般會(huì)包含目標(biāo)圖像外的復(fù)雜背景,并且目標(biāo)圖像伴有透視變形和模糊現(xiàn)象。對(duì)于因圖像模糊造成無(wú)法定位卡號(hào)或識(shí)別結(jié)果不滿足LUHN 校驗(yàn)規(guī)則的情況,不會(huì)產(chǎn)生錯(cuò)誤識(shí)別結(jié)果,可以不用考慮。但透視變形會(huì)造成銀行卡號(hào)的大范圍梯形形變或傾斜,必須處理。文中設(shè)計(jì)了基于檢測(cè)銀行卡四邊的方法,得到銀行卡在原始圖像中的4 個(gè)頂點(diǎn)坐標(biāo)。通過(guò)構(gòu)建固定大小的目標(biāo)圖像,來(lái)完成圖像的校正規(guī)一化。
算法描述如下:
步驟1:提取圖像彩色Sobel 梯度,獲得彩色梯度圖;
步驟2:在彩色梯度圖像上進(jìn)行LSD 直線檢測(cè),并進(jìn)行線段合并;
步驟3:根據(jù)規(guī)則計(jì)算信用卡上、下、左、右4 條邊界線,計(jì)算相鄰邊界線交點(diǎn)。
步驟4:根據(jù)獲得的4 個(gè)原始頂點(diǎn),通過(guò)構(gòu)建目標(biāo)圖像大小獲得4 個(gè)目標(biāo)頂點(diǎn),從而得到4 組(8 個(gè))對(duì)應(yīng)點(diǎn),通過(guò)式(1)和式(2)進(jìn)行空間變換。
x′、y′表示失真圖像中的坐標(biāo)點(diǎn),x、y為校正后的坐標(biāo)點(diǎn)。系數(shù)k1~k8 可通過(guò)解方程得到,通過(guò)反向變換完成原圖的變形校正。圖2(a)表示變形圖像,經(jīng)過(guò)圖像歸一化后,圖2(b)表示校正后的圖像。
圖2 圖像歸一化
對(duì)校正后的信用卡圖像,需要準(zhǔn)確定位到卡號(hào)所在的位置,鑒于信用卡背景的復(fù)雜性,無(wú)法通過(guò)傳統(tǒng)二值化或投影方法得到卡號(hào)的準(zhǔn)確行坐標(biāo)??紤]到手機(jī)的處理速度,設(shè)計(jì)了一種基于梯度積分圖的卡號(hào)定位算法。
通過(guò)1.1 節(jié)的算法,已獲得規(guī)一化的寬為856 像素,高為540 像素的裁切圖像。根據(jù)實(shí)驗(yàn)觀察和總結(jié),假定銀行卡號(hào)所在位置區(qū)域梯度值較高,基于此假設(shè),設(shè)計(jì)卡號(hào)行定位算法,如下:
步驟1:通過(guò)Sobel算子提取已校正圖像的梯度圖;
步驟2:計(jì)劃梯度圖像的積分累加圖;
步驟3:以步長(zhǎng)為2,在窗口高為40~60 之間搜索梯度最大值區(qū)域。
步驟4:對(duì)不同窗口得到的梯度最大值區(qū)域進(jìn)行加權(quán),獲取卡號(hào)精確坐標(biāo)。圖3(a)表示定位候選區(qū)域,圖3(b)表示進(jìn)行區(qū)域加權(quán)融合后的卡號(hào)定位。
圖3 卡號(hào)定位
銀行卡的前景和背景顏色接近,無(wú)法通過(guò)連通域搜索或投影的方式獲取信用卡號(hào)碼的字符切分結(jié)果。設(shè)計(jì)了一種基于SVM 的滑動(dòng)窗口判定策略,實(shí)現(xiàn)信用卡號(hào)碼切分。
首先,訓(xùn)練基于SVM 的字符前景和背景判定模型,該模型可以判斷當(dāng)前窗口圖像是信用卡號(hào)碼前景字符還是背景圖像。具體來(lái)說(shuō),就是將窗口內(nèi)的灰度圖像規(guī)一化到48*48 大小,通過(guò)提取水平和垂直梯度,進(jìn)行子窗口劃分,得到32 維的分類特征,SVM 模型訓(xùn)練和檢測(cè)均采用此類型特征。
然后,通過(guò)滑動(dòng)窗口,得到一系列判定結(jié)果,通過(guò)加權(quán)融合得到前景字符的精確坐標(biāo)。通過(guò)此方法并不保證得到全部卡號(hào)字符坐標(biāo),最終需要通過(guò)插補(bǔ)得到切分結(jié)果。
最后,只要滑動(dòng)窗口方法能找到3~4 個(gè)以上字符的精確坐標(biāo),可以通過(guò)設(shè)置字符寬高插值,計(jì)算補(bǔ)全其他字符。需注意,通過(guò)補(bǔ)齊得到的切分序列可以大于實(shí)際的銀行卡號(hào)長(zhǎng)度,最終需要通過(guò)OCR 識(shí)別和結(jié)合LUHN 校驗(yàn)得到最終的識(shí)別結(jié)果。圖4(a)表示基于SVM 模型獲取字符坐標(biāo),圖4(b)表示通過(guò)插補(bǔ)后得到的切分圖像。
圖4 卡號(hào)切分
通過(guò)對(duì)比Gabor 和8 方向梯度特征識(shí)別率和識(shí)別速度,最終選定以梯度特征作為單字符識(shí)別引擎的特征類型。方向梯度特征對(duì)規(guī)一化后的灰度字符圖像,通過(guò)Sobel 算子進(jìn)行水平和垂直梯度提取。在(x,y)坐標(biāo)位置梯度G(x,y)=[Gx,Gy]提取方法如下:
Gx(x,y)=f(x+1,y-1)+2f(x+1,y)+f(x+1,y+1)-f(x-1,y-1)-2f(x-1,y)+f(x-1,y+1);
Gy(x,y)=f(x-1,y+1)+2f(x,y+1)+f(x+1,y+1)-f(x-1,y-1)-2f(x,y-1)+f(x+1,y-1);
梯度的強(qiáng)度和方向均可由G(x,y)得到。將梯度方向從0~360 度等分為8 份,即分成8 個(gè)方向平面,分別統(tǒng)計(jì)各方向平面梯度分布情況。當(dāng)梯度位于兩個(gè)標(biāo)準(zhǔn)方向之間時(shí),可采用四邊形分解到兩個(gè)最近鄰平面。
預(yù)先將單字符圖像規(guī)一化到48*48 大小,并將每個(gè)方向平面分成窗口為8*8 大小的36 個(gè)網(wǎng)格,共8個(gè)方向平面,因此可以得到36*8=288 維方向梯度特征,如圖5 所示。
圖5 梯度強(qiáng)度分解圖
信用卡號(hào)碼識(shí)別字符集為數(shù)字0~9,為了能夠較好地區(qū)分背景噪聲,增加一個(gè)負(fù)樣本‘X’來(lái)表示一些非法字符,因此字符集為{0,1,2,3,4,5,6,7,8,9,X}。
將預(yù)先采集好的單字符樣本進(jìn)行分類,分成0~9 和X共計(jì)11 個(gè)類別。原則上可以采用每個(gè)類別字符的均值向量直接作為模板,生成共計(jì)11 個(gè)模板字典。但考慮到信用卡字符的復(fù)雜性,采用了更高效的LVQ 模板學(xué)習(xí)策略。
LVQ 學(xué)習(xí)向量量化基本原理是通過(guò)迭代學(xué)習(xí)使正確的模板距離樣本更近,使錯(cuò)誤的模板與樣本變遠(yuǎn)。對(duì)于一個(gè)輸入樣本x,尋找與其距離最近的兩個(gè)模板類mi、mj(mi為類別正確的模板,mj為類別錯(cuò)誤的模板),并且x滿足條件:
min(di/dj,dj/di)>(1-w)/(1+w);
則更新模板
mi=mi+a(t)(x-mi);
mj=mj-a(t)(x-mj);
w為窗口大小,a(t)為學(xué)習(xí)因子,di、dj為樣本與mi、mj的歐氏距離。
學(xué)習(xí)過(guò)程如下:
1)對(duì)11 類字符樣本特征向量進(jìn)行類內(nèi)K-means聚類,得到初始模板;
2)對(duì)生成的初始模板進(jìn)行LVQ 迭代學(xué)習(xí);
3)將LVQ學(xué)習(xí)結(jié)束后的模板作為最終識(shí)別字典。
在LVQ 分類器識(shí)別引擎中,單類字符類別采用的模板(原型prototypes)數(shù)量,對(duì)識(shí)別率有決定作用,通過(guò)實(shí)驗(yàn)獲取模板數(shù)量對(duì)識(shí)別率的影響情況。由圖6 可以看到,當(dāng)模板數(shù)量由5 增加到9 時(shí),識(shí)別率有顯著提高。當(dāng)模板數(shù)量增加到13 時(shí),識(shí)別率趨于飽和,進(jìn)一步增加模板數(shù)量,識(shí)別率增長(zhǎng)緩慢。
圖6 LVQ中模板數(shù)量與識(shí)別率關(guān)系
為了獲得最優(yōu)的識(shí)別率,實(shí)驗(yàn)評(píng)估了以8 方向梯度特征加MQDF 分類器的識(shí)別率。MQDF 分類器的識(shí)別率和主子空間維數(shù)K有關(guān)系,實(shí)驗(yàn)結(jié)果如圖7所示。
圖7 MQDF識(shí)別率與主子空間維數(shù)關(guān)系
通過(guò)圖6 和圖7 測(cè)試獲得的數(shù)據(jù),設(shè)計(jì)分類器參數(shù)。LVQ 分類器采用每個(gè)字符類別生成15 個(gè)原型模板,MQDF 分類器主子空間維數(shù)選為60,進(jìn)行識(shí)別率性能對(duì)比,如表1 所示。
表1 LVQ和MQDF識(shí)別性能對(duì)比
從識(shí)別率測(cè)試情況看,訓(xùn)練集上LVQ 的識(shí)別率明顯高于MQDF 分類器,這得益于LVQ 的訓(xùn)練機(jī)制。在測(cè)試集上兩種分類器識(shí)別率相近,MQDF 分類器略高于LVQ 分類器。從識(shí)別速度和字典體積來(lái)看,LVQ 分類器性能要明顯優(yōu)于MQDF。因?yàn)樽罱K產(chǎn)品會(huì)用在手機(jī)移動(dòng)設(shè)備上,綜合性能考慮,采用LVQ 分類器。
鑒于預(yù)覽視頻流模式測(cè)試識(shí)別率困難,文中測(cè)試了導(dǎo)入靜態(tài)圖像的識(shí)別率。通過(guò)對(duì)3 950 張靜態(tài)信用卡圖像進(jìn)行PC 端導(dǎo)入識(shí)別測(cè)試,信用卡號(hào)碼整體識(shí)別率為86.53%。在實(shí)際移動(dòng)設(shè)備應(yīng)用場(chǎng)景中,采用視頻流模式即可獲得信用卡的多幀圖像,相當(dāng)于有多次識(shí)別機(jī)會(huì),直到識(shí)別出結(jié)果。理論上其識(shí)別率要遠(yuǎn)高于靜態(tài)模式導(dǎo)入識(shí)別樣本的準(zhǔn)確率,粗略統(tǒng)計(jì)識(shí)別率應(yīng)高于90%。
該文針對(duì)移動(dòng)設(shè)備對(duì)信用卡卡號(hào)識(shí)別的需求,設(shè)計(jì)了從圖像校正、卡號(hào)定位、卡號(hào)切分識(shí)別和卡號(hào)校驗(yàn)的整套解決方案。提出了一種基于Sobel 梯度積分圖快速定位卡號(hào)的方法,這種技術(shù)可以推廣到其他的識(shí)別場(chǎng)景。提出了一種基于SVM 滑窗的卡號(hào)分割算法,通過(guò)對(duì)卡號(hào)位置進(jìn)行水平滑窗,作SVM分類,判斷當(dāng)前窗口是否為有效字符位置,這樣可以得到多個(gè)字符錨點(diǎn),然后通過(guò)插值切分整個(gè)卡號(hào)行。設(shè)計(jì)了一種基于梯度方向特征和LVQ 分類器的單字符識(shí)別方案。通過(guò)對(duì)比MQDF 分類器識(shí)別率和字典體積,驗(yàn)證了所提字符識(shí)別方法的有效性。通過(guò)實(shí)驗(yàn)測(cè)試結(jié)果表明文中所提方法靜態(tài)圖像識(shí)別率為86.53%,視頻流動(dòng)態(tài)圖像識(shí)別率大于90%,達(dá)到了預(yù)先設(shè)計(jì)需求。
文中方法在處理一些背景極度復(fù)雜的銀行卡號(hào)時(shí),會(huì)有誤識(shí)現(xiàn)象,這將是下一步要研究的方向,后續(xù)還會(huì)增加對(duì)信用卡截止日期和持卡人姓名的識(shí)別。