分享

iOCR自定义模板文字识别

 昵称QAb6ICvc 2019-06-19

更新记录

时间更新说明
2019.04.25正式上线,新增开通付费功能
2019.02.27新增模板矩形裁切、透视裁切功能,让模板更规范,后期识别率更高;新增支持模板替换功能;模板匹配算法优化,识别准确率提升;同时对产品易用性做了多项提升
2019.02.21优化了浏览器兼容性,新增对Firefox、Safari、IE11浏览器的支持
2019.02.11分类器中加入增值税发票、出租车票、火车票、定额发票、行程单、大陆护照、机动车销售发票、车辆合格证、户口本的预置分类,用户直接勾选后即可实现对应票据的自动分类并结构化
2019.01.25模板列表增加模板图片缩略图,查找模板更方便直观
2018.12.27在识别区字段类型中新增手写数字识别类型,针对手写数字识别率更高
2018.10.31新增自定义字段类型功能,在“字段类型管理”中针对返回值是有限集合的字段,用户可以上传词典,对该字段输出值进行限定
2018.10.10分类模型升级,百度自有测试集上,准确率由95%左右全部提升到100%(视具体情况准确率可能有所波动)
2018.08.30检测模型升级,识别耗时降低20%
2018.08.16识别模型升级,漏识别率降低15.15%,准确率提升46.68%
2018.07.191.新增识别区属性选择,能针对特定类型的识别区提高识别率; 2.新增返回字段置信度;3.表格识别区新增表格线判断功能,识别准确率提升;4.新增参照字段框选引导
2018.06.04新增票据自动分类功能
2018.03.16产品易用性提升,优化使用流程
2017.12.25产品上线

注意!请拒绝使用任何第三方插件使用百度OCR服务

使用第三方非法插件会导致您的 AK / SK 泄露,导致别人可以盗用您的账户进行任意消费! 切勿使用任何第三方插件! 因此导致的账号泄露、恶意消费,请用户自行承担责任。如果您已经使用了相关的插件,建议您立即删除对应appid、更换账户密码、更新所有appid的token,或更换账号!

产品介绍

iOCR自定义模板文字识别是一款可以针对固定版面票据、卡证实现自动分类并实现字段名和字段值对应提取的OCR产品

名词解释

  • 【参照字段】:图片中位置和内容都固定不变的文字,后期上传的图片会以此为依据进行扭正,参照字段的选取会影响图片的识别率,建议选取8个以上且分散在图片四周的参照字段,单个参照字段内的文字不可以换行。

  • 【识别区】:需要识别的值可能出现的范围。

  • 【templateSign】:模板ID,用于指定后期上传的图片用哪个模板来进行识别。

  • 【classifierId】:分类器ID,用于指定使用具体某个分类器,传入本参数后不用再传templateSign参数。

模板制作步骤

总体步骤:

  1. 上传模板图片

  2. 框选参照字段

  3. 框选识别区

  4. 保存 & 试一试

  5. 发布模板

上传模板图片

点击进入产品页面: ai.baidu.com/iocr ,点击“创建模板”后上传一张清晰且摆放端正的模板图片,并对模板进行命名。

框选参照字段

填写完模板名称之后,点击「框选参照字段」标签,使用鼠标在模板图片中框选图片中内容和位置都固定不变的文字,如下图所示的橘色矩形框选区域。

**建议:**选取8个以上且分散在图片四周的固定文字作为参照字段。

框选识别区

点击「框选识别区」标签后鼠标默认启用识别区框选工具。例如单据中常见的日期。此时需要您把日期值所在的区域使用识别区框选工具框选出来,然后在右侧填写这个字段对应的字段名。

如图:蓝色矩形框选的为固定识别区 

保存之后试一试

点击“保存”之后,选择试一试进行在线测试,如果对效果满意即可发布上线。如果发布之后对想回滚到之前的版本,可以在“修改历史”里选择对应版本进行回滚。 

发布模板

如果觉得识别效果已经符合要求,可以点击下方的发布按钮进行发布操作;如果觉得效果不好,可以继续编辑/调整模板,然后保存后再测试。注意:只有发布后的模板才能在线上进行接口调用和后期的分类操作。如果没有发布,那么仅仅是生成了一个新的版本,此时对模板的任何修改都不会影响线上调用。

发布页面中提示的模板ID也可以在自定义模板管理页查询到,也就是管理页的templateSign 

