1. 已排除的方法
  以下方法经过我们编写程序代码来实践验证了其不可行性。
  1.1 游程统计法
  思路:统计出点阵中的任意一点向六个角度0°、30°、60°、90°、120°、150°所能遍历的点数。如图2,最上一点往六个方向的最大值是 13,方向为上下方向(90°);又如,最左一点往六个方向的最大值是30,方向为左右方向(0°)。通过统计周围的点,可以轻易得到横竖捌捺点。
[img][/img] 
图1 “南”字的游程统计

  缺点:文字在有杂点或扫描不清楚时,识别率很低或无法识别。例如:图2的“操”字就无法用游程统计法区分出横竖捌撇。
[img][/img]
图2

  1.2 瘦边法
  思路:对文字的笔画进行腐蚀、细线化处理,从而得到文字的骨架。

图3 左图是瘦边法的理想效果,右图是黑体、粗体等瘦边后的效果

  缺点:由于黑体、粗体的笔画较粗,在进行腐蚀、细线化处理后,往往造成笔画丢失或产生多余笔画。如图4,由于“操”字有连笔,在使用瘦边法细化后产生了多余笔画,会造成误识别。

图4

  1.3 X、Y方向归一法
  思路:对文字的笔画按X、Y方向求中点进行简化笔画。
  缺点:同上。
  
  此外,还有汉字特征法、匹配法、字根特征、粗外围特征法、笔画密度法等算法,但经我们编写代码来实践证明其效果不理想,所以在此不一一介绍。

2. 我们现在采用的识别算法----双识别引擎
  我们采用双识别引擎,即:轮廓笔画描述、边角特征数据库。其中笔画描述是主要的识别算法,边角特征数据库是辅助的识别算法。
  2.1 轮廓笔画描述
  轮廓笔画描述为主要的识别方法,其关键是找出汉字点阵的轮廓,并对笔画的特性、关键性确定取舍。通过上面对传统OCR使用方法的分析,我公司花了近2年的时间调研、编程测试,用实践来证明了:只有通过分析轮廓,才能更准确地得到横竖捌捺点。游程统计法、瘦边法、汉字特征法、匹配法、字根特征、归一法等算法都无法成功地描述出笔画。
  原因一:只有基于“笔画描述”才能识别手写体文字,任何边角特征、匹配法、游程统计法等都无法归纳出手写体文字的特征,只能归纳印刷体。所以,“笔画描述”是手写体识别的唯一出路。
  原因二:经过我们编写代码来实践证明了瘦边法、归一法等简化笔画的识别方法是低效的、误差大的算法,这些算法容易丢失笔画或者产生多余的笔画。只有使用 “轮廓”才能体现出手写体文字的原貌,“轮廓”能够原汁原味地体现手写体文字的字形,而且能够实现二维的汉字点阵转化为二维矢量,实现汉字的高效识别。
  通过轮廓来描述笔画,使用许多无关大局的“短边”被“长边”归纳吞并,“曲线”被描述为“两段线段”,“局部凹凸”视周围环境也被归纳合并……这样,一个复杂的文字就被能用“尽可能少”的笔画描述出来。关键技术如下:
  2.1.1 描述轮廓,使用“逆(顺)时针搜索”算法描述出汉字的轮廓。见图5中的左图。
  假设:汉字是Width╳Height的点阵,任意一点都有左上、上、右上、右、右下、下、左下、左这8个方向的邻点。
  首先,x: 0→Width-1, y: 0→Height-1 搜索出一个黑点,该点设为P1;从点P1逆(顺)时针搜索出下一轮廓点P2,再从点P2逆(顺)时针搜索出下一轮廓点Pn……
  2.1.2 使用“切线最陡”算法区分出相邻的两个笔画。描述轮廓之后,笔画描述的关键在于决定从何处开始属于下一段笔画。经理论证明,使用“切线最陡”算法可以算出任意一点属于哪一笔画。见图5中的右图。
  假设:从第一步得到汉字的轮廓点的数组P1、P2……Pn,并且由于二维汉字点阵至少可以得到x、y坐标最大最小极值点(且至少存在4个符合这样条件的点MaxMin1、MaxMin2、MaxMin3、MaxMin4等);
  首先,遍历任意2个极值点(例如:MaxMin1和MaxMin2)之间的轮廓点,如果某一点Px的切线与MaxMin1、MaxMin2所在的直线的夹角最大,且大于一定的角度Angle(如30°),则该点能把MaxMin1、MaxMin2“至少”分为两段笔画。
  接着,遍历MaxMin1和Px之间的轮廓点,同上步的原理判断是否再分为两段笔画;遍历Px和MaxMin2之间的轮廓点,同上步的原理判断是否再分为两段笔画。
  重复以上的步骤,就可以实现汉字轮廓矢量化。
  2.1.3 无关大局的“短边”被归纳、吞并、省略,一般取矩形的1/8或1/10为参考值,小于该参考值的边就考虑吞并、省略。
  2.1.4 由于描述曲线(撇、捺等)比较复杂,比较两条曲线的相对位置关系更复杂。因此,把曲线描述为两条或多条线段,转换为计算机易于操作的对象来处理。
  2.1.5 宋体字的横或竖等笔画起始端常有一个三角形的凸出点,通过强制记忆的方法,把它们省略。
  这样,所有印刷体、手写体都能用简单的笔画描述出来。

