tesseract-ocr使用及训练的方法是什么

这篇文章主要介绍了tesseract-ocr使用及训练的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇tesseract-ocr使用及训练的方法是什么文章都会有所收获,下面我们一起来看看吧。

Tesseract介绍

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

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

使用默认的语言库识别

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

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

tesseract.exe gc.jpg result -l chi_sim

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

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

训练样本

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

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

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

 

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

  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中可以修改,改为宋体即可)

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

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

         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

        即可。

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

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

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

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

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

      Reading num.tr &hellip;
      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

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

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

cntraining gc.font.exp1.tr

    有人会说其他还有一条shapeclustering语句,说下这个步骤可有可无,这个是在3.02中新加的,主要针对印度语,所以我们在做的时候会有一个警告 warning No shape table file present。
        这时候文件夹中会多了四个文件,在unicharset,inttemp,normproto,pfftable文件名前面加上font.。如下图所示:

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

combine_tessdata font.

   所有输入命令如下图所示

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

关于“tesseract-ocr使用及训练的方法是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“tesseract-ocr使用及训练的方法是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注云搜网行业资讯频道。


【AD】美国洛杉矶/香港/日本VPS推荐,回程电信CN2 GIA线路,延迟低、稳定性高、免费备份_搬瓦工

【AD】炭云:36元/年/1GB内存/20GB SSD空间/500GB流量/5Gbps端口/KVM/香港/国际线路LUMEN