天天看點

百度AI攻略:iOCR自定義模闆功能

1. 功能介紹

百度已經推出了iOCR财會票據識别,針對财會報帳場景提出的專項解決方案,可對各類财務票據、報帳單、銀行回單、對賬單進行自動分類及結構化識别,并支援使用者為固定版式的新票據/單據自定義結構化識别模闆及分類器。百度iOCR财會票據識别功能非常的強大,我在:

https://ai.baidu.com/forum/topic/show/955803

這篇文章裡面已經進行了比較詳細的介紹,大家有興趣可以看一下。

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

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

2.模闆定義及平台接入

自定義模闆的功能位址為: https://ai.baidu.com/iocr#/templatelist

進入界面後,如果以前沒有定義過模闆會提示大家建立模闆,界面如圖:

百度AI攻略:iOCR自定義模闆功能

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

百度AI攻略:iOCR自定義模闆功能
百度AI攻略:iOCR自定義模闆功能

然後是定義參考字段,注意參考字段不是識别的内容,而是程式用來定位及判斷是否為模闆,還是别的内容的依據。

百度AI攻略:iOCR自定義模闆功能

然後是選擇識别的内容,這個是要識别的資料。本例子中選擇了姓名,總金額和機票号碼,3個字段。

百度AI攻略:iOCR自定義模闆功能

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

百度AI攻略:iOCR自定義模闆功能

如果滿意,可以點選釋出,将模闆釋出出去。要記錄提示資訊裡面的模闆ID,這個在下一步調用的時候要使用。

百度AI攻略:iOCR自定義模闆功能

具體接入方式比較簡單,可以參考我的另一個文章,這裡就不重複了:

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

請求參數:

百度AI攻略:iOCR自定義模闆功能

大家注意templateSign就是我們在送出定義模闆的時候傳回的ID。

傳回參數:

百度AI攻略:iOCR自定義模闆功能

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.功能評測:

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

百度AI攻略:iOCR自定義模闆功能

處理時長: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的識别範圍,對業務中的各種票據都可以進行識别。對各類發票、收據、銀行對賬單、承兌彙票等常用财務票據進行模闆制作,實作自動分類和結構化識别及财稅場景的自動化,可以有效降低企業人力成本,控制業務風險。

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