线上接口会用到模板ID【templateSign】。接口文档参见此处,当然您可能还有很多其他疑问,建议您可以参考自定义模板文字识别Q&A,或者在论坛发布您的问题,甚至您可以直接加入我们QQ群(群号:570832882),直接找到我们的产品经理、研发同学和运营同学来咨询问题。

高级功能

“带表格区域”模板的制作

功能:对票据中的表格按行列返回每个单元格中的内容。 通过上面的阅读您已经可以制作相对简单的模板,接下来演示一个带有表格识别区的复杂模板:

表格识别区可以针对图像中的表格按行列返回单元格中的值。点击工具栏从左往右第二个小图标,弹出小框,输入表格的列数。例如本例中的表格共有三列,则输入3,点击插入 

将左上角蓝色的表格识别区拖到模板图片上表格区域,通过调整顶点、分割线的小白点对识别区进行调整,直至每一列识别区覆盖每一列数据。同时请注意表格识别区覆盖的是表格内容!「不包括表头」 

模板自动分类功能

功能:让系统匹配票据的模板,无需在调用前指定模板ID,替代人工对票据进行分类 很多客户使用自定义模板文字识别定制了大量模板,但是需要人工先对各类票据进行分类,再选择对应的模板进行结构化识别。为了节省用户票据分类的成本,我们加入了模板自动分类功能,客户在“分类器管理”标签中可以针对所有的自定义模板和百度平台已有的系统模板(如身份证、银行卡、驾驶证等)创建分类器,实现模板的自动分类。

创建分类器

点击“分类器管理”标签进入管理页面,点击“创建分类器”后输入分类器名称和该分类器的应用场景/功能描述后点击确定进入编辑页面。

选择参与分类的模板

需要分类的模板分为“我的模板”和“系统模板”,我的模板指客户在自定义模板文字识别中创建的模板,系统模板指百度官网预置的模板(包含了:身份证正面、身份证反面、银行卡、驾驶证、行驶证、车牌、营业执照、护照、增值税发票)。客户可以根据业务需要添加模板参与分类。

上传对应模板的训练集

参与分类的如果是百度预置的模板您无需上传训练集,如果参与分类的是您自己制作的模板则需要您准备30到100张同模板的票据打包成ZIP包以后点击“编辑训练集”上传该训练集。当所有的自定义模板都已经上传了符合要求(30到100张、同模板)的训练集后点击“开始训练”。您可以在分类器管理页面查看预计完成的时间并通过刷新查看当前状态。(上传的训练集不会影响模板识别的结果,但是会通过影响分类准确率影响最终的识别结果) 请保证后期分类的图片和训练集中的图片类型(都是扫描件/都是拍照件)、照片质量、拍摄情况尽可能一致,训练集图片越接近后期使用图片,分类效果越好!

训练完成后进行效果测试

当您的分类器训练完成后您可以在分类器管理页面点击“测试”上传图片进行分类测试,如果测试结果没有问题点击“发布”即可通过API调用该接口,参数classifierId指定某个已发布的分类器,即可实现该分类器中任意模板的自动识别。如果对分类结果不满意,建议检查训练集数据中是否包含了较多噪声数据,或尝试增加训练集内的图片数量。

自定义字段类型

功能:针对某些字段的输出值是有限集合的情况,通过用户上传字段词典,让系统智能纠正匹配,提高准确率,如婚姻状况、全国省市、教育情况。

创建字段类型

在顶部【字段类型管理】中点击【创建字段类型】,输入名称后点击【上传词典】上传txt词典文档,词典中不同字段值各占一行。 如果您的字段为:中国地市县名称、省份名称、中国民族,您可以点击【添加预置类型】,百度已经为您准备好对应的词典文件,直接点击添加后,即可在模板制作时选用。百度也将不断丰富预置词典类型,方便您使用。

制作模板时选用

在制作模板时,当您框选完识别区以后,可以在对应识别区的“字段类型”中找到“我的字段类型”并选择对应类型。这样在识别后我们会根据识别到的结果智能纠正为词典中最接近的词作为结果输出。 

请求说明

请求示例

HTTP 方法:POST

请求URL: https://aip./rest/2.0/solution/v1/iocr/recognise

URL参数:

参数
access_token通过API Key和Secret Key获取的access_token,参考“Access Token获取

Header如下:

参数
Content-Typeapplication/x-www-form-urlencoded

Body中放置请求参数,参数详情如下:

请求参数