图5 左图书是“林”的轮廓,右图是笔画描述的效果

  优点:识别速度快,不需要搜索数据库,直接由笔画得到识别结果。如果笔画足够清晰,能轻易地识别不同人书写的手写体,手写体文字识别率达到了80%以上。这正是传统OCR无法比拟的,因为传统OCR不是基于笔画描述的,不能识别或很难识别手写体。
  缺点:如果笔画模糊不清,很难用笔画来描述,如下图。

图6 笔画描述对这样模糊不清的文字“矗”就无能为力

  解决方法:不要因为某方面的缺陷,而放弃一种不错的算法。使用下面介绍的第二种识别引擎,取长补短。

  2.2 边角特征数据库:改进型四边轮廓特征
  2.2.1 传统OCR的识别算法----四边轮廓特征法
  思路:每一汉字用32╳32点阵表示,分别从上下左右四个方向扫描汉字点阵,得到四个数值P1、P2、P3、P4,把这四个数值存入数据库。通过大量的学习、记忆,得到一个所有汉字的四边特征数据库。用该方法识别汉字时,系统会从数据库中检索出一个最相似的汉字,得到识别结果。经我们编写程序、测试发现,用该方法对印刷体文字进行识别,识别率可达60%以上。

图1 “木”字的上边特征

  评价:中等

  2.2.2 改进型四边轮廓特征
  传统OCR的四边轮廓特征法,识别率不高,如:“国”、“囚”、“四”、“因”等字,因为它们的四边特征值是相同的,使用此方法无法区分、无法识别。因此,我们使用提出了新的构思,使用新的算法:在汉字内部再次切割(按1/4切割),切割后再取四边特征Q1、Q2、Q3、Q4,这样,一个文字就的特征描述就是P1、P2、P3、P4、Q1、Q2、Q3、Q4。通过大量的学习、记忆,得到一个所有汉字的内外四边特征数据库。识别汉字时,从数据库中检索出一个最相似的汉字,得到识别结果。经过我们这样的改进,印刷体文字识别率达到了80%以上。

图4 “囚”字按1/4切割后得到右边的图形

  评价:良

  通过以上同时使用两种识别引擎,扬长避短,印刷体文字的识别率提高到99%以上,手写体文字的识别率提高到90%以上。其中最显著的就是:成功解决了手写体识别的关键问题。传统OCR识别局限于某种识别方法,无法同时解决模糊不清的印刷体、变形较多的手写体,而我们提出的两种识别引擎,将能轻易地解决这种问题,并能在识别率、识别速度上有质的提高,可扩展性较强。
转载地址:http://www.chinaocr.net/show_hdr.php?xname=TVKUIV0&dname=1JJU801&xpos=3

