
　　　　　　　　　　　　　Mini Ocr   汉字显示字体识别软件

　　首先声明，我不是一个OCR领域的专家。我的经验来自我写Mini Ocr软件的过程。

                                                           ――　马飞涛 

关于Mini Ocr 软件
    
    本软件是飞涛软件工作室开发的一款免费Ocr软件,主要用于识别图像文件之中，出现
的汉字显示字体。Ocr的中文含意是光学字符识别。
    为什么叫Mini呢？因为现有的识别汉字的商业Ocr软件，动辄二三十兆，而本软件解
压后，也不过三兆多，身材比较纤小，再加上本软件主要用于识别字体比较小的汉字，所
以叫Mini，中文的发音是“迷你”，中文含义是超小型。


既然有了商业Ocr软件，为什么还要开发这个软件？
    
    不同于商业Ocr软件，本软件是免费的，可以自由使用。第二个不同之处，本软件的
识别对象是屏幕出现的“显示汉字”，而不是针对扫描仪扫出来的“打印汉字”。二者有什
么不同呢？最重要的一点： 扫描出来的打印汉字的高度和宽度一般都在30多个像素点之
上，这是我用画图软件，打开某个商业Ocr的samples\sample1.tif，然后一点一点数出
来的。从文件名和目录名的中文含意可以看出，这个点数应该是一个典型值。那么，如果
用商业Ocr识别屏幕上出现的小五号字，汉字的高度是12个像素点，会出现什么情况呢？ 
测试方法：用记事本随便写几行汉字，设置字体为小五号字。这大概是看着还算舒服
的最小号的汉字字体了（高度是12个像素点），如果再小，字体就很难看了。然后，按拷
屏键PrtSc，把屏幕的图像拷贝、粘贴到画图软件中，修剪尺寸后，保存为bmp的格式。
然后，我找了两个国内最著名的Ocr软件进行测试，结果让人大吃一惊，识别率几乎为零。
把图像放大两倍，再测试，结果仍然很不理想，大概也只有百分之二三十的样子。


开发Mini Ocr软件的由来
    
    我在开发护花使者反黄图像识别软件的时候，遇到有些图像里,嵌有某些文字，如果能
把文字识别出来，图像的含义就很容易让计算机理解了。预算有限，我连扫描仪都舍不得
买，就更别想买商业Ocr的开发包了，大概几十万,或者更多，或者别人压根就不卖。况且
它们的识别率对小字体几乎为零，不符合我的要求。看来，只好自力更生，重新写一个了。


开发Mini Ocr的历程
    
    经过三个多月的努力，终于诞生了这款Mini Ocr 软件。第１个月做出了汉字识别的
核心模块，第２个月做出了文章段落切分的算法，并加入了对英文，数字，标点的支持，
第三个月继续调整英汉混排和汉字切分的算法，并用MFC 做了一个界面。


Mini Ocr的软件架构
　　
    为了让更多的人能使用到这个软件，我在windows系统下，采用VC进行编程，界面当
然只好用MFC写了。软件架构是一个SDI框架下的多窗口切分界面，左上角的窗口是一个
CFormView，用来显示常用的按钮；左下角是一个CEditView,用来显示帮助信息；右上角
是一个CView,用来显示要识别的图像；右下角是一个CEditView,用来存放识别出来的文
字。识别部分采用了工作者线程，以避免显示界面的主线程僵掉。识别部分是整个软件的
核心，与操作系统无关，可以单独摘出来放在dos窗口里跑，也可以移植到Linux系统中跑。


汉字识别软件的难点所在：

    英文识别有一些开放源码的软件，我看过的软件，主要采取两种识别方法：基于规则
的方法，和采用神经网络方法。而这两种方法，在识别汉字时，都不宜采用。因为汉字数
目众多，最常用的国标2312的一级汉字就有3755个。如果借用基于规则的方法，需要对
三千多个汉字，逐一人工写出分类规则，工作量太大，我一个人无法完成；如果采用神经
网络的方法，这么多汉字，我不敢想象，需要多少层网络和神经节点呀！如果采用网格法，
抗位移的效果太差；而采用不变矩法，识别人和入，土和士，相似度又难于控制。除此之
外，汉字切分也是一大难题。英文宽度大概只有汉字一半，标点符号大概只有汉字三分之
一宽，数字大概只有四分之一的宽度。而汉字本身又有二分字，和三分字。某些字，如“啊”，
字体小时可能是独体字，字体大些，变为二分字，字体再大，又变为三分字。加上汉字与
汉字之间的粘连、汉字与英文的混排，英文与英文的粘连，造成汉字切分模块的算法，甚
至比汉字识别模块的算法还要复杂得多。为了克服这些难点，并加快识别速度，我在算法
设计时，采用了一些优化和简化的策略。经过实践检验，证明行之有效。

Mini Ocr进行汉字识别的策略：
1) 采用复合特征的分类方法。
2) 字符集选择3755个一级汉字。
3) 字体选择最常用的宋体。
4) 字号选择从小五号到一号汉字，主要针对20个点之内的小字体。
5) 英汉混排时，汉语优先。
6) 汉字粘连时，进行动态优化切分。

展望与下一步的开发计划：
1) 重新优化英文识别的算法；
2) 对英文粘连的切分算法进行调整；
3) 移植进入Linux；


选择Ocr软件的建议：
    
    如果您选择Ocr软件，目的是用来识别扫描仪出来打印字体，推荐还是选用知名的商业Ocr。
如果您要识别屏幕上显示的汉字，Mini Ocr是一个比较不错的选择。真诚地希望您在使用
中，能喜欢上它。

   如果您有任何意见、建议，或者开发需求，欢迎与我联系!

Mini Ocr软件作者：
马飞涛 　　
www.18ie.com
mft@18ie.com
2004年3月