参数是否必选类型可选值范围说明
imagetruestring-图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式
templateSignfalsestring-您在自定义文字识别平台制作的模板的ID,举例:Nsdax2424asaAS791823112
classifierIdfalseint-分类器Id。这个参数和templateSign至少存在一个,优先使用templateSign。存在templateSign时,表示使用指定模板;如果没有templateSign而有classifierId,表示使用分类器去判断使用哪个模板

请求代码示例

请参考通用文字识别(含位置信息版)的代码内容,并更换请求地址。

返回说明

返回参数

字段类型说明
error_codeint0代表成功,如果有错误码返回可以参考下方错误码列表排查问题
error_msgstring如果error_code具体的失败信息,可以参考下方错误码列表排查问题
datajsonObject识别返回的结果
data_isStructuredstring表示是否结构化成功,true为成功,false为失败;成功时候,返回结构化的识别结果;失败时,如果能识别,按行返回识别结果,如果不能识别,返回空
data_logIdstring调用的日志id
data_templateSignstring图片分类结果对应的模板id或指定使用的模版id
data_scoresfloat分类置信度,如果指定templateSign,则该值为1
data_retjsonArray识别出来的字段数组,每一个单元里包含以下几个元素
字段类型说明
word_namestringisStructured 为 true 时存在,表示字段的名字;如果 isStructured 为 false 时,不存在
wordstring识别的字符串或单字
locationjsonObject字段在原图上对应的矩形框
probabilityjsonObject字段的置信度,包括最大,最小和方差

返回示例

{    "data": {        "ret": [
            {                "probability": {                    "average": 0.998482,                    "min": 0.9957,                    "variance": 0.000002
                },                "location": {                    "height": 88,                    "left": 1202,                    "top": 437,                    "width": 267
                },                "word_name": "终点站",                "word": "天津"
            },
            {                "probability": {                    "average": 0.994316,                    "min": 0.629856,                    "variance": 0.000281
                },                "location": {                    "height": 82,                    "left": 359,                    "top": 593,                    "width": 660
                },                "word_name": "发车时间",                "word": "201706092107"
            },
            {                "probability": {                    "average": 0.998482,                    "min": 0.9957,                    "variance": 0.000002
                },                "location": {                    "height": 90,                    "left": 432,                    "top": 432,                    "width": 261
                },                "word_name": "始发站",                "word": "北京南"
            },
            {                "probability": {                    "average": 0.952242,                    "min": 0.77037,                    "variance": 0.008272
                },                "location": {                    "height": 79,                    "left": 879,                    "top": 464,                    "width": 252
                },                "word_name": "车次",                "word": "C2097"
            },
            {                "probability": {                    "average": 0.980604,                    "min": 0.932502,                    "variance": 0.000352
                },                "location": {                    "height": 74,                    "left": 982,                    "top": 877,                    "width": 206
                },                "word_name": "乘车人",                "word": "向宇波"
            },
            {                "probability": {                    "average": 0.994155,                    "min": 0.903164,                    "variance": 0.000396
                },                "location": {                    "height": 65,                    "left": 1171,                    "top": 593,                    "width": 248
                },                "word_name": "座位号",                "word": "07车无座"
            },
            {                "probability": {                    "average": 0.993914,                    "min": 1.2888,                    "variance": 0.000009
                },                "location": {                    "height": 67,                    "left": 429,                    "top": 674,                    "width": 193
                },                "word_name": "价格",                "word": "54.50"
            }
        ],        "templateSign": "1c65a67f151df56ba4e29c4dddace5ee",        "scores": 1,        "isStructured": true,        "logId": "153206517722624"
    },    "error_code": 0,    "error_msg": ""}

Q&A

Q:什么是自定义模板文字识别?什么场景下我该使用这个产品?

A:自定义模板文字识别是一款您可以针对各种票据、卡证实现字段名和字段值对应提取的OCR产品;举例:当您需要识别某一种证件(比如房产证),但是百度官方还没有针对这种类型的证件推出具体的模板识别接口,而使用通用文字识别无法实现字段名和字段值对应化的提取,这种情况下您可以使用自定义模板文字识别产品,实现结构化的数据提取。

Q:产品实现的原理是什么?

A:基本原理:如果您要识别特定的一类具有固定格式的文档,首先上传一张票据、卡证的图片作为模板(用于制作模板的图片要求摆放端正、平整,拍摄时避免过曝,阴影等不良情况),然后在模板上框选一些固定的字段作为【参照字段】。后续调用识别接口时,会将新上传的图片以【参照字段】为锚点扭正到和模板图片一致。最后框选需要识别的区域作为【识别区】,框选后在右侧给该识别区命名,点击保存,这便完成了一个模板的制作。

