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