使用百度大腦iOCR,快速自定義機票行程單模板識別

1. 功能介紹
百度已經推出了iOCR財會票據識別,針對財會報銷場景提出的專項解決方案,可對各類財務票據、報銷單、銀行回單、對賬單進行自動分類及結構化識別,並支持用戶爲固定版式的新票據/單據自定義結構化識別模板及分類器。百度iOCR財會票據識別功能非常的強大,我在:
https://ai.baidu.com/forum/topic/show/955803
這篇文章裏面已經進行了比較詳細的介紹,大家有興趣可以看一下。

iOCR財會票據識別內置了7種票據格式,如果我們要對其他的票據識別,比如機票行程單,要怎麼辦呢? 這就是我們今天要介紹的自定義模板功能:百度iOCR自定義模板文字識別,針對未預置且版式固定的票據單據,用戶只需上傳一張模板圖片,即可自助製作模板,建立圖片中文字的Key-Value對應關係,實現對相同版式圖片的結構化識別。

我們在今天的這篇文章裏會帶大家自定義一個機票行程單模板,包括相關的調用步驟、代碼及使用方案。

2.模板定義及平臺接入
自定義模板的功能地址爲: https://ai.baidu.com/iocr#/templatelist
進入界面後,如果以前沒有定義過模板會提示大家建立模板,界面如圖:

大家按照提示進行操作,首先上傳模板圖片,這裏選擇一張機票行程單上傳。

然後是定義參考字段,注意參考字段不是識別的內容,而是程序用來定位及判斷是否爲模板,還是別的內容的依據。

然後是選擇識別的內容,這個是要識別的數據。本例子中選擇了姓名,總金額和機票號碼,3個字段。

選擇後可以點擊“試一試”看一下模板的效果

如果滿意,可以點擊發布,將模板發佈出去。要記錄提示信息裏面的模板ID,這個在下一步調用的時候要使用。


具體接入方式比較簡單,可以參考我的另一個帖子,這裏就不重複了:
http://ai.baidu.com/forum/topic/show/943327

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#/iOCR-General-API/top

調用地址:https://aip.baidubce.com/rest/2.0/solution/v1/iocr/recognise

請求參數:

大家注意templateSign就是我們在提交定義模板的時候返回的ID。

返回參數:

 

Python3調用代碼如下:

#財會票據
#filename:圖片名(本地存儲包括路徑),template模板號
def recognise(filename,template):
    request_url = "https://aip.baidubce.com/rest/2.0/solution/v1/iocr/recognise"
    print(filename)
    # 二進制方式打開圖片文件
    f = open(filename, 'rb')
    img = base64.b64encode(f.read())
    
    params = dict()
    params['image'] = img
    params['templateSign'] = template
    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)

4.功能評測:
選一張機票對效果進行測試,具體效果如下(以下例子均來自網上):

處理時長:5.03秒
返回JSON爲
{'data': {'ret': [{'probability': {'average': 0.952863, 'min': 0.495304, 'variance': 0.01743}, 'location': {'height': 13, 'left': 88, 'top': 332, 'width': 127}, 'word_name': 'Number', 'word': '8472412222853'}, {'probability': {'average': 0.903623, 'min': 0.725142, 'variance': 0.012429}, 'location': {'height': 13, 'left': 821, 'top': 303, 'width': 87}, 'word_name': 'Total', 'word': 'cNY320.0'}, {'probability': {'average': 0.991988, 'min': 0.976156, 'variance': 0.000125}, 'location': {'height': 16, 'left': 26, 'top': 112, 'width': 45}, 'word_name': 'Name', 'word': '劉凱敏'}], 'templateSign': '6def20f811df8072292e39aa2ea382cb', 'templateName': 'airticket', 'scores': 1.0, 'isStructured': True, 'logId': '156862155738090', 'clockwiseAngle': 0.0}, 'error_code': 0, 'error_msg': ''}

提取內容爲:
Name:劉凱敏
Total: cNY320.0
Number: 8472412222853

測試下來,整體識別效果不錯。


5.測試結論和建議
經過測試發現,整體識別效果很好。對於自定義票據有很強的識別能力。該功能大大的擴展了iOCR的識別範圍,對業務中的各種票據都可以進行識別。對各類發票、收據、銀行對賬單、承兌匯票等常用財務票據進行模板製作,實現自動分類和結構化識別及財稅場景的自動化,可以有效降低企業人力成本,控制業務風險。

還有一個建議就是希望能在錄入模板的時候,提供智能選擇功能,一鍵把所有識別出來的內容都選出來,然後讓用戶在這個基礎上進行調整,加快模板的開發速度。

作者:才能我浪費99

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章