因图像课程作业需要字符识别,所以采用了tesseract-OCR,但是自带库的效果不太好,所以根据自己的图片尝试进行训练。

tesseract-OCR

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

一、环境准备:

1.JAVA JDK (Java Development Kit即Java语言软件工具开发包)
jTessBoxEditor,运行依赖Java运行时环境,所以需要安装Java虚拟机。

2.jTessBoxEditor
jTessBoxEditor工具,用于调整图片上文字的内容和位置。

1.安装java虚拟机(Java最初是SUN公司,因后来被oracle公司收购)

所以在oracle网站:
java下载地址

tesseract ocr java tesseract ocr java需要配置什么_tesseract ocr java


好吧,我下载的时候被强制登录oracle(……没有,还创建了账户)

下载太缓慢,网上重新找了下了个版本

tesseract ocr java tesseract ocr java需要配置什么_JAVA_02

2.配置java环境变量

1、右键我的电脑->属性

tesseract ocr java tesseract ocr java需要配置什么_tesseract ocr java_03

2、找到path

1)然后单击新建,填入%JAVA_HOME%\bin

再新建,填入%JAVA_HOME%\jre\bin

tesseract ocr java tesseract ocr java需要配置什么_tesseract ocr java_04


2)新建->变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

tesseract ocr java tesseract ocr java需要配置什么_JAVA_05


3)重新开机后测试:

在控制台分别输入java、javac、java -version命令,出现如下所示即为配置成功

tesseract ocr java tesseract ocr java需要配置什么_tesseract ocr java_06

3.安装jTessBoxEditor

下载地址:jTessBoxEditor

解压后双击

tesseract ocr java tesseract ocr java需要配置什么_java_07


出来这个界面

tesseract ocr java tesseract ocr java需要配置什么_Java_08

二、开始训练

1.制作训练样本

我的图片

tesseract ocr java tesseract ocr java需要配置什么_JAVA_09


在画图中将png的图片转画为tiff

tesseract ocr java tesseract ocr java需要配置什么_java_10


tesseract ocr java tesseract ocr java需要配置什么_JAVA_11


样本文件全部选上,按住Ctrl 键不松,点击打开。

【注意】:这里是没有界面化的提示的,选中后,点击【打开】,立马就是输入合成后的文件名界面,输入char.font.exp0.tif,点击【保存】

tesseract ocr java tesseract ocr java需要配置什么_tesseract ocr java_12

2.生成BOX文件

使用cmd(管理员)到char.font.exp0.tif目录
输入下面命令,生成文件名为char.font.exp0.box

tesseract char.font.exp0.tif char.font.exp0 batch.nochop makebox

  • tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox
  • lang为语言名称,fontname为字体名称,num为序号;在tesseract中,一定要注意格式

3.定义字符配置文件

1)新建font_properties

在文件夹文件夹内,新建一个文本文件,名为font_properties,删掉.txt,用记事本打开,写入内容为:
font 0 0 0 0 0

2)

将.tif .box 和font_properties放到一个文件夹中

tesseract ocr java tesseract ocr java需要配置什么_JAVA_13

4.字符矫正

打开 jTessBoxEditor->BOX Editor->Open,打开num.font.exp0.tif;

tesseract ocr java tesseract ocr java需要配置什么_java_14

因为有中文,所以需要改字体

在setting>font 设置中文字体

tesseract ocr java tesseract ocr java需要配置什么_Java_15

调整字符

注意要调整完所有的图片(page)。

tesseract ocr java tesseract ocr java需要配置什么_tesseract ocr java_16

5.使用tesseract生成.tr训练文件

执行下面命令,执行完之后,会在当前目录生成char.font.exp0.tr文件。

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

tesseract ocr java tesseract ocr java需要配置什么_tesseract ocr java_17

6、生成字符集文件:

执行下面命令:执行完之后会在当前目录生成一个名为“unicharset”的文件。

unicharset_extractor char.font.exp0.box

tesseract ocr java tesseract ocr java需要配置什么_JAVA_18

7、生成shape文件:

执行下面命令,执行完之后,会生成 shapetable 和 char.unicharset 两个文件。

shapeclustering -F font_properties -U unicharset -O char.unicharset char.font.exp0.tr

tesseract ocr java tesseract ocr java需要配置什么_Java_19

8、生成聚字符特征文件:

执行下面命令,会生成 inttemp、pffmtable、shapetable和char.unicharset四个文件。

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

tesseract ocr java tesseract ocr java需要配置什么_tesseract ocr java_20

9、生成字符正常化特征文件:

cntraining char.font.exp0.tr

tesseract ocr java tesseract ocr java需要配置什么_tesseract ocr java_21

10、文件重命名:

重新命名inttemp、pffmtable、shapetable和normproto这四个文件的名字为[lang].xxx。

这里修改为char.inttemp、char.pffmtable、char.shapetable和char.normproto

执行下面命令:

rename normproto char.normprotorename inttemp char.inttemp

rename pffmtable char.pffmtable

rename shapetable char.shapetable

tesseract ocr java tesseract ocr java需要配置什么_JAVA_22

11、合并训练文件:

执行下面命令,会生成char.traineddata文件。

combine_tessdata char

tesseract ocr java tesseract ocr java需要配置什么_JAVA_23


Log输出中的Offset 1、3、4、5、13这些项不是-1,表示新的语言包生成成功。

12、将生成的“char.traineddata”语言包文件复制到Tesseract-OCR 安装目录下的tessdata文件夹中

tesseract ocr java tesseract ocr java需要配置什么_tesseract ocr java_24

13、测试结果:

代码中引入训练出来的对应的库:

tess.image_to_string(textImage, lang='char')

tesseract ocr java tesseract ocr java需要配置什么_JAVA_25