百度AI攻略:iOCR財會票據

【使用攻略】+【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便於進行驗證。

相關文章
相關標籤/搜索