Q:自定义模板文字识别支持哪些浏览器?

A:推荐使用Chrome(版本58及以上),暂时不支持Safari。

Q:上传的图片有大小限制吗?上传什么样的图片效果会比较好?

A:上传用于模板制作的图片,最大:小于等于4M,且分辨率小于等于4096像素乘4096像素,最小:大于等于15像素乘15像素且大于等于1KB,后期上传识别的图片最大:大小不超过4M,且分辨率小于等于4096像素乘4096像素,最小:大于等于15像素乘15像素且大于等于1KB。 为了保证更好的效果,建议模板图片:

  1. 模板图片清晰平整,摆放端正

  2. 模板图片格式以 .jpg 为最佳,png、bmp格式识别效果欠佳

  3. 模板图片尽量突出需要识别的部分,请先手动剪裁掉不需要的部分,提高识别率

  4. 模板图片大小建议为:转为base64编码后不超过1M,不宜过大或过小

  5. 模板图片中,大多数汉字的大小保持在 32*32像素 左右,不符合的整体缩放调整

Q:我该怎么使用自定义模板文字识别?

A:首先您需要制作您的模板,在Chrome中打开 ai.baidu.com/iocr 进入模板管理界面,此时需要您首先登陆百度账号(和您的百度网盘、百度贴吧、百度文库等百度系产品通用),进入后点击创建模板,进入模板编辑界面,首先您需要给您的模板进行命名,然后点击左侧编辑框中的按钮上传模板图片(模板图片要求端正、清晰),然后框选字段值,框选后在右侧对应位置填写字段名,全部框选完后点击右侧“参照字段”标签,在图中框选参照字段(要求参见下一条Q&A),完成后点击保存,则您已经制作完您的模板,此时您可以点击“发布”按钮,把次模板发布到线上环境(保存只是保存修改记录,不会实时生效,发布后您的所有操作才会生效),然后您可以参照文档中的“请求说明”上传图片,并制定templateSign(模板标识),来指定上传的图片使用该模板。

Q:模板制作过程中怎么进行图片的缩放?

A:可以使用工具栏中的放大缩小工具,或使用鼠标滚轮,或使用触摸板(如果您的设备具有触摸板)进行双指缩放。

Q:什么是参照字段,选取时有什么注意点?

A:为了将您后期上传的图片矫正成和您模板图片以在同样的位置区间寻找关键值,您需要在制作模板的时候在“参照字段”标签页下框选至少4个(推荐框选8个以上)的参照字段,参照字段的选取需要点击编辑模板界面右上角工具栏中的“设置参照字段”工具,然后在图上拖动选取固定文字。 框选时有一些注意点:

  • 同一参照字段的文字必须在同一行;

  • 参照字段必须是模板图片和后期上传的图片中共同拥有并且内容和位置都不变的文字;

  • 参照字段尽量四散在图片的边缘,尤其是四角;

  • 参照字段尽量在模板图片上唯一,在图片中多次出现的文字段效果较差;

  • 参照字段尽量,至少4个,强烈推荐标注8个以上的参照字段,参照字段越多越分散识别效果越好;

  • 如果后期测试时显示“未匹配到模板”则是因为参照字段选取和识别的问题,请按照上述要求检查核对并重新选取参照字段。

Q:框选参照字段的时候发现识别错了,可以纠正吗?

A:可以的,您可以点击参照字段后面的编辑按钮,对参照字段进行人工纠正,输入正确的文字内容。修改正确参照字段的内容有助于提升后期模板匹配效果。纠正的规则是: -不能添加/删除超过两个字符,并且如果您框选的参照字段范围比较小,无法放下新增的两个字符,则您需要适当扩大该参照字段的框选范围 -跨行的参照字段无法编辑,请先改为框选单行文字 -不能将参照字段内容删除为空

Q:框选识别区时有什么办法可以提高准确率?

A:如果您选择的识别区内容正好为以下表格中的某一项,您可以选择对应的字段类型来提升识别效果:

