本软件是飞涛软件工作室开发的一款免费Ocr软件,主要用于辨识图象文件之中,出现的汉字显示字体。Ocr的英文含义是光学字符辨识。为何叫Mini呢?由于现有的辨识汉字的商业Ocr软件,动辄二三十兆,而本软件解压后,也不过三兆多,体型比较纤小,再加上本软件主要用于辨识字体比较小的汉字,所以叫Mini,英文的发音是“迷你”,英文含意是超大型。既然有了商业Ocr软件,为何还要开发这个软件?不同于商业Ocr软件,本软件是免费的,可以自由使用。第二个不同之处,本软件的辨识对象是屏幕出现的“显示汉字”,而不是针对扫描仪扫下来的“打印汉字”。两者有哪些不同呢?最重要的一点:扫描下来的复印汉字的高度和长度通常都在30多个象素点之上,这是我用作图软件,打开某个商业Ocr的samplessample1.tif,之后一点一点数下来的。从文件名和目录名的英文含义可以看出,这个点数应当是一个典型值。这么,假如用商业Ocr辨识屏幕上出现的小五号字,汉字的高度是12个象素点,会出现哪些情况呢?测试方式:用记事本随意写几行汉字,设置字体为小五号字。这大约是看着还算舒服的最大号的汉字字体了(高度是12个象素点),假如再小,字体就很难看了。
之后,按拷屏键PrtSc,把屏幕的图象拷贝、粘贴到作图软件中,修剪规格后,保存为bmp的格式。之后,我找了两个国外最知名的Ocr软件进行测试,结果让人大吃一惊,辨识率几乎为零。把图象放大两倍,再测试,结果依然很不理想,大约也只有百分之二三十的样子。开发MiniOcr软件的来历我在开发护花使者反黄图象辨识软件的时侯,遇见有些图象里,嵌有个别文字linux文字处理软件,倘若能把文字辨识下来,图象的含意就很容易让计算机理解了。预算有限,我连扫描仪都舍不得买,就更别想买商业Ocr的开发包了,大约几十万,或则更多,或则他人压根就不卖。毕竟它们的辨识率对小字体几乎为零,不符合我的要求。看来linux启动盘制作工具,只得自力更生,重新写一个了。开发MiniOcr的历程经过三个多月的努力,总算诞生了这款MiniOcr软件。第1个月作出了汉字辨识的核心模块,第2个月作出了文章段落切分的算法,并加入了对英语,数字,标点的支持,第三个月继续调整汉英混排和汉字切分的算法,并用MFC做了一个界面。MiniOcr的软件构架为了让更多的人能使用到这个软件,我在windows系统下,采用VC进行编程,界面其实只得用MFC写了。软件构架是一个SDI框架下的多窗口切分界面,左上角的窗口是一个CFormView,拿来显示常用的按键;左下角是一个CEditView,拿来显示帮助信息;右上角是一个CView,拿来显示要辨识的图象;右下角是一个CEditView,拿来储存辨识下来的文字。
辨识部份采用了工作者线程linux文字处理软件,以防止显示界面的主线程僵掉。辨识部份是整个软件的核心,与操作系统无关,可以单独摘下来放到dos窗口里跑,也可以移植到Linux系统中跑。汉字辨识软件的难点所在:中文辨识有一些开放源码的软件,我看过的软件,主要采取两种辨识方式:基于规则的方式,和采用神经网路方式。而这两种方式,在辨识汉字时,都不宜采用。由于汉字数量诸多,最常用的国标2312的一级汉字就有3755个。假如借用基于规则的方式,须要对三千多个汉字,逐一人工写出分类规则,工作量太大,我一个人未能完成;倘若采用神经网路的方式,那么多汉字,我不敢想像,须要多少层网路和神经节点呀!假若采用网格法arm linux,抗位移的疗效太差;而采用不变矩法,识他人和入,土和士,相像度又难于控制。除此之外,汉字切分也是一大困局。中文长度大约只有汉字一半,标点符号大约只有汉字三分之一宽,数字大约只有四分之一的长度。而汉字本身又有二分字,和三分字。个别字,如“啊”,字体小时可能是独体字,字体大些,变为二分字,字体再大,又变为三分字。加上汉字与汉字之间的挛缩、汉字与中文的混排,英语与英语的挛缩,导致汉字切分模块的算法,甚至比汉字辨识模块的算法还要复杂得多。
为了克服这种难点,并推动辨识速率,我在算法设计时,采用了一些优化和简化的策略。经过实践检验,证明行之有效。MiniOcr进行汉字辨识的策略:1)采用复合特点的分类方式。2)字符集选择3755个一级汉字。3)字体选择最常用的楷体。4)字号选择从小五号到一号汉字,主要针对20个点之内的小字体。5)汉英混排时,汉语优先。6)汉字挛缩时,进行动态优化切分。展望与下一步的开发计划:1)重新优化英语辨识的算法;2)对英语挛缩的切分算法进行调整;3)移植步入Linux;选择Ocr软件的建议: