Screen OCR(光学字符识别)

20100520-20100523­

         一个针对屏幕的OCR(光学字符识别)程序,它与印刷体和手写输入OCR的区别在于:屏幕OCR属于精确识别,识别速度较快,算法也较简单,但它只能识别屏幕(或者无损BMP)上的文字,。­

     该程序的默认字型库采用索引+Hash表组织,文件大小1.48M(未压缩),内含2580个字(汉字2500个+数字10个+字母52个+标点18个)、5种字体、15种字号、2种样式,共计387000个字型。­

     经测试识别100个22号字约用时3s,100个8号字约用时0.7s,识别率一般。如果字型库用纯Hash表,那么文件大小将增大到32M,而识别速度最多可以提高6倍。另外,由于我还没有搞清楚TrueType字体的生成算法,所以暂时无法再提高识别速度。­

     关于印刷体OCR我大概也有一点思路。段落的分割算法与屏幕OCR基本一致,下面仅讨论单字的识别算法。­

     首先将目标字的高度伸缩到标准字的大小(目标字的高度已经在段落分割中由行高得到),而目标字的宽度则按保持纵横比伸缩。­

     然后由寻径算法遍历目标字的笔画,得到一个标准笔画宽度(即粗细)的字。显然,这一步比较困难。­

     最后进行模糊匹配:将目标字与标准字按左上角对齐,并对目标字的每一个像素点,看以它为中心的正方形(边长较小)中是否含有标准字的像素点,如果有则相似度+1。按此方法循环对所有标准字计算相似度,取相似度最高的字为识别字。­

     最后一步非常耗时。优化的方法是将标准字按使用频率由高到低存放,在匹配过程中如果发现相似度大于某一个值,则认为找到了识别字,中止循环。­

     可以看出这并不是一个很好的算法。如果根据笔画向量或者字体轮廓进行匹配可能会好很多,当然难度也大得多。­

     最后再简单说一说手写输入的识别,它与前两种OCR相比又有不同。因为它可以在用户手写的过程中获得笔画的顺序以及方向(如果用户写倒笔字将降低识别精度),所以从这一点上看识别起来相对更容易。但是一般来说,用户手写的字与标准字差别较大,前面提到的算法将失效。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值