字段属性适用范围输出结果
常规适用于全场景识别,
如果该切片属于下列属性中任意一个,
建议使用下面的切片属性来提高准确率
识别区所有内容
小写数字金额各类票据中金额数字结果只返回至少包含小数点后两位的数值(不满两位则默认补充为##.00)并且会忽略所有的非数字以外的文字和符号(也会丢弃¥、$)
日期单个日期如2018年7月19日结果会做归一化处理统一以20180719格式返回
长串数字如运单号、票号结果只返回长串数字、英文组合
手写汉字手写中文汉字该识别区进行全量识别,但是对手写汉字有较高的准确率
手写数字手写阿拉伯数字该识别区进行全量识别,但是对手写数字有较高的准确率
数字/英文/符号混合发票密码区识别区所有内容,相比于“常规”识别率更高
我的字段类型您可以在【字段类型管理】
中为字段值是有限集合的字段上传词典,
限定输出范围
智能匹配后的词典值

Q:在框选字段值/框选参照字段的时候不小心多点击增加了一个错误的选择框,应该怎么删除?

A:可以点击右侧的“识别区”/“参照字段”下面对应字段后的X按钮进行删除。

Q:有些识别区容易漏字、识别不准怎么办?

A:在对应识别区的“字段类型”中选择“数字/英文/符号混合”可以提高该字段的识别效果。

Q:保存和发布是什么关系/发布是用来干嘛的?

A:考虑到很多用户会把自己制作的模板使用到业务中去,所以为了尽可能的保证您业务的连续性,我们的模板编辑完后点击保存时只是把您的编辑操作保存到云端,此时,您线上使用的模板还是您之前的模板,直至您对刚才的模板进行发布操作。举例:您在2月1日生成了A模板,并点击发布,此时您调用这个接口时是使用的2月1日的A模板,然后您在3月1日对模板进行了修改,点击了保存,此时您在3月1日的所有编辑操作都已经保存在云端,但是您线上使用的模板仍然是2月1日的A模板,如果您需要使用3月1日的模板去替换2月1日的版本,您需要对3月1日编辑过的A模板进行发布操作,当您点击发布以后,您调用这个接口使用的将会是3月1日编辑的A模板。

Q:修改历史是什么?/我能回退到之前某个版本吗?

A:点击“修改历史”右侧的小箭头即可展开这个模板的版本记录,版本记录从新到旧列出了您针对这个模板修改的各个版本,您可以点击对应版本右侧的“退回到此刻”来将模板回退到当时那个版本,您框选的取值范围、参照字段都会回退到当时版本的设置,但是您的模板名字不会因此回退。

Q:制作完模板以后我可以给模板改名字吗?回退到其他版本的时候名字也会回退吗?

A:您可以在模板编辑页面随时修改您的名字,修改完名字以后需要您点击保存,此时会生成一个新的版本;在您回退到过去的某个版本的时候模板名字不会回退。

Q:分类时是否数据越多越好?

A:不一定,我们建议您每个模板提供30张同模板的训练集,如果您训练图片较丰富可以提供100张以下的图片,每张图片建议不超过500kb,选择的图片要尽量覆盖到使用的场景。同时更多的图片会导致训练时间加长。

Q:分类的细粒度大概是什么样的?

A:现在分类的细粒度为视觉元素层面有较明显的区分的图片,如身份证、银行卡、户口本这些人类能快速区分开的卡证、票据。但是无法做到需要根据文字内容来进行区分的地步,如:无法区分北京增值税专票和天津增值税专票。

Q:分类时训练数据不很是很多,能否用同一张照片PS处理成多张不同的图片来进行训练?

A:非常不建议您这么做。这样拟合出来的分类器模型没有很强的泛化能力,分类的准确性会大幅下降。我们还是建议您使用真实场景中需要分类的数据进行训练。

Q:为什么训练以后显示准确率100%,但是还会有分类错误的情况呢?

A:界面上显示的分类器的准确率预估是基于少量测试图片得出的结论,只代表在该测试集下的准确率。

Q:训练完的分类器预测的准确率不高是什么原因?

A:主要是训练数据的问题,包括: 1.某个模板的训练集中混杂了其他类型的图片; 2.训练集数据较少或过于单一没有很好覆盖全实际场景; 3.需要分类的不同模板区别不明显,如北京增值税专票和天津增值税专票 针对上述情况的解决方案如下: -1.检查每个模板的训练集,确保训练集中的图片属于同一个模板; -2.增加训练集中的图片数量,尽量覆盖实际使用时可能会遇到的场景; -3.只是文字内容级别的不同模板建议使用通用文字识别的结果作为参考进行分类。

Q:如果检查分类训练数据无误后,还是分类不准确,怎么办?

A:请加入QQ群,联系我们,群号570832882。在群里有专门的同学负责回答自定义模板文字识别的问题,到时候具体问题具体分析。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多