文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

tesseract-ocr使用以及训练方法

2023-05-16 15:06

关注

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

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 …
      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文件夹中,再测试一下。

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

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