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

使用百度大脑iOCR,快速自定义机票行程单模板识别的更多相关文章

  1. 百度大脑IOCR财会票据识别技术接入小程序,快速实现财会票据识别

    本文主要介绍iOCR财会票据识别的小程序功能实现. 想了解微信小程序的开发过程,请参看我之前的帖子:<UNIT接入小程序>https://ai.baidu.com/forum/topic/ ...

  2. 综合5项百度大脑AI技术,快速构建智能交通方案

    一.整体方案:思路:整合百度AI功能,通过百度AI解决.优化在公交运行过程中遇到的运营.管理.安全等方面的问题.具体如下: 安全方面:通过驾驶员检测+语音合成,对驾驶员状态进行实时检测,跟踪,告警.  ...

  3. 快速上手百度大脑EasyDL专业版·物体检测模型(附代码)

    作者:才能我浪费991.    简介:1.1.    什么是EasyDL专业版EasyDL专业版是EasyDL在2019年10月下旬全新推出的针对AI初学者或者AI专业工程师的企业用户及开发者推出的A ...

  4. 全面解析百度大脑发布“AI开发者‘战疫’守护计划”

    即日起,百度大脑发布“AI开发者战疫守护计划” 大疫当前,人人有责,携手开发者共同出击抗击疫情 基于百度大脑AI开放平台和飞桨深度学习平台,积极运用算法.算力.软件等“武器”助力抗疫!   谁能参与计 ...

  5. 百度大脑发布“AI开发者‘战疫’守护计划”,AI支援抗疫再升级

    面对新冠肺炎疫情,AI开发者们正在积极运用算法.算力.软件等“武器”助力抗疫.针对开发者们在疫情防控期间的开发与学习需求,2月6日,百度大脑推出“AI开发者‘战疫’守护计划”, 正在进行疫情防控相关应 ...

  6. 百度大脑UNIT3.0详解之数据生产工具DataKit

    在智能对话项目搭建的过程中,高效筛选.处理对话日志并将其转化为新的训练数据,是对话系统效果持续提升的重要环节,也是当前开发者面临的难题之一.为此百度大脑UNIT推出学习反馈闭环机制,提供数据获取.辅助 ...

  7. 百度大脑UNIT3.0智能对话技术全面解析

    智能客服.智能家居.智能助手.智能车机.智能政务……赋予产品智能对话能力是提升产品智能化体验.高效服务的重要手段,已经开始被越来越多的企业关注并布局.然而,智能对话系统搭建涉及NLP.知识图谱.语音等 ...

  8. 百度大脑UNIT3.0详解之知识图谱与对话

    如今,越来越多的企业想要在电商客服.法律顾问等领域做一套包含行业知识的智能对话系统,而行业或领域知识的积累.构建.抽取等工作对于企业来说是个不小的难题,百度大脑UNIT3.0推出「我的知识」版块专门为 ...

  9. 百度大脑UNIT3.0解读之对话式文档问答——上传文档获取对话能力

    在日常生活中,用户会经常碰到很多复杂的规章制度.规则条款.比如:乘坐飞机时,能不能带宠物上飞机,3岁小朋友是否需要买票等.在工作中,也会面对公司多样的规定制度和报销政策.比如:商业保险理赔需要什么材料 ...

随机推荐

  1. 洛谷P1426-小鱼会有危险吗

    原题链接: https://www.luogu.org/problem/P1426 题面简述: 有一次,小鱼要从A处沿直线往右边游,小鱼第一秒可以游7米,从第二秒开始每秒游的距离只有前一秒的98%98 ...

  2. .net core 学习 读取配置文件

    在空项目中是没有配置文件的,首先要新建一个,配置文件内容如下,下面来读取各个内容 { "ConnectionStrings": { "DefaultConnection& ...

  3. 在React项目中添加ESLint

    1. 安装eslint npm install eslint --save-dev // 或者 yarn add eslint --dev 2. 初始化配置文件 npx eslint --init / ...

  4. Java快速教程步伐

    Java基础在Java基础系列文章中,我将说明Java的基础内容,特别是面向对象的相关概念. Java基础01 从HelloWorld到面向对象 Java基础02 方法与数据成员 Java基础03 构 ...

  5. C# 异步并发操作,只保留最后一次操作

    在我们业务操作时,难免会有多次操作,我们期望什么结果呢? 绝大部分情况,应该是只需要最后一次操作的结果,其它操作应该无效. 自定义等待的任务类 1. 可等待的任务类 AwaitableTask: // ...

  6. ASP.NET Core3.X 终端中间件转换为端点路由运行

    引言 前几天.NET Core3.1发布,于是我把公司一个基础通用系统升级了,同时删除了几个基础模块当然这几个基础模块与.NET Core3.1无关,其中包括了支付模块,升级完后静文(同事)问我你把支 ...

  7. 带着canvas去流浪系列之九 粒子动画

    [摘要] canvas实现粒子动画 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 粒子特效 粒子特效一般指密集点阵效果,它并不是canvas独有 ...

  8. tableview封装使用

    下载地址 使用方法    1. #import "ZFTableView.h"   2.在需要使用的地方添加ZFTableView 如下       ZFTableView *ta ...

  9. [TimLinux] Python 模块

    1. 概念 模块是最高级别的程序组织单元,它将程序文件和数据封装起来以便重用.实际上,模块往往对应Python文件,每一个文件都是一个模块,并且模块导入其他模块之后就可以使用导入模块定义的变量,模块和 ...

  10. C++fread小解

    std::fread ——C++ 输入/输出库 C 风格 I/O 定义于头文件 <cstdio> std::size_t fread( void* buffer, std::size_t ...