前言

OCR(Optical Character Recognition)光学字符识别,这个东西现在已经做的很好很成熟了,昨天跟别人聊到一个东西的时候说起来,大概是把那种word表格拍照然后上传到一个系统,然后这个系统导出word或者pdf报告。

过程

如果让我来做这个事情以我现在的认知水平,我的做法是把拍照上传的照片通过OCR提取想要的字段,然后代码操作(例如POI)word或者pdf。

我新用户百度智能云,个人认证之后可以免费领取一定时长的资源包使用,于是试了一下自定义模板OCR识别,简单的说一下使用感受。

识别的时候还是依靠你所框选的识别区域,比较适用于所框选的区域是比较固定面积大小的那种,比如规格定制的那种表单,识别区域所占大小其实差不大多,这样的话识别准确率才高,但是如果识别区域大小面积不固定,你在按照那个模板来识别就会把其他区域也识别进去,得重新制作模板。然后可以创建一个分类器,至少要求添加两个模板,每个模板至少上传30张训练集图片,才可训练模型。

注:识别区域(费用类别和主要业务说明)内容面积不大

注:识别区域(费用类别和主要业务说明)内容面积较大

如上是我自定义的两个模板,一个费用类别和主要业务说明这两块内容比较少(面积比较小),一个比较大。按理说通过分类器的上传的图片训练集训练后,费用类别和主要业务说明这两块内容(面积大小)夹在这个区间之内的图片都应该有一个较准确的识别率,但是测试结果识别准确率只有19.22%,我的理想状态是内容(面积大小)夹在这个区间之内的图片应该可以较准确的识别出来起码有个80%以上。

可能是我的训练集图片不够有价值,因为我偷懒只是搞了十张各种不同的,其余的是这十张的复制,导致这个训练集没有价值。再一个是模板只有两个,可能代表性不足。

后面我又重新加了模板(有代表性的那种),先是加了一个,后面加了两个,测试OCR短准确率较上一版降低了,而测试OCR长提高了,四个模板的分类器测试结果识别准确率只有8.61%,测试后反而是在内容面积不大的会分类到识别内容面积大的那个模板,自然就导致用了识别区域面积较大模板而把本身在要识别区域下面的不识别的区域也给识别上了,例如原本应该是 实报金额 666元 ,但是结果是 实报金额 666元总经理签,因为分类到识别内容面积大的那个模板,而把这个单元格下面的内容也识别上了一部分。

注:使用四个模板的训练准确率

而在使用两个模板的时候,上面这种情况基本不会出现,识别内容面积不大的基本都是正确的。

总结

最后,总的来说还是很厉害的百度智能云的自定义模板OCR识别,我感觉可能更适用于那种识别区域所占面积大小比较固定的,然后你标出识别区域范围变化不会太大,这种情况下识别准确率会很高。

继而就想到有时候有些东西规范化有它的好处,方便管理、使用,例如身份证、驾驶证这种,都一样的布局,假若要使用OCR识别的话,因为它的布局和字段等都是固定统一的,所以操作起来就会好很多,甚至都不用你自定义模板OCR识别,有人家给你做好的现成的xxOCR识别。但凡事不是绝对的,很多时候要学会根据实际场景需求来个性化定制这点很重要。