ESAP达摩院 思想有多远,我们就能走多远

ESAP暗黑教程|图片上传+AI识别存到表单


ESAP4.0功能前瞻

客户需求

我要在现场能快速记录单据,包括发票,银行回单等,直接拍照上传,最好能自动识别发票号等关键信息。

祭出4.0组件

因为AI识别发票需要大量使用AccessToken,所以我们要从esap官网下载tokenserver组件服务,

下载解压后,使用notepad++等工具修改tc.yml,配置oauth2.0的id和key,Demo使用村长的百度AI,端口port用默认的19999

接下来进入admin配置令牌服务器,示例安装在本机,所以填入http://127.0.0.1:19999

实现场景

首先,制作一个【发票Demo】模板,里面包含5个关键信息字段:买卖双方,发票号,日期,发票图

接下来,在企业微信的应用中增加一个【采发票】菜单,ID=cfp,类型为:拍照或相册菜单

在esap查询中建立一组查询,有2个查询,其中第一个查询由菜单(ID=cfp)发起,模式=2,表示新建表单模式,设置下一步,由于前面使用的是拍照或相册菜单,这里模板返回空。

实际填报效果如下,在点击【采发票】菜单后,直接传图即可。

工作台也生成了相应表单,客户需求搞定了。

代码解析

gettoken函数

4.x版简化为token

配置tokenserver后生效,获取tokenserver中对应app的access_token,

Demo中的片断{ { ... gettoken "bdai" ... } }最终会解析成 { { ... 百度AI的access_token ... } }

其他示例:{ { ... gettoken "app1" ... } }

makemap函数

4.x版简化为map

makemap用来构建post请求的body,参数必须为偶数个数,例如{ {makemap "name" "村长" "num" 18988889999} }会被解析为

一个body对象:{name: "村长", num: 18988889999}

base64,getbody函数

getbody在4.x版简化为body

base64函数故名思意,将一组字节编码为base64,通常用getbody(url)来获取微信图片的字节。

使用base64编码图片字节是百度AI的要求。

apiget函数

4.x版简化为get,get(url)

原型:ApiGet(method, url, body)

该函数是一个http请求函数,method可以为get或post,函数返回json对象。

示例中,我们把用户发来的图片url(.praw)转化为字节并进行了base64编码,

然后post到了百度AI接口:https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice,

最终得到的数据赋值给了$data变量,在后续的sql中就可以直接使用变量中的值了。

更多变量值参考百度AI文档:https://ai.baidu.com/docs#/OCR-API/5099e085

小结

主要应用Tokenserver配合ESAP获取AI所需的AccessToken,使用apiget等高级自定义工具函数联合查询。

本文示例应用ESAP3.0.32+支持,本文涉及的JU/NX数据库备份可在JUable/Nxcells达摩院中下载。

2019-03-20


近似文章