基于笔画描述的文字识别OCR系统——技术说明相关推荐

  1. python实现文字识别软件_文字识别(OCR)CRNN(基于pytorch、python3) 实现不定长中文字符识别...

    文字识别(OCR)CRNN(基于pytorch.python3) 实现不定长中文字符识别 发布时间:2018-09-26 19:40, 浏览次数:1265 , 标签: OCR CRNN pytorch ...

  2. html识别文字转语音,万能君工具箱v1.8 - 基于百度AI实现语音转文字/文字转语音/文字识别OCR/翻译...

    一.需求分析 1.音频转文字:目前市面上的音频转文字大多收费.音频转文字的需求是:上传一段音频,直接识别成文字,对于会议记录的比较好使,注意不是实时的语音识别. 2.文字转语音:转的语音不要太生硬. ...

  3. python 百度ai批量识别_Python基于百度AI的文字识别的示例

    Python基于百度AI的文字识别的示例 使用百度AI的文字识别库,做出的调用示例,其中filePath是图片的路径,可以自行传入一张带有文字的图片,进行识别. 下载baidu-aip这个库,可以直接 ...

  4. 吴恩达《Machine Learning》精炼笔记 12:大规模机器学习和图片文字识别 OCR

    作者 | Peter 编辑 | AI有道 系列文章: 吴恩达<Machine Learning>精炼笔记 1:监督学习与非监督学习 吴恩达<Machine Learning>精 ...

  5. 吴恩达《机器学习》第十八章:图片文字识别OCR

    文章目录 十八.应用实例:图片文字识别OCR 18.1 问题描述和流程图 18.2 滑动窗口 18.3 获取大量数据和人工数据 18.4 上限分析:下一步工作 十八.应用实例:图片文字识别OCR 18 ...

  6. python批量识别图片中文字_python实现中文图片文字识别--OCR about chinese text--tesseract...

    0.我的环境: win7 32bits python 3.5 pycharm 5.0 1.相关库 安装pillow: pip install pillow 安装tesseract: 自带了英文语言包, ...

  7. 通用文字识别 OCR 等免费 API 大全分享

    智能识别 OCR 类 API 通用文字识别OCR:多场景.多语种.高精度的整图文字检测和识别服务,多项指标行业领先,可识别中.英.日.韩.法.德多种语言. 二维码识别OCR:对图片中的二维码.条形码进 ...

  8. APISpace 通用文字识别OCR API

    APISpace 的 通用文字识别OCR API,基于业界领先的深度学技术,对图片中的文字进行检测和识别,支持多种语言.并且包含文字在图片中的位置信息,方便进行版式的二次处理. 应用场景 拍照/截图识 ...

  9. attention 文字识别算法_支持40种语言的图片文字识别(OCR)项目

    Hi!大家好呀!我是你们努力的喵哥! OCR(光学字符识别)是我们日常很常用的人工智能技术.我们总会有从图片中提取文字的需求.你是不是有需要从图片复制文字的经历?手打是最低效的选择.我们可以使用 OC ...

最新文章

  1. 【sping揭秘】6、IOC容器之统一资源加载策略
  2. 如何实现Conditional Include
  3. C实现socket编程
  4. android二级菜单ui,Android UI 之实现多级树形列表TreeView示例
  5. 基于 Spring Security OAuth2和 JWT 构建保护微服务系统
  6. 基于FPGA的直流电机PWM控制+毕业论文
  7. (四)使用TensorFlow和Keras构建AI语言翻译
  8. Git工作笔记001---Windows下安装Git Core以及TortoiseGit安装与配置
  9. RedHat as4 u2下的oracle9.2.0.4安装
  10. pdg转pdf与djvu转pdf大法
  11. 详解什么是运营商大数据?
  12. BI 报表工具如何与 springBoot 框架集成
  13. 解读Verizon 2018数据泄漏调查报告:窃取身份仍是黑客最有效的攻击手段
  14. 北京交通大学计算机全球排名,2017美国研究生计算机专业排名 - 2017北京交通大学计算机考研成绩310分,能调剂到什么大学...
  15. MATLAB 自然数e的表达式坑、如何求解含有未知量的行列式
  16. 括号画家(括号匹配)
  17. 2.8.1利用“直流扫描分析”测试基本共射放大电路电压传输特性
  18. SVN SERVER 安装
  19. 数字信号处理随堂笔记(2)ᝰ离散时间信号与系统的频域分析
  20. 特斯拉是l3还是l2_特斯拉是l3还是l2

热门文章

  1. 阿里云账号企业实名认证和个人有什么区别?
  2. 诺基亚手机序列号查询
  3. Java线程池七个参数详解
  4. C#【自动化测试】对Windows桌面应用程序进行UI自动化测试
  5. Python版UI自动化测试的断言方法/Selenium Pytest方法封装断言
  6. xlwings实时操作WPS-excel记录
  7. 树莓派Python3安装pip3教程
  8. 尚未调用 CoInitialize 问题解决
  9. python实现决策树分类 mnist数据集
  10. CGCS2000、WGS84以及ITRF问题的阐述