謝 陽(yáng) 程艷云
(南京郵電大學(xué)人工智能學(xué)院、自動(dòng)化學(xué)院 南京 210000)
通??山柚l(fā)票的兩個(gè)特點(diǎn)來(lái)進(jìn)行定位:發(fā)票矩形框和發(fā)票打印字符。其中利用發(fā)票矩形框定位可以充分利用發(fā)票表格框線規(guī)整的特點(diǎn)來(lái)進(jìn)行表格框線檢測(cè)并輸出坐標(biāo)進(jìn)行定位。劉長(zhǎng)松[1],白偉[2]等提出,以增值稅發(fā)票矩形框作為定位基準(zhǔn),利用矩形框兩條平行的橫線和豎線,通過(guò)投影法確定它的四個(gè)頂點(diǎn)來(lái)實(shí)現(xiàn)矩形框的定位。對(duì)發(fā)票進(jìn)行版面分析,根據(jù)矩形框與各項(xiàng)目區(qū)域相對(duì)位置固定的特點(diǎn),確定各項(xiàng)目區(qū)域的位置。該方法容易受到印章等因素的影響,若矩形框上有印章,則使用投影法定位速度無(wú)法保證并且靠投影波形定位矩形框容易失敗。為了消除印章影響,文獻(xiàn)[3]提出,使用直線表達(dá)式,計(jì)算出矩形框四條直線的焦點(diǎn),即可確定矩形框的四個(gè)頂點(diǎn)。通過(guò)檢測(cè)發(fā)票矩形框來(lái)實(shí)現(xiàn)定位,方法簡(jiǎn)單容易實(shí)現(xiàn),但是容易受到發(fā)票平整度的影響,并且需要計(jì)算直線方程和交點(diǎn),影響檢測(cè)速度。宮義山等[4~5],劉洋[6],陳超[7]等出了基于模板匹配的發(fā)票定位算法,利用母版發(fā)票對(duì)待定位發(fā)票進(jìn)行平方差匹配,不過(guò)這種方法由于需要提供模板發(fā)票并計(jì)算相關(guān)系數(shù)等多個(gè)參數(shù),在沒(méi)有模板的情況下無(wú)法實(shí)現(xiàn),而且在活動(dòng)匹配時(shí)最佳匹配點(diǎn)不能完全吻合,所以會(huì)影響定位速度和準(zhǔn)確性。
隨著越來(lái)越多的學(xué)者把精力放在如何把文字從復(fù)雜場(chǎng)景提取出來(lái),因此除了利用發(fā)票矩形框進(jìn)行定位之外,場(chǎng)景文本檢測(cè)技術(shù)也可被應(yīng)用于發(fā)票文本提取。場(chǎng)景文本檢測(cè)是指將圖像中包含文本的區(qū)域提取出來(lái),一般可分為三種方法:基于紋理的方法,基于連通域的方法和基于紋理與連通域相結(jié)合的方法[8~9]。不過(guò)這些方法都是基于自然場(chǎng)景的文本區(qū)域定位方法,沒(méi)有充分利用發(fā)票的標(biāo)準(zhǔn)規(guī)格特性,這樣使得在發(fā)票文本提取中沒(méi)有很高的效率。
在參考其他票據(jù)定位算法的基礎(chǔ)上,基于專(zhuān)利定位方法[10]的基礎(chǔ)上,通過(guò)觀察發(fā)票的框線特征提出一種基于形態(tài)學(xué)的定位算法,等高線檢測(cè)效果圖如圖1。
該定位算法具體操作如下:
1)對(duì)待處理發(fā)票進(jìn)行常規(guī)預(yù)處理,包括灰度二值化,反轉(zhuǎn)等;
(7)外賣(mài)市場(chǎng):近幾年隨著美團(tuán)、餓了么等外賣(mài)軟件的興起,越來(lái)越多的商家開(kāi)始入駐外賣(mài)平臺(tái),學(xué)生的外賣(mài)需求也日益增大。
2)運(yùn)用水平和垂直結(jié)構(gòu)元分別對(duì)發(fā)票進(jìn)行一維開(kāi)操作;
3)圖片加權(quán)合并,輸出框線坐標(biāo)集;
4)運(yùn)用List篩選計(jì)算得到右下角坐標(biāo),然后以它為基準(zhǔn)點(diǎn)計(jì)算待識(shí)別區(qū)域坐標(biāo);
5)裁剪識(shí)別區(qū)域。
整個(gè)定位流程圖如圖2。
圖2 方法流程圖
發(fā)票的預(yù)處理是發(fā)票識(shí)別前的一個(gè)規(guī)范化操作,在此進(jìn)行發(fā)票的一些特殊處理即圖片矯正,二值化,高斯去噪。
雖然我們?cè)趻呙璋l(fā)票時(shí)盡可能擺正,但是仍然無(wú)法完全避免圖像傾斜的情況,為了避免因發(fā)票傾斜導(dǎo)致的定位不精確,我們需要在定位前對(duì)發(fā)票掃描圖片進(jìn)行矯正。
本次矯正運(yùn)用到了邊界跟蹤[11]的方法進(jìn)行發(fā)票圖片輪廓提取,其次利用Susan角點(diǎn)檢測(cè)算法[12]。
1)在待矯正圖像上放置一個(gè)37個(gè)像素的圓形模板,模板在圖像上滑動(dòng),依次比較模板內(nèi)各個(gè)像素點(diǎn)的灰度與模板核的灰度,判斷是否屬于USAN區(qū)域。判別函數(shù)如下:
2)統(tǒng)計(jì)圓形模板中和核心點(diǎn)有相似亮度值的像素個(gè)數(shù)n(r0):
D(r0)是r0為中心的圓形模塊。
3)使用如下角點(diǎn)響應(yīng)函數(shù)。若某個(gè)像素點(diǎn)的USAN值小于某一特定閾值,該點(diǎn)被認(rèn)為是初始角點(diǎn),其中,g可以設(shè)定為USAN的最大面積的一半。
再利用Hough變換進(jìn)行直線檢測(cè),Hough變換將笛卡爾坐標(biāo)空間中的線變換為極坐標(biāo)空間中的點(diǎn)?;驹砣缦拢?3~14]。
在直角坐標(biāo)系中,一條直線可以表示為
式中:k和b是待定參數(shù),分別是斜率和截距。如果ρ為原點(diǎn)到直線上某點(diǎn)的距離,與x軸的正向夾角為θ,且θ?[-90°,90°]。直線可表示為
利用直角坐標(biāo)系與極坐標(biāo)空間的點(diǎn)線對(duì)偶關(guān)系來(lái)實(shí)現(xiàn)直線檢測(cè),效果如圖3。
圖3 圖片矯正效果圖
初步二值化的主要目的是將發(fā)票的背景和發(fā)票圖像中的主邊框分離,由于背景灰度值和邊框灰度值相差一般很大,因此此處二值化時(shí)所使用的閾值并非一個(gè)非常嚴(yán)格的值,可以簡(jiǎn)單地對(duì)當(dāng)前票據(jù)進(jìn)行灰度統(tǒng)計(jì),選取與背景和邊框相應(yīng)的灰度峰值,使用調(diào)和方法得到一個(gè)合適的值為背景和邊框的分界值。
圖4 二值化處理效果
腐蝕與膨脹是灰度圖像的初等形態(tài)學(xué)運(yùn)算[15]。用B(x)代表結(jié)構(gòu)元,E被定義為圖像空間。B為具有原點(diǎn)的結(jié)構(gòu)元素,腐蝕的定義為
用B腐蝕E就是B完全包含在E中時(shí),B的原點(diǎn)位置的集合。膨脹的定義為
一維開(kāi)操作即對(duì)利用一維結(jié)構(gòu)元SE對(duì)圖片進(jìn)行先腐蝕再對(duì)結(jié)果進(jìn)行膨脹的的形態(tài)學(xué)操作,腐蝕和膨脹結(jié)構(gòu)元的選取很重要,在此我們選取一維矩形結(jié)構(gòu)元,設(shè)圖片長(zhǎng)度為L(zhǎng),參數(shù)e,在垂直等高線檢測(cè)時(shí)結(jié)構(gòu)元選取為(1,EH)即寬為1,長(zhǎng)為EH,在水平等高線檢測(cè)時(shí)選取(EH,1),EH參數(shù)為一個(gè)特定的參數(shù)選取不固定,它取決于文本圖像的平均字符高度,因此我們進(jìn)行平均字符大小估計(jì),在此提出一種基于計(jì)算周邊矩形連接元素高度的自動(dòng)估計(jì)平均字符高度的方法,步驟如下:
1)選取一個(gè)隨機(jī)像素p(x,y),且它四個(gè)相鄰像素中至少有一個(gè)背景像素;
2)從像素p(x,y)開(kāi)始,我們沿該像素連接的矩形元素輪廓進(jìn)行操作;
3)重復(fù)1)、2)步,直到我們擁有最大的樣本量,并計(jì)算出像素周邊矩形連接元素的高度值集H;
4)取H中的最大值計(jì)為EH,這就是平均字符高度,示例如圖5所示。
圖5
本文算法是利用已經(jīng)選取的一維結(jié)構(gòu)元對(duì)圖片進(jìn)行開(kāi)操作,分別迭代3次,由此可得到水平和垂直的等高線圖片,如圖6所示,圖6(a)為水平結(jié)構(gòu)元卷積后得到的垂直等高線,圖6(b)為垂直結(jié)構(gòu)元卷積后得到的水平等高線。
圖6 水平和垂直的等高線
得到這兩張等高線圖片后,我們利用圖片加權(quán)算法進(jìn)行Addweight,設(shè)置兩個(gè)圖片的權(quán)值相等,合并加權(quán)后,為使表格框線更加清楚,在此我們?cè)俅芜x取3*3結(jié)構(gòu)元對(duì)加權(quán)合并后的圖片進(jìn)行卷積。卷積后對(duì)圖片按位取反得到圖7,圖7就是完整的發(fā)票表格線框架。
圖7 合并加權(quán)后得到的發(fā)票表格框線
在得到發(fā)票表格框線圖后,利用OpenCV庫(kù)將坐標(biāo)集以List方式進(jìn)行輸出,取得每條直線段的頂點(diǎn)坐標(biāo)集,坐標(biāo)集以(x,y)坐標(biāo)對(duì)形式存儲(chǔ),如圖8所示。
圖8 坐標(biāo)散點(diǎn)圖
將含有坐標(biāo)集的多維數(shù)據(jù)進(jìn)行降維成一維數(shù)組,取得其中最大的數(shù)即右下角的橫坐標(biāo),再進(jìn)行奇數(shù)索引篩選取最大值得到右下角的縱坐標(biāo),這樣就獲得了右下角的坐標(biāo),通過(guò)以上方式獲得的(x,y)就是基準(zhǔn)點(diǎn)坐標(biāo)。再通過(guò)基準(zhǔn)點(diǎn)坐標(biāo)獲得待識(shí)別區(qū)域的坐標(biāo)并進(jìn)行剪裁得到待識(shí)別區(qū)域圖片。
本文代碼采用Python及其相關(guān)庫(kù)進(jìn)行編寫(xiě),該系統(tǒng)用52張標(biāo)準(zhǔn)的印刷體電子稅發(fā)票作為樣本,在不需要模板的情況下分別與投影法,直線檢測(cè)法進(jìn)行對(duì)比,對(duì)比結(jié)果如表1。
表1 對(duì)比結(jié)果
定位后的裁剪示例如圖9。
圖9 定位后的裁剪示例
以上都可以通過(guò)本文算法準(zhǔn)確快速定位到需要識(shí)別的區(qū)域。
本文中提出的基于OpenCV形態(tài)學(xué)的發(fā)票定位技術(shù),利用結(jié)構(gòu)元水平和垂直雙卷積,再加權(quán)合并,從而定出發(fā)票的表格框線,并在確定框線后直接輸出框線坐標(biāo),通過(guò)坐標(biāo)篩選找到基準(zhǔn)點(diǎn),有效提高了定位準(zhǔn)確率和速度。這種方法排除了印刷體文字和發(fā)票上其他標(biāo)識(shí)造成的定位困難,直接定位到發(fā)票表格內(nèi)區(qū)域,而且不需要額外提供模板,從這種意義上講,該技術(shù)是非常通用的。特別是在中國(guó),這種印刷體發(fā)票種類(lèi)很多并且使用頻繁,這種基于等高線檢測(cè)的發(fā)票識(shí)別方法有較大的應(yīng)用價(jià)值。