java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)

几个常见的问题:

问题一:相关的几个软件下载地址

Tesseract:Index of /tesseract

jTessBoxEditor: VietOCR - Browse /jTessBoxEditor at SourceForge.net

问题二:

jTessBoxEditor下载是注意一下,中文的话要下载jTessBoxEditorFX

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(1)

问题三:

mftraining执行时提示停止工作,一般是Tesseract版本的问题,可以选择Tesseract3验证过是好的,Tesseract5会提示。

问题四:

多个字库程序调用如何操作

tesseract.setLanguage("eng chi_sim");

具体安装及操作

在使用tesseract-ocr进行字符识别时,我们使用了官方提供的字库,例如英文字库、中文字库,但这些字库并不一定能满足我们所有的需求。当tesseract提供的字库中没有我们识别的那种字体时,就会出现识别错误的问题,这个时候就需要训练自己的字库进行训练了。我们可以制作出识别车牌的车牌字库、识别身份证号的身份证字库。

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(2)

​1 下载并安装jTessBoxEditorFX

注意jTessBoxEditor有两个版本,带FX的版本才支持中文字符编辑,我们下载带FX版本的。在这个网址上列出了所有的jTessBoxEditorFX版本。https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(3)

jTessBoxEditorFX-2.2.0.zip下载完成后解压如下图:

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(4)

​我们注意到解压目录下也有一个tesseract-ocr,因此我们需要配置tesseract-ocr的环境变量。在系统环境变量path路径下添加E:\jTessBoxEditorFX\tesseract-ocr

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(5)

新建字库tessdata的系统变量,变量名为:TESSDATA_PREFIX变量值为:E:\jTessBoxEditorFX\tesseract-ocr\tessdata确定后将电脑重启,至此jTessBoxEditorFX安装配置完成。

2 准备字库训练图片,并制作tif图片文件

字库的训练图片格式最好是png的,注意图片数字周围的空白区域不能太窄,tesseract无法识别空白区域太窄的字符。数字图片下载地址如下图所示:

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(6)

我们将上面的图片放到一个E:\jTessBoxEditorFX目录下新建的train_image文件夹下。在E:\jTessBoxEditorFX目录下有一个jTessBoxEditorFX.jar的java文件,这个文件需要用java虚拟机打开,其实就是你电脑上安装了java,并配置了java环境就可以直接双击打开,安装java这里不再讲述了。

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(7)

打开这个jar文件,如下:

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(8)

选择 Tools -> Merge TIFF,打开对话框,选择训练样本所在文件夹,并选中所有要参与训练的样本图片,注意对话框中“文件类型”的选取,选择所有的图片文件

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(9)

选择好了后,点击打开按钮,出现文件保存对话框,输入文件名:num_1.font.exp0.tif

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(10)

正确进行上述步骤后会出现merge完成的提示

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(11)

然后在图片集那个文件目录下会出现生成的这个tif文件

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(12)

​3 使用tesseract生成.box文件

打开命令提示符,进入步骤2生成的num_1.font.exp0.tif文件所在目录

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(13)

然后执行如下命令:

tesseract num_1.font.exp0.tif num_1.font.exp0 –l eng batch.nochop makebox

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(14)

执行完成后,会在当前目录下生成num_1.font.exp0.box文件。

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(15)

使用jTessBoxEditor调整.box训练文件.box文件中记录了每个字符在图片上的位置以及识别出的内容,训练之前需要使用jTessBoxEditor调整字符的位置和内容。打开 jTessBoxEditor ,点击 Box Editor -> Open ,打开步骤2中生成的 “num_1font.exp0.tif” ,会自动关联到 “num_1.font.exp0.box” 文件:

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(16)

打开完成后,每一个会显示每一张图片的的识别结果

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(17)

接下来我们对每张图片的识别字符和识别框进行纠正,如果字符识别错了,我们就改成正确的,如果识别出现偏差,我们也要进行调整。这个过程是非常重要的,字符框的好坏取决于方框是否调整的准确。我们把所有图片的全部纠正完。

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(18)

点击save按钮,将校正后的box文件保存。

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(19)

​4 使用echo命令创建字体特征文件

在命令符窗口中输入如下命令:

echo font 0 0 0 0 0>font_properties

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(20)

执行完成之后,在当前文件夹下生成font_properties文件也可以手动在该文件夹下建立一个名为 “font_properties” 的文件,这个文件没有后缀名称,输入内容 “font 0 0 0 0 0” , 表示字体 font 的粗体、倾斜等共计5个属性全都设置为0

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(21)

​5 使用tesseract生成num_1.font.exp0.tr训练文件

在命令行窗口中输入命令:

tesseract num_1.font.exp0.tif num_1.font.exp0 nobatch box.train

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(22)

生成训练文件成功

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(23)

​6 生成字符集文件

在命令行中执行如下命令:

unicharset_extractor num_1.font.exp0.box

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(24)

执行之后在当前目录生成unicharset文件

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(25)

​7 生成数据字典

在命令行中先执行如下命令:

mftraining -F font_properties -U unicharset -O num_1.unicharset num_1.font.exp0.tr

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(26)

接着执行另外一个训练命令:

cntraining num_1.font.exp0.tr

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(27)

​会在当前目录下生成 4 个文件(inttemp、pffmtable、normproto、shapetable)

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(28)

需要手动修改名称,这里我们修改成num_1.inttemp、num_1.pffmtable、num_1.normproto、num_1.shapetable。

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(29)

​8 合并数据文件,生成字库文件

在命令提示符中执行如下命令:

combine_tessdata num_1.

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(30)

生成字库文件成功,会在当前目录生成num_1.traineddata文件,这个语言就是跟我们下载的官方字库一样,例如eng,chi_sim一样,不过这个字库专门用于识别图片中那种数字字体。

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(31)

我们把这个字库num_1放到tesseract-ocr的tessdata目录下E:\jTessBoxEditorFX\tesseract-ocr\tessdata

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(32)

​9 验证生成的语言包字库

输入命令:

tesseract --list-langs

可以看到语言库中有自己刚添加的字库num_1

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(33)

​我们用这个字库来识别一张图片

tesseract 72.png out -l num_1

会在图片目录下生成out.txt文件,我们打开这个txt文件,可以看到使用num_1字库识别这张图片的结果

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(34)

​打开out文件

发现识别结果与图片完全符合,至此,自己制作的字库就已经成功了,可以识别所有这种数字字体的图片。

补充,如果在制作box文件时,这张图片没有识别出特征字体,就代表无法去进行box微调。

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(35)

​ 用notepad 打开box文件,如下所示:

java ocr算法(ocr技术--tesseract-ocr:使用jTessBoxEditor制作训练库)(36)

3 15 40 40 100 32第一个字符3是这张图片识别的char,15为X坐标,40为Y坐标,40为宽,100为高的,最后一个32就是第几张图片,因为图片编号从0开始,所以这个是第33张图片。

因此如果哪一张图片缺少识别宽,比如第200张图片少定位框,就这样加3 15 40 40 100 199————————————————版权声明:本文为CSDN博主「Keras深度学习」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_37781464/article/details/90292350

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页