开发者

tesseract-ocr使用以及训练方法

    本人最近在做字符识别,所以自行在网上寻找方法,接触到tesseract,自己按照网上方法做的时候,也遇到一些问题,解决了一些。所以我决定写下我第一个博客,一是方便自己以后查看,更新学习。二是方便和网友交流学习。

Tesseract介绍

         Tesseract是一个开源的OCR(Optical Character Rec编程客栈ognition,光学字符识别)引擎,可以识别多种格式的图像文件并将其转换成文本,目前已支持60多种语言(包括中文)。 TxuqcXZFHDlesseract最初由HP公司开发,后来由Google维护,目前发布在Googel Project上。

       安装Tesseract,从http://code.google.com/p/tesseract-ocr/downlowww.devze.comads/list下载Tesseract,3.01上的版本支持中文。安装后在电脑上会有一个Tesseract-OCR目录,通过目录录下的tesseract.exe程序就可以对图像的字符进行识别。编程客栈考虑到万一有人上不了谷歌,这个Tesseract-OCR文件夹我也上传了,地址:点击打开链接。文件夹中除了Tesseract的相应文件外,还有一个tesseract-vs2013-include-lib-dll文件,这个是VS2013用来调用API的配置文件,后面的博客会写到。打开如图所示。

tesseract-ocr使用以及训练方法

使用默认的语言库识别

     准备一张待识别的图片,我选取一段《成都》的歌词。

tesseract-ocr使用以及训练方法

  接着就可以打开命令行,进入Tesseract-OCR的目录,输入:

tesseract.exe gc.jpg result -l chi_sim

 其中result表示输出结果文件txt名称,chi_sim表示用以识别的语言文件为英文。执行后文件夹中会多一个result.txt。

tesseract-ocr使用以及训练方法

    效果非常不好,因为很多汉字是左右结构,比如:眼泪。所以我要自己训练自己的中文库。

训练样本

     训练样本需要一个工具,jTessBoxEditor,下载地址:点击打开链接。这个工具是用Java开发的,需要jre7以上的版本支持。   

    1、获取训练的图片,为了方便我使用了原来的图片一张,样本当然是越多越好。

    2、合并样本文件,打开jTessBoxEditor,点开train.BAT。在菜单栏中Tools->Merge TIFF。在弹出的窗口中可以选择多张样本图片(网上之前有说要.tif格式的图片,测试.jpg格式的也行),我这边就用了一张样本图片。

 

tesseract-ocr使用以及训练方法

       一张或者多张图片可以合成一张tif文件。

tesseract-ocr使用以及训练方法

  3、生成box文件, 打开命令行,输入:

tesseract.exe gc.font.exp1.tif gc.font.exp1 batch.nochop makebox

      生成的BOX文件为gc.font.exp1.box,BOX文件为Tessercat识别出的文字和其坐标。Make BOX的命名的个数为:

tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox

      其中lang为语言名称,fontname为字体名称,num为序号,可以随便定义。有些博客说对于这个命名无所谓,但是我尝试到后免出错了,是tr文件名的问题,在下面我会贴出报错图。读者也可以试试,不知是不是我之前步骤哪里做错了。

      4、文字矫正,打开jTessBoxEditor工具,打开gc.font.exp1.tif文件(必须将上一步生成的.box和.tif样本文件放在同一目录),如下图所示。可以看出有些字符分割和识别都不正确,可以通过该工具手动对每张图片中识别错误的字符进行校正。校正完成后保存即可。(注:发现中文打不上去,在菜单Setting->Font中可以修改,改为宋体即可)

tesseract-ocr使用以及训练方法

   对于标定的方框以及识别的字符进行修改。

tesseract-ocr使用以及训练方法

        选择两个或两个以上的框,Merge可进行合并;Split将框进行拆分;Insert插入框,如果图片上一个框也没有,那无法进行插入;Delete删除框。选择要修改的字符框,在Character中输入想要修改的字,再点击齿轮,即可修改。修改后,如下图所示:

tesseract-ocr使用以及训练方法

         5、生成.tr文件,在命令行中输入:

tesseract gc.font.exp1.tif gc.font.exp1 nobatch box.train

   6、计算字符集,从生成的box文件中提取,继续输入:

unicharset_extractor gc.font.exp1.box

 7、生成字体特征文件,在当前文件夹中新建任意名称的文件,里面格式为:

<span><fontname> <italic> <bold> <fixed> <serif> <fraktur>  </span>

       例如:我建了一个名为font的文件,里面内容为:font 0 0 0 0 0 

        这个文件可以是手动生成的txt文件,也可以在在命令行中输入:

echo font 0 0 0 0 0 >font

&开发者_JAVA学习nbsp;       即可。

        8、特征训练,继续在命令行输入:

mftraining -F font -U unicharset gc.font.exp1.tr

        在这一步我出现了好几个错误,如下图

       (1)Failed to load unicharset from file uncharset,这是因为刚刚的font的文件,如果是在txt中写的,一定要写成font.txt,加上后缀。

tesseract-ocr使用以及训练方法

   (2)feature training for Tesseract已停止工作。命令行显现:

      Reading num.tr …

      Font id = -1/0, class id = 1/13 on sample 0

      font_id >= 0 && font_id < font_id_map_.SparseSiz..\..\classify\trainingsampleset.cpp, line 622

tesseract-ocr使用以及训练方法

 编程客栈;这个问题就是上面命名所导致的,所以还是规范命名。

       9、聚集tesseract识别的训练文件,命令行输入:

cntraining gc.font.exp1.tr

    有人会说其他还有一条shapeclustering语句,说下这个步骤可有可无,这个是在3.02中新加的,主要针对印度语,所以我们在做的时候会有一个警告 warning No shape table file present。

        这时候文件夹中会多了四个文件,在unicharset,inttemp,normproto,pfftable文件名前面加上font.。如下图所示:

tesseract-ocr使用以及训练方法

      10、最后,合并相关文件,生成字典文件,输入:

combine_tessdata font.

   所有输入命令如下图所示

tesseract-ocr使用以及训练方法

最终,在当前目录中会产生一个为font.traineddata文件,将其拷到tessdata文件夹中,再测试一下。

tesseract-ocr使用以及训练方法

     虽然不是全部识别出来,但是较之前的识别率提高了很多,这个和样本数量也是有关系的,而且这句话中左右结构的字特别多,原图26个字,却识别出31个字出来了,这个问题,我还没想到什么方法,单个字训练?。我也试了其他字符训练,效果还可以 

PS:tesseract-ocr还可从github下载:https://github.com/tesseract-ocr/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