在基本完成了銀行卡識別之后,開始新的任務:發(fā)票類OCR識別画侣。發(fā)票類OCR識別一直以來也是OCR之中的熱點祥绞,包括證件類識別等等,后續(xù)都要一步步來段誊。
一:發(fā)票格式解析
現(xiàn)在隨著無紙化辦公的推行,電子發(fā)票的使用率越來越多栈拖,紙質發(fā)票的數(shù)量越來越少连舍,一般來說,我們現(xiàn)在的發(fā)票分為三大類:
①:增值稅電子普通發(fā)票 ②:增值稅普通發(fā)票 ③:增值稅專用發(fā)票
現(xiàn)在以我在京東購物的發(fā)票為例:
發(fā)票的尺寸為24*14cm,都是比較規(guī)范的標準涩哟。
二:發(fā)票識別分析
我們識別一張發(fā)票索赏,我們一定是想從當中查詢到那些信息盼玄,那些信息有用我們著重識別,那些信息沒用我們可以暫且放在一邊潜腻。在國家稅務總局全國增值稅查驗平臺上埃儿,我們來驗證一張發(fā)票是否合法,著重要注意四項:
①發(fā)票代碼融涣,②:發(fā)票號碼童番,③:開票日期,④開票金額
只要找到這四項威鹿,基本上一張發(fā)票的利用價值就結束了剃斧。
那問題來了,如何找到這四項专普,現(xiàn)在有兩個思路:
第一種,識別發(fā)票二維碼弹沽。第二種檀夹,直接全局識別發(fā)票內(nèi)容(最全,也是最麻煩)
當然策橘,為了保證代碼的有效性炸渡,這兩種我們肯定都得做。
第一種:識別發(fā)票二維碼
識別左上角的二維碼丽已,二維碼中包含發(fā)票里面大部分有用信息蚌堵,并且識別的結果基本上無誤差。我寫了個小代碼識別了一下:
01,10,011002000111,31015945,251.77,20200407,68212483303223031362,A6CA,
這里邊的信息需要說一下:
發(fā)票二維碼中一共有8個屬性:
以我識別出來的為例:
其中第二項:不同的代碼表示的發(fā)票類型不一樣
10表示的是增值稅電子發(fā)票沛婴, 04表示的增值稅普通發(fā)票(紙票)吼畏,01表示增值稅專用發(fā)票
微信識別結果:
但是二維碼識別的問題在于,如果上傳的都是電子版截圖嘁灯,效果很不錯泻蚊,很好識別,但是如果上傳的是拍照的紙質發(fā)票丑婿,這種識別方法需要做一些圖像處理后再去識別性雄,并且很多情況下識別二維碼是無效的。這是需要改進的地方羹奉。使用pyzbar
識別的成功率在65%左右秒旋。
第二種:OpenCV+神經(jīng)網(wǎng)絡
第二種方法使用的方法和之前識別銀行卡的架構很相似,但是處理起來會更麻煩诀拭,原因有幾點:
①:銀行卡只需要識別卡號迁筛,而發(fā)票信息需要定位更多地方
②:需要標注數(shù)據(jù)量很多,人力要求高
初步思路:
讀入圖片-> 邊緣檢測->二值化->輪廓檢測->篩選結果融合->定位->數(shù)據(jù)集制作->模型訓練->識別
先慢慢進行耕挨,一點點摸索吧~