光学字符识别(OCR)
光学字符识别(Optical Character Recognition, OCR),目标是将图像上的字符进行分析识别,将其准化为文本格式的字符序列。
一、技术流程详解
1、图像采集
1)摄像头选取需要考虑到两个指标:像素分辨率和摄像头焦距
像素分辨率:可以通过所检测物体的最小特征决定像素分辨率。公式为:
(检测物体最大长度/物体最小特征值)*2
假设字符最大长度为300mm,最小特征值为1mm,则最小所需分辨率为600。
镜头焦距:焦距(F)的选择由CCD传感器的尺寸(Ss)、工作距离(摄像机镜头到被测物体的距离Wd)和摄像机的视场范围(Os)--3个参数来决定。
若系统要求严格,还需采用预防抖动的数码相机采集图像。
2)图像常见格式有BMP、GIF、JPG等,其中BMP格式最不容易出问题。
2、图像预处理
图像预处理主要包括二值化、图像增强、噪声处理、图像滤波等。
3、特征提取
考虑通过聚类、分割、去噪、池化等步骤获取图像中文字特征。
1)聚类是根据图像特点自适应地进行多值化的过程。推荐“极大值极小值分割”聚类方式:有多少个极大值点,就聚为多少类,并且以极小值作为类别之间的边界。通过聚类可将图片分成不同图层。
2)分层识别
每一层图像由若干联通区域组成,在此时需要文字具有一定抗腐蚀能力。联通区域边界线越短,抗腐蚀能力越强;联通区域边界线越长,抗腐蚀能力越差。
联通区域的抗腐蚀能力=该区域被腐蚀后的总面积/该区域被腐蚀前的总面积。文字区域的抗腐蚀能力大概在[0.1,0.9]之间。
相关概念:
腐蚀:图像中高亮区域被腐蚀,高亮区域减少。
3)池化操作:对特征层进行整合
4)后期处理:a.高低密度区排除:b.孤立区排除
4、文字定位
1)邻近搜索,目的是圈出单行文字。
由于部分汉字是由很简单的其他汉字组成,比如“胆”就是由“月”和“旦”组成,我们需要经过邻近搜索算法,整合可能成字的区域。
2)文本切割,目的是将单行文本切割为单字。利用切割方法(比如均匀切割),将单行文本切割成一个一个的单字。
5、文字检测
文字检测是基于深度学习的方式,同时包括了特征提取和文字定位。
现在应用得比较广泛的是Faster-Rcnn系列的方法,它的特点是:精度高,但是速度较慢。
另外还有Yolo系列的方法,它的特点是:精度较低,但是速度较快。
6、光学识别
1)模型选择:选择卷积神经网络模型
2)训练数据:除可直接获取到的数据外,还可利用程序自动生成一批训练数据,需要考虑到以下因素:
a.字库的字体数目;
b.同字不同字体;
c.同字不同颜色;
d.同字不同大小;
e.同字不同清晰程度;
f.中英文数字等等语言种类;
g.噪音影响。
3)输出结果:
a.有形近字的情况,优先考虑高频字:例如”天“和”夭“,“天”出现的频率更高,优先考虑“天”;
b.通过模型精确率评估模型效果;
d.对数据进行随机增加噪音,测试模型的效果;
e.后期处理校正:利用人工或者上下文关系,对识别结果进行校正;
f.若需按照原文排版识别,还需用版面恢复算法将输出结果输出到word或者pdf。
二、场景分析
1、OCR提取身份证信息
1)本技术可用于安防、金融、电信等等领域;
2)身份证信息提取包括了身份证照片提取及文字提取,在整个过程中可以先识别出人脸的位置再直接定位各数据位置。不用针对整个识别区域定位;
3)身份证识别可在手机端的APP里集成SDK,通过手机照片即可识别。也可通过云端识别,返回具体的识别结果;
4)身份证图像字符分布规律,可采用水平投影法进行行分割,垂直投影进行字符分割;
5)识别效果可通过误检率评估,影响效果的因素有身份证清晰度、倾斜度、光照、对比度等。
2、OCR小广告过滤
OCR除了常规识别身份证、名片等等用途,还可以用来过滤广告。现在很多直播平台、社交网站等都被广告充斥,而人工筛选这类广告需要耗费大量的精力。而在这个场景发挥OCR也能发挥它的优势。
1)广告过滤的难点除了文字提取识别外,还有背景的识别。广告背景通常会是商家的产品,这提高了OCR识别的难度。
2)广告文字很少有常规的字体,不同角度、颜色、字体的文字非常常见,繁体、火星文也常被用于广告文字。这就对模型的泛化要求更高。
3)在本场景中,除了准确率和召回率外,漏检率是非常重要的指标。
3、OCR应用于教育场景
在试题识别的场景下应用十分广泛,现在的作业帮、学霸君等APP就可以通过拍照上传试题,通过人工解答或搜题给出结果。
1)本场景下对文本定位的要求很高。而很多照片里都会含有不相干的信息,因此产品设计需考虑到文本框选的自由性。
2)中英文、数字、特殊字符种类繁多,且版面分布不均,使得识别更难。产品需要考虑到识别结果的多种反馈,可以给出参考性结果、相似题目等备选项。
三、产品体验
体验腾讯微信小程序“AI体验中心”中的OCR功能:
1、首页-计算机视觉tab
“AI体验中心”里对OCR进行了7中类型的分类,分别是“身份证OCR”“名片OCR”“行驶证OCR”“驾驶证OCR”“营业执照OCR”“银行卡OCR”“通用OCR”,我们选取“身份证OCR”和“名片OCR”进行测试。
2、点击身份证OCR(Optical Character Recognition,光学字符识别)
1)测试网上下载的假身份证:
测试结果:提示OCR失败。
测试评价:能测试出不是正常的身份证,结果可接受。
2)测试真实的,但是部分地方有曝光的身份证(这里只截取了曝光的部分):
测试结果:
测试评价:光线对OCR的识别还是会产生很大干扰。
应用层上可操作的优化方案:
a.上传身份证前说明图片的要求:例如不能模糊、不能缺角、光线不能过曝或过暗。
b.对最后结果的处理,可以再过滤一个全国省市名称的数据,完成部分文字自动校正。
c.用户可自己手动校正结果。
3、测试名片OCR
添加倒置的名片图片:
测试评价:名片倒置不影响OCR的识别,结果可接受。
4、测试总结
1)OCR的识别对图像的预处理要求(光线、模糊程度)仍然很高
2)文字位置不影响OCR识别效果
3)OCR识别平均在1s内即可返回结果,算法模型能在毫秒内识别出内容。
4)对OCR识别结果的校正仍然值得重视,而不同场景下优化这个问题的方式不同。比如刚刚提到的:身份证上面“地区”的校正可以通过比对全国省市的名称数据库完成。当然更多的过滤层意味着更慢的速度。产品的设计需要平衡这两个方面。
以上所有内容,就是本次对OCR的梳理。文章参考了大量文献,也结合了本人的实战项目经验,希望能通过这样体系化的梳理让大家有所收获。
也欢迎大家和我沟通对OCR的见解和看法,可以关注我的公众号“AI产品的自我修养”,记得留言给我哦~
另:非常感谢@黄钊hanniman 对本文作出的指导!黄钊hanniman:图灵机器人-人才战略官,前腾讯产品经理,5年AI实战经验,8年互联网背景,微信公众号/知乎/在行ID“hanniman”。欢迎关注饭团“AI产品经理大本营”,点击这里可关注:http://fantuan.guokr.net/groups/219/ (如果遇到支付问题,请先关注饭团的官方微信服务号“fantuan-app”)
附:参考文章如下
《OCR技术浅探(1)》 萨姆大叔http://t.cn/RTm3YFG
《OCR技术浅探(2)》 萨姆大叔 http://t.cn/RTm3ukC
《OCR技术浅探(3)》 萨姆大叔http://t.cn/RTm3FWK
《实际生产中OCR系统的设计》http://t.cn/RTm1Zk2
《形态学图像处理(一):膨胀与腐蚀》 浅墨_毛星云 http://t.cn/RTm1bo
网友评论