【使用攻略】+【iOCR財會票據】python
1.功能描述:json
對各種財務票據、報銷單、銀行回單、對帳單進行自動分類及結構化識別,並支持用戶爲新票據/單據建立結構化模板和調整分類器。具體包括:app
票據、單據識別:結構化識別增值稅發票、行程單、出租車票、火車票、定額發票等報銷類票據,關鍵字段準確率達99%,銀行回單、對帳單,字段準確率達95%測試
報銷單識別:針對黏貼在一張紙上的多張票據自動查找邊緣,切割後自動分類到對應垂類模板並依次輸出結構化識別結果。url
票據、單據自動分類:預置分類器能夠對各種報銷票據、四大行主流的銀行單據進行自動分類並輸出識別結果,同時用戶能夠自助上傳新票單的訓練集對分類器進行個性化定製3d
自定義模板文字識別:針對未預置且版式固定的票據單據,用戶只需上傳一張模板圖片,便可自助製做模板,創建圖片中文字的Key-Value對應關係,實現對相同版式圖片的結構化識別rest
2.平臺接入code
具體接入方式比較簡單,能夠參考個人另外一個帖子,這裏就不重複了:orm
http://ai.baidu.com/forum/topic/show/943327blog
3.調用攻略(Python3)及評測
3.1首先認證受權:
在開始調用任何API以前須要先進行認證受權,具體的說明請參考:
http://ai.baidu.com/docs#/Auth/top
具體Python3代碼以下:
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import urllib
import base64
import json
#client_id 爲官網獲取的AK, client_secret 爲官網獲取的SK
client_id =【百度雲應用的AK】
client_secret =【百度雲應用的SK】
#獲取token
def get_token():
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret
request = urllib.request.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
response = urllib.request.urlopen(request)
token_content = response.read()
#print (token_content)
if token_content:
token_info = json.loads(token_content)
token_key = token_info['access_token']
return token_key
3.2財會票據識別分析接口調用:
詳細說明請參考:https://ai.baidu.com/docs#/OCR-iOCR-caikuaiban-API/top
調用地址:https://aip.baidubce.com/rest/2.0/solution/v1/iocr/recognise/finance
請求參數:
返回參數:
Python3調用代碼以下:
#財會票據
#filename:圖片名(本地存儲包括路徑),
def finance(filename):
request_url = "https://aip.baidubce.com/rest/2.0/solution/v1/iocr/recognise/finance"
# 二進制方式打開圖片文件
f = open(filename, 'rb')
img = base64.b64encode(f.read())
params = dict()
params['image'] = img
params['detectorId'] = 0
params = urllib.parse.urlencode(params).encode("utf-8")
access_token = get_token()
begin = time.perf_counter()
request_url = request_url + "?access_token=" + access_token
request = urllib.request.Request(url=request_url, data=params)
request.add_header('Content-Type', 'application/x-www-form-urlencoded')
response = urllib.request.urlopen(request)
content = response.read()
end = time.perf_counter()
print('處理時長:'+'%.2f'%(end-begin)+'秒')
if content:
#print(content)
content=content.decode('utf-8')
#print(content)
data = json.loads(content)
#print(data)
result=data['data']['ret']
i=1
print ("共有發票:"+str(len(result))+"張")
for ret in result:
print ("發票No."+str(i))
print ("模板:",ret["templateSign"])
print ("置信度:",ret["scores"])
for detail in ret['ret']:
print(detail['word_name'],":",detail['word'])
print ("\n")
i=i+1
finance('../img/finance4.jpg')
4.功能評測:
選用不一樣的數據對效果進行測試,具體效果以下(如下例子均來自網上):
案例1,同種多張票據
處理時長:5.96秒
共有發票:6張
發票No.1
模板: quota_invoice
置信度: 0.78680795431137
invoice_code : 151191856001
invoice_rate : 伍拾元整
invoice_number : 01317497
發票No.2
模板: quota_invoice
置信度: 0.7889256477356
invoice_code : 151191856001
invoice_rate : 伍拾元整
invoice_number : 01317496
發票No.3
模板: quota_invoice
置信度: 0.78182858228683
invoice_code : 151191856001
invoice_rate : 伍拾元整
invoice_number : 01317499
發票No.4
模板: quota_invoice
置信度: 0.79168099164963
invoice_code : 151191856001
invoice_rate : 伍拾元整
invoice_number : 01317495
發票No.5
模板: quota_invoice
置信度: 0.79618501663208
invoice_code : 151191857001
invoice_rate : 壹佰元整
invoice_number : 00868805
發票No.6
模板: quota_invoice
置信度: 0.79390239715576
invoice_code : 151191856001
invoice_rate : 伍拾元整
invoice_number : 01317498
案例2:不一樣類型票據:
處理時長:17.81秒
共有發票:5張
發票No.1
模板: taxi
置信度: 0.77734917402267
TaxiNum : 00000000
InvoiceCode : 144131770155
Time : 16:48-16:54
FuelOilSurcharge : ¥0.00
Date : 2019-03-02
Fare : ¥9.00元
InvoiceNum : 00271519
CallServiceSurcharge : ¥0.00
發票No.2
模板: taxi
置信度: 0.75509601831436
TaxiNum : 代碼144131970169
InvoiceCode : 144131970169
Time :
FuelOilSurcharge : ¥0.00
Date :
Fare : ¥2.40元
InvoiceNum : 00059622
CallServiceSurcharge : ¥0.00
發票No.3
模板: train_ticket
置信度: 0.78016191720963
date : 2019年03月01日
seat_category : 新空調硬座
starting_station : 廣州東站
ticket_num : G041515
train_num : K675
ticket_rates : ¥395元
name : 鄧爽
destination_station : 惠州站
發票No.4
模板: taxi
置信度: 0.78751403093338
TaxiNum : A2A7X3
InvoiceCode : 144011870374
Time : 07:07-07:15
FuelOilSurcharge : ¥0.00
Date : 2019-03-01
Fare : ¥16.00元
InvoiceNum : 13896497
CallServiceSurcharge : ¥2.73
發票No.5
模板: taxi
置信度: 0.77666300535202
TaxiNum : B002494
InvoiceCode : 144011870349
Time : 19:32-19:50
FuelOilSurcharge : ¥0.00
Date : 2019-03-02
Fare : ¥31.00元
InvoiceNum : 06562694
CallServiceSurcharge : ¥0.00
測試下來,總體識別效果不錯。對於財會票據有較強的識別能力,效果很好,速度也很快,準確率很是高。
4.競品對照分析
如今也有一些其餘企業提供財會票據識別功能,這裏也與競品進行了簡單的對比分析。薪火科技也提供票據識別,而且支持線上測試,它對案例2的識別效果以下:
具體識別內容以下:
識別結果
序號 內容
1單據:共(肆)張 金額:¥19元
2GD.IDANGZHOUTAREDTP
3D002449
4檢票:二層2B
5發畫
6廠州南站D7269壞海站 144011921qo
7661A73
82019年01月31日10:22開10車01C號
9UU
10¥70.0元 網一寺住
11限乘當日當次車
12限限
135101066983****6229鄧曉
14S20140105190974023)
15票有到12306發真有到95306
16
17658483305701月1D002449廣州南售
18此發票手寫無效
19電話號陽958018
2017:41
21單價2.60元
22田塵11.1Rm
2339.00元
2421439
25稅元車築票
26GD:UANEAITAREIPT
27久州新聯
2801085099
29州通用機打發票
30廣州市做糖高速公略有限公司
31監督電話:86231800
32發發票務聯
33國天有公限四
34發票代碼144011871314
35914010172900203
36發票專用章
37發票號碼19846221
38入口4A車型限重-.
39出口8收費員十204
40
41時間19181131092:44
42
43本發票手寫及塗改無效)
44(超萬元無效)
4513打
46候時
47批接號:稅雲稅自組102015106號13118人印X288
481元行
對比能夠發現百度票據識別將的更加準確,並且將不一樣的票據內容很準確的識別爲一張票據。顯然百度票據識別的功能更加準確、強大。
5.測試結論和建議
測試下來,總體識別效果不錯。對於財會票據有較強的識別能力,效果很好,速度也很快,準確率很是高。同時支持票單自動分類,預置報銷票據票據、銀行單據分類器,針對不支持的分類僅需提供30張相同版式圖片,便可自助定製分類器,節省人工分類的成本。支持報銷單自動切分,針對單張紙上多張票據的狀況,能夠實現自動票據定位裁切,自動匹配模板進行識別並輸出結構化結果。綜上所述我認爲該功能對於提升財會工做效率會有很大的幫助。
建議在返回內容上增長每一張票據的bounding box便於進行驗證。