zoukankan      html  css  js  c++  java
  • 使用百度大脑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

  • 相关阅读:
    利用node搭建本地服务器调试代码
    WCF与WebService的区别
    图解HTTPS
    XMAL语法系列之-(2)---WPF控件继承图
    俩种分页的实现!
    设置二级域名共享一级域名Cookie和删除共享Cookie
    Jquery 操作IFrame
    sql中的常见的全局变量
    sql字段中逗号分隔字符串的判断
    sql sever 字符串函数
  • 原文地址:https://www.cnblogs.com/AIBOOM/p/11892054.html
Copyright © 2011-2022 走看看