◆阮章媛 陳麗娟
(福州工商學(xué)院 福建 350700)
現(xiàn)如今,移動(dòng)互聯(lián)網(wǎng)產(chǎn)業(yè)發(fā)展迅速,人們的物質(zhì)生活水平有了顯著的進(jìn)步,手機(jī)等移動(dòng)設(shè)備被人們所廣泛使用,移動(dòng)支付也慢慢成為當(dāng)前最主要的支付方式之一。銀行卡號(hào)識(shí)別系統(tǒng)是移動(dòng)支付系統(tǒng)非常重要的模塊之一,銀行卡號(hào)識(shí)別系統(tǒng)具有廣泛的應(yīng)用范圍,可以快速有效解決繁雜的卡號(hào)錄入的問題,也可以快速處理銀行轉(zhuǎn)賬業(yè)務(wù),因此銀行卡號(hào)識(shí)別系統(tǒng)在當(dāng)今社會(huì)上具有很大的使用價(jià)值。
在銀行卡號(hào)識(shí)別系統(tǒng)中,以數(shù)據(jù)集處理為基礎(chǔ),卡號(hào)能否準(zhǔn)確提取直接決定了后續(xù)字符分割和識(shí)別的精度以及圖像處理與識(shí)別的質(zhì)量與成敗。銀行卡號(hào)識(shí)別是從銀行卡片圖像中確定卡號(hào)所在區(qū)域并提取出卡號(hào)文本圖像,這其中的提取過(guò)程相當(dāng)復(fù)雜,會(huì)因?yàn)榭ㄆ尘?、拍攝視角、光線、卡片數(shù)字磨損等原因使卡號(hào)識(shí)別受到影響。想要在各種復(fù)雜的情況中快速且準(zhǔn)確的識(shí)別卡號(hào)成為銀行卡號(hào)識(shí)別中的難點(diǎn)。
現(xiàn)在銀行卡號(hào)識(shí)別已經(jīng)提出了很多方法,其中圖像處理過(guò)程中經(jīng)常用到的算法有:圖像灰度化、二值化以及直方圖均衡化等。卡號(hào)區(qū)域主要有以下特征:顏色特征、位置特征、紋理特征等。本文綜合分析銀行卡的特征,提出了基于深度學(xué)習(xí)的銀行卡號(hào)識(shí)別技術(shù)。
基于深度學(xué)習(xí)的銀行卡識(shí)別系統(tǒng)主要分為五個(gè)部分,分別是:數(shù)據(jù)集處理、銀行卡卡號(hào)定位檢測(cè)、圖像預(yù)處理和字符分割、神經(jīng)網(wǎng)絡(luò)訓(xùn)練與字符識(shí)別以及GUI界面設(shè)計(jì)。
首先需要建立數(shù)據(jù)庫(kù),將大量的銀行卡圖片的數(shù)據(jù)集存入數(shù)據(jù)庫(kù)中;接著經(jīng)過(guò)銀行卡號(hào)特征提取實(shí)現(xiàn)銀行卡號(hào)的定位;然后運(yùn)用圖像灰度化、二值化及垂直投影等技術(shù)對(duì)銀行卡圖像進(jìn)行預(yù)處理以及字符分割;之后基于TensorFlow的框架,采用改進(jìn)之后的LeNet-5神經(jīng)網(wǎng)絡(luò)(用來(lái)識(shí)別數(shù)字的卷積網(wǎng)絡(luò))對(duì)前面分割出的單個(gè)字符實(shí)現(xiàn)模型訓(xùn)練,再采用OCR進(jìn)行精確字符識(shí)別;最后使用PyQt3語(yǔ)言搭建GUI頁(yè)面。系統(tǒng)流程圖如下圖1所示:
圖1 銀行卡號(hào)識(shí)別系統(tǒng)流程圖
本文基于深度學(xué)習(xí)的銀行卡號(hào)識(shí)別系統(tǒng)的銀行卡號(hào)定位檢測(cè)模塊與字符識(shí)別模塊涉及銀行卡圖像數(shù)據(jù)庫(kù)、單個(gè)字符圖像數(shù)據(jù)庫(kù)及銀行名稱數(shù)據(jù)庫(kù)等。無(wú)論對(duì)于哪一種字符識(shí)別來(lái)說(shuō),都是數(shù)據(jù)庫(kù)越大,識(shí)別出的結(jié)果越精確。然而,由于銀行卡圖片以及銀行卡賬號(hào)涉及個(gè)人隱私問題,導(dǎo)致目前在各個(gè)領(lǐng)域均沒有公開的銀行卡圖片或是銀行賬號(hào)的數(shù)據(jù)庫(kù),因此需手動(dòng)創(chuàng)設(shè)一個(gè)銀行卡片相關(guān)的數(shù)據(jù)庫(kù)。
現(xiàn)如今,我國(guó)的銀行大致分為六類:中央銀行、政策性銀行、商業(yè)銀行、信用社、郵政儲(chǔ)蓄以及非銀行金融機(jī)構(gòu)。銀行的種類繁多也導(dǎo)致了銀行卡片的多種多樣,不同銀行的卡片在背景以及卡號(hào)凹凸壓印上也有著不同的處理。因此,需要搜集大量不同銀行的銀行卡片圖像數(shù)據(jù)集來(lái)建立一個(gè)與銀行卡片相關(guān)的數(shù)據(jù)庫(kù)。
有了銀行卡片圖像數(shù)據(jù)集后,我們還需要整理單個(gè)字符的數(shù)據(jù)集,為后續(xù)字符識(shí)別神經(jīng)網(wǎng)絡(luò)訓(xùn)練階段做準(zhǔn)備。需要通過(guò)大量的銀行卡片圖像整理出0、1、2、3、4、5、6、7、8、9十個(gè)數(shù)字的單個(gè)字符數(shù)據(jù)集。
我國(guó)銀行卡卡號(hào)文本的顏色以金、銀、黑為主。其中,不同銀行的卡片在卡號(hào)上也有不同的設(shè)計(jì),例如卡號(hào)凹凸壓印、卡號(hào)文本含有空格數(shù)量以及卡號(hào)文本顏色與卡面是否相同等。
本文基于上述所說(shuō)的銀行卡號(hào)特征,設(shè)計(jì)了一個(gè)基于深度學(xué)習(xí)的卷積神經(jīng)網(wǎng)絡(luò)(CNN)來(lái)對(duì)銀行卡號(hào)實(shí)現(xiàn)特征提取定位,其網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
圖2 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖
首先介紹一下神經(jīng)網(wǎng)絡(luò),它是由多個(gè)神經(jīng)元組成的。其對(duì)應(yīng)的公式為:其中,該單元也可以被稱作是Logistic回歸模型。當(dāng)將多個(gè)神經(jīng)元聚集起來(lái)并含有分層結(jié)構(gòu)時(shí),就形成了標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò)模型。其對(duì)應(yīng)的公式如下:
這種神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖,可以拓展到有2、3、4、5……個(gè)隱含層。
另外,本文主要提及的激活函數(shù)為sigmoid函數(shù),其計(jì)算公式為:
CNN是局部連接網(wǎng)絡(luò)。相對(duì)于全連接網(wǎng)絡(luò)來(lái)說(shuō),CNN最大的特點(diǎn)就是:局部連接性和權(quán)值共享性。卷積層的計(jì)算方法就是根據(jù)公式: c o nv =σ(imgMat ○W+b) ,公式中“σ”表示激活函數(shù);“imgMat”表示灰度圖像矩陣;“W”表示卷積核;“○ ”表示卷積操作;“b”表示偏置值。
這里,我們以一張交通銀行卡為例,具體介紹卷積層的計(jì)算過(guò)程。本文采用Sobel卷積核,其中G_x表示水平方向,G_y表示垂直方向。具體步驟如下:
(1)用Sobel卷積核的水平方向?qū)︺y行卡圖像進(jìn)行卷積,根據(jù)前面給出的公式 im gMat○W計(jì)算卷積層。
(2)將前面卷積的結(jié)果中的每個(gè)數(shù)值均加上偏置值b,并將得到的結(jié)果中的每個(gè)數(shù)值都輸入到激活函數(shù)中。
(3)同樣地,用Sobel卷積核的豎直方向與銀行卡圖像進(jìn)行卷積。
其他銀行卡圖像處理的原理基本與之相同。如圖3所示為銀行卡卡號(hào)定位,其中(a)是原始彩色銀行卡圖像,(b)銀行卡號(hào)定位區(qū)域的圖像。
圖3 銀行卡號(hào)定位
經(jīng)過(guò)銀行卡圖像特征提取定位之后,得到的銀行卡圖像中大部分背景已經(jīng)去除,但是該區(qū)域中不僅含有銀行卡卡號(hào)還包含其他背景干擾信息,因此對(duì)定位后的銀行卡號(hào)圖像必須進(jìn)行字符分割和識(shí)別,而在字符識(shí)別前需對(duì)圖像進(jìn)行處理以提高字符識(shí)別的速率以及成功率,因此涉及圖像預(yù)處理技術(shù)。
本文運(yùn)用的圖像預(yù)處理相關(guān)算法有:圖像加權(quán)平均值灰度化、直方圖均衡化、圖像二值化、濾波處理及Canny邊緣檢測(cè)等。
經(jīng)過(guò)一系列的銀行卡圖像處理后,我們已經(jīng)清除了卡片背景干擾等雜質(zhì),得到的是僅有清晰的卡號(hào)的圖像。接著我們需要進(jìn)行字符分割,本文采用Canny邊緣檢測(cè)和垂直投影分割技術(shù),對(duì)圖像預(yù)處理后的銀行卡號(hào)字符串進(jìn)行字符分割,將一串?dāng)?shù)字的銀行卡號(hào)分割成單個(gè)字符,為后續(xù)的字符識(shí)別提供0-9的清晰的單個(gè)字符圖像。
前面我們了解了數(shù)據(jù)集處理、圖像預(yù)處理以及字符分割的相關(guān)算法,這些也是銀行卡識(shí)別系統(tǒng)中不可或缺的部分。本節(jié)將涉及深度學(xué)習(xí)的部分,即如何進(jìn)行神經(jīng)網(wǎng)絡(luò)訓(xùn)練以及單個(gè)字符的識(shí)別。本文基于TensorFlow的框架,采用改進(jìn)之后的LeNet-5神經(jīng)網(wǎng)絡(luò)對(duì)前面分割出的單個(gè)字符實(shí)現(xiàn)模型訓(xùn)練,再采用OCR進(jìn)行精確字符識(shí)別。
TensorFlow由兩個(gè)部分組成,分別是Tensor (張量)和Flow(流)。Tensor(張量)意味著N維數(shù)組,TensorFlow中所有數(shù)據(jù)均使用張量數(shù)據(jù)結(jié)構(gòu)表示;Flow(流)意味著基于數(shù)據(jù)的計(jì)算和流動(dòng)。TensorFlow是將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)傳送至人工智能神經(jīng)網(wǎng)絡(luò)中進(jìn)行分析和處理過(guò)程的系統(tǒng)。
卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程大致可以分為兩個(gè)步驟:第一步是數(shù)據(jù)從較的低層次向較高的層次傳播的過(guò)程,即前向傳播階段;第二步是當(dāng)前向傳播所得的結(jié)果與預(yù)期結(jié)果相違背時(shí),將誤差從較高的層次向較低的層次進(jìn)行傳播訓(xùn)練的過(guò)程,即反向傳播階段。
我們使用TensorFlow開發(fā)工具,采用改進(jìn)之后的LeNet-5神經(jīng)網(wǎng)絡(luò),搭建此系統(tǒng)的實(shí)驗(yàn)平臺(tái),共收集樣本1084張的源數(shù)據(jù)集(各種數(shù)字、空格的組合),并且針對(duì)各種形式銀行卡逐一進(jìn)行提取。其中我們成功識(shí)別了1032張銀行卡號(hào),其余52張銀行卡由于背景紋理過(guò)于復(fù)雜,導(dǎo)致卡號(hào)提取不完全正確,對(duì)此我們會(huì)加以改進(jìn)此系統(tǒng),力求完美提取各種銀行卡號(hào)。
GUI是可視化的圖形用戶界面,是指采通過(guò)圖形的方式呈現(xiàn)的計(jì)算機(jī)操作用戶界面,即人機(jī)交互圖形化用戶操作界面設(shè)計(jì)。
PyQt是一個(gè)用于建立可視化界面的工具,是Python編程語(yǔ)言和Qt庫(kù)的完美結(jié)合。因?yàn)槭腔赑ython這種腳本語(yǔ)言編程,所以語(yǔ)句更加容易理解,PyQt由Phil Thompson開發(fā),實(shí)現(xiàn)了一個(gè)Python模塊集,并且擁有620多個(gè)類,將近6000個(gè)函數(shù),是Python中一款功能強(qiáng)大的 GUI控件集。目前 PyQt官網(wǎng)提供了PyQt4 和PyQt5兩種版本,本文采用PyQt5進(jìn)行GUI設(shè)計(jì)。
該銀行卡號(hào)識(shí)別系統(tǒng)可以實(shí)現(xiàn)可植入化,我們已經(jīng)做出了一個(gè)可視化的界面,我們通過(guò)手機(jī)來(lái)展示該卡號(hào)識(shí)別系統(tǒng)的功能。
本GUI設(shè)計(jì)共分為兩大部分,分別是圖像獲取和識(shí)別結(jié)果,各按鈕功能如下:
拍照按鈕:通過(guò)拍照的方式獲取需要識(shí)別的銀行卡信息;
圖庫(kù)按鈕:從相冊(cè)中查找已存在的銀行卡片圖像并顯示;
銀行卡號(hào):在空白處顯示識(shí)別出的銀行名稱以及銀行卡號(hào);
相關(guān)信息:在空白處顯示客服電話以及對(duì)應(yīng)銀行官方網(wǎng)站的網(wǎng)址。
圖5 顯示識(shí)別出的銀行卡號(hào)
本文主要介紹了基于深度學(xué)習(xí)的銀行卡號(hào)識(shí)別系統(tǒng),分別從銀行卡號(hào)定位和銀行卡號(hào)識(shí)別兩方面進(jìn)行了系統(tǒng)的分析,綜合運(yùn)用了圖像處理中的:圖像灰度化處理、邊緣檢測(cè)、二值化等多種技術(shù)對(duì)銀行卡圖像進(jìn)行分析和處理,充分利用銀行卡號(hào)位置和字符串長(zhǎng)度等特征對(duì)銀行卡號(hào)進(jìn)行提取。由于客觀條件和時(shí)間的限制,本文的研究還存在很多不足,有很多方面需要進(jìn)一步提高。