• 使用Tesseract-OCR 进行文字识别


    关于中文的识别,效果比较好而且开源的应该就是Tesseract-OCR了,所以自己亲身试用一下,分享到博客让有同样兴趣的人少走弯路。

    文中所用到的身份证图片资源是百度找的,如有侵权可联系我删除。

    一、准备工作

    1、下载Tesseract-OCR引擎,注意要3.0以上才支持中文哦,按照提示安装就行。

    2、下载chi_sim.traindata字库。要有这个才能识别中文。下好后,放到Tesseract-OCR项目的tessdata文件夹里面。

    3、下载jTessBoxEditor,这个是用来训练字库的。

    以上的几个在百度都能找到下载,就不详细讲了。

    二、识别

    1、进入cmd,进入到要识别的图片的路径下。

    2、输入命令

    1
    tesseract 图片名称 生成的结果文件的名称 字库

    例如我的图片识别就是:

    1
    tesseract test.jpg result -l chi_sim

    识别完后会生成result.txt文件

    当然啦效果不太理想。所以我们要训练自己的字库。

    三、训练

    1、将图片转换成tif格式,用于后面生成box文件。可以通过画图,然后另存为tif即可。

    更改图片名字,这个是有要求的=。=

    tif文面命名格式[lang].[fontname].exp[num].tif
    lang是语言 fontname是字体 
    比如我们要训练自定义字库 mjorcen字体名normal
    那么我们把图片文件重命名 mjorcen.normal.exp0.jpg在转tif。

    2、生成box文件。

    1
    tesseract mjorcen.normal.exp0.jpg mjorcen.normal.exp0 -l chi_sim batch.nochop makebox

    box文件和对应的tif一定要在相同的目录下,不然后面打不开。

    3、打开jTessBoxEditor矫正错误并训练

    打开train.bat

    找到tif图,打开,并校正。

    4、训练。

    只要在命令行输入命令即可。

    1
    tesseract  mjorcen.normal.exp0.jpg mjorcen.normal.exp0  nobatch box.train
    1
    unicharset_extractor mjorcen.normal.exp0.box

     

    在这我明明已经矫正好了,但是还是有1个字符不能识别出来,报的错跟实际上完全没有相关性,不知道是不是bug,到后面的结果就是“园”字没有识别出来。

    先不管,毕竟只有一个样本。

    新建一个font_properties文件

    里面内容写入 normal 0 0 0 0 0 表示默认普通字体

    继续敲命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    shapeclustering -F font_properties -U unicharset mjorcen.normal.exp0.tr
     
     
     
    mftraining -F font_properties -U unicharset -O unicharset mjorcen.normal.exp0.tr
     
     
     
    cntraining mjorcen.normal.exp0.tr

    最后会生成五个文件,把目录下的unicharset、inttemp、pffmtable、shapetable、normproto这五个文件前面都加上normal.

    如图:

    命令行输入,合并五个文件:

    1
    combine_tessdata normal.

    得到训练好的字库。

    四、测试

    1、把 normal.traineddata 复制到Tesseract-OCR 安装目录下的tessdata文件夹中

    2、识别命令:

    1
    tesseract mjorcen.normal.exp0.jpg mjorcen.normal.exp0 -l normal

    3、效果

    对比:

    总结:肯定要自己训练过后的字库识别效果好,接下来要把整个项目弄进android,还要研究怎么将多个字库合并成一个字库,因为我不可能一次训练完所有的图片文字的。到时候有什么成果了再分享博文。希望大家可以点赞!谢谢。

    更新:没有错误的话命令行的提示应该是这样的

     

    最近要做文字识别,不让直接用别人的接口,所以只能尝试去用开源的类库。tesseract-ocr是惠普公司开源的一个文字识别项目,通过它可以快速搭建图文识别系统,帮助我们开发出能识别图片的ocr系统。因为Windows环境开发,我也就必须在windows环境安装系统。

    第一步:下载安装包

    根据https://github.com/tesseract-ocr/tesseract/wiki,我找到非官方的安装包,好像我只看到64位的安装包http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-4.00.00dev.exe,下载后直接安装即可,但是要记得你的安装目录,我们等会配置环境变量要用。

    如果不是做英文的图文识别,还需要下载其他语言的识别包https://github.com/tesseract-ocr/tesseract/wiki/Data-Files。

    简体字识别包:https://raw.githubusercontent.com/tesseract-ocr/tessdata/4.00/chi_sim.traineddata

    繁体字识别包:https://github.com/tesseract-ocr/tessdata/raw/4.0/chi_tra.traineddata

    第二步:安装

    直接执行下载好的tesseract-ocr-setup-4.00.00dev.exe,下一步、下一步安装。

    第三步:配置环境变量

    注意:我的系统是win7,其他系统应该差不多,跟配置java变量一样

    复制你的安装地址,我的是安装在C:Program Files (x86)Tesseract-OCR,界面如下:

    复制安装路径“C:Program Files (x86)Tesseract-OCR”,进入“控制面板系统和安全系统”,点击

    “系统保护”

    进入到以下界面:

    点击环境变量,进入配置以下界面:

    把刚才的安装路径“C:Program Files (x86)Tesseract-OCR”添加到红线划的PATH和Path,注意,添加时候开头用“;”跟之前的变量隔开,结尾以“;”结尾。下面是我的配置信息样本:

    C:UsersAdministratorAppDataRoamingComposervendorin;C:UsersAdministratorAppDataRoaming pm;C:Program Files (x86)Tesseract-OCR;

    配置好了点击保存。

    打开命令终端,输入:tesseract -v,可以看到版本信息

    如果出现报错,估计是环境变量没配置好。

    到这里,我们就算安装完成了,但是,我们的系统还是无法识别中文的,我们要去下载简体汉字、繁体汉字语言包(上文给了地址了),下载好之后放到安装目录的tessconfigs目录下即可。

    补充:因为没有配置全局变量,无法跨盘执行数据转换,这里我们在环境变量那增加一个配置信息

    系统变量—->新建:

    增加一个TESSDATA_PREFIX变量名,变量值还是我的安装路径C:Program Files (x86)Tesseract-OCR;

    本人博客:Windows环境安装tesseract-ocr 4.00并配置环境变量

  • 相关阅读:
    Python2和3的区别
    Linux内核的中断机制
    Linux内核的并发与竞态、信号量、互斥锁、自旋锁
    驱动程序实例(五):LCD驱动程序分析(Samsung LCD)
    Linux字符设备驱动框架(五):Linux内核的framebuffer驱动框架
    驱动程序实例(四):按键驱动程序(platform + input子系统 + 外部中断方式)
    Linux字符设备驱动框架(四):Linux内核的input子系统
    gpiolib库详解
    Linux字符设备驱动框架(三):Linux内核的misc类设备驱动框架
    驱动程序实例(三):蜂鸣器驱动程序(misc类设备驱动框架)
  • 原文地址:https://www.cnblogs.com/liangqihui/p/8298940.html
Copyright © 2020-2023  润新知