各个工具下载链接在文章底部!
重要!!自己先创建一个空文件夹(名字随意),用来保存训练后的模型 ,还需要在里面创建一个 名称为tessdata 的文件夹 ,必须叫这个名
可以先使用下载后的进行测试训练(只需要把 j a v a 文件里面的文件路径更换为你自己下载包的存储路径),图片必须使用下载包里面的图片,因为是训练的是下载包里面的图片 \color{#2111f1}可以先使用下载后的进行测试训练(只需要把java文件里面的文件路径更换为你自己下载包的存储路径),图片必须使用下载包里面的图片,因为是训练的是下载包里面的图片 可以先使用下载后的进行测试训练(只需要把java文件里面的文件路径更换为你自己下载包的存储路径),图片必须使用下载包里面的图片,因为是训练的是下载包里面的图片
1 、运行 t e s s e r a c t − o c r − w 64 − s e t u p − v 4.0.0.20181030. e x e 文件,安装完之后,配置系统环境变量(最基本就不叙述了) \color{#21a2f1}1、 运行tesseract-ocr-w64-setup-v4.0.0.20181030.exe 文件,安装完之后,配置系统环境变量(最基本就不叙述了) 1、运行tesseract−ocr−w64−setup−v4.0.0.20181030.exe文件,安装完之后,配置系统环境变量(最基本就不叙述了)
D:\Program Files (x86)\Tesseract-OCR 只是我配置的路径,就是安装的根路径
在后面用来生成.box文件
2 、使用 j T e s s B o x E d i t o r 生成训练样本的的合并 t i f 图片(图片是已经准备好的,亦可以自己准备) \color{#21a2f1}2、使用jTessBoxEditor生成训练样本的的合并tif图片 (图片是已经准备好的,亦可以自己准备) 2、使用jTessBoxEditor生成训练样本的的合并tif图片(图片是已经准备好的,亦可以自己准备)
-
打开jTessBoxEditor,选择Tools->Merge TIFF,进入训练样本所在文件夹,选中要参与训练的样本图片:
-
点击 “打开” 后弹出保存对话框,选择保存在当前路径下,文件命名为 “zwp.test.exp0.tif” ,格式只有一种 “TIFF” 可选。
-
注意:tif文面命名格式[lang].[fontname].exp[num].tif
lang是语言,fontname是字体,num为自定义数字。
比如我们要训练自定义字库 zwp,字体名test,那么我们把图片文件命名为 zwp.test.exp0.tif
3 、使用 t e s s e r a c t 生成 . b o x 文件 \color{#21a2f1}3、使用tesseract生成.box文件 3、使用tesseract生成.box文件
在上一步骤生成的“zwp.test.exp0.tif”文件所在目录下打开命令行程序,执行下面命令,执行完之后会生成zwp.test.exp0.box文件。
执行如下命令 tesseract zwp.test.exp0.tif zwp.test.exp0 batch.nochop makebox
4 、使用 j T e s s B o x E d i t o r 矫正 . b o x 文件的错误 \color{#21a2f1}4、使用jTessBoxEditor矫正.box文件的错误 4、使用jTessBoxEditor矫正.box文件的错误
.box文件记录了每个字符在图片上的位置和识别出的内容,因为识别出的内容和位置有可能把两个字合到一起或者把一个字拆分了,所以训练前需要使用jTessBoxEditor调整字符的位置和内容。
使用步骤:
打开jTessBoxEditor点击Box Editor ->Open,打开步骤2中生成的“zwp.test.exp0.tif”,会自动关联到“zwp.test.exp0.box”文件,这两文件要求在同一目录下。调整完点击“save”保存修改。
5 、生成 f o n t p r o p e r t i e s 文件: \color{#21a2f1}5、生成font_properties文件: 5、生成fontproperties文件:
-
执行如下命令: echo test 0 0 0 0 0 >font_properties
-
也可以手工新建一个名为font_properties的文本文件,输入内容 “test 0 0 0 0 0” 表示字体test的粗体、倾斜等共计5个属性。这里的“test”必须与“zwp.test.exp0.box”中的“test”名称一致。
6 、使用 t e s s e r a c t 生成 . t r 训练文件 \color{#21a2f1}6、使用tesseract生成.tr训练文件 6、使用tesseract生成.tr训练文件
执行下面命令,执行完之后,会在当前目录生成zwp.test.exp0.tr文件。
执行如下命令 tesseract zwp.test.exp0.tif zwp.test.exp0 nobatch box.train
7 、生成字符集文件 \color{#21a2f1}7、生成字符集文件 7、生成字符集文件
执行下面命令:执行完之后会在当前目录生成一个名为“unicharset”的文件。
执行命令 unicharset_extractor zwp.test.exp0.box
8 、生成 s h a p e 文件 \color{#21a2f1}8、生成shape文件 8、生成shape文件
执行下面命令,执行完之后,会生成 shapetable 和 zwp.unicharset 两个文件。
执行命令 shapeclustering -F font_properties -U unicharset -O zwp.unicharset zwp.test.exp0.tr
9 、生成聚字符特征文件 \color{#21a2f1}9、生成聚字符特征文件 9、生成聚字符特征文件
执行下面命令,会生成 inttemp、pffmtable、shapetable和zwp.unicharset四个文件。
执行命令 mftraining -F font_properties -U unicharset -O zwp.unicharset zwp.test.exp0.tr
10 、生成字符正常化特征文件 \color{#21a2f1}10、生成字符正常化特征文件 10、生成字符正常化特征文件
执行下面命令,会生成 normproto 文件。
执行命令: cntraining zwp.test.exp0.tr
11 、文件重命名 \color{#21a2f1}11、文件重命名 11、文件重命名
重新命名inttemp、pffmtable、shapetable和normproto这四个文件的名字为[lang].xxx。
这里修改为zwp.inttemp、zwp.pffmtable、zwp.shapetable和zwp.normproto
依次执行下面命令
rename normproto zwp.normproto
rename inttemp zwp.inttemp
rename pffmtable zwp.pffmtable
rename shapetable zwp.shapetable
11 、合并训练文件 \color{#21a2f1}11、合并训练文件 11、合并训练文件
执行下面命令,会生成zwp.traineddata文件。
执行命令 combine_tessdata zwp.
将生成的“zwp.traineddata”语言包文件复制到 新建文件夹 目录下的tessdata文件夹中,就可以使用训练生成的语言包进行图像文字识别了。
12 、代码测试 \color{#21a2f1}12、代码测试 12、代码测试
- 在pom中引入依赖
<!-- pom tess4j相关依赖 -->
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>3.4.0</version>
<exclusions>
<exclusion>
<groupId>com.sun.jna</groupId>
<artifactId>jna</artifactId>
</exclusion>
</exclusions>
</dependency>
- 代码
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
//你的图片 1.png 为我自定义图片名字 其实使用的就是 上面的测试图片
File imageFile = new File("D:\\OCR\\1.png");
//你训练库的路径tessdata
ITesseract instance = new Tesseract();
// 模型文件夹必须叫做 tessdata
instance.setDatapath("D:\\OCR\\Test2\\tessdata");
// zwp 是刚刚训练过的 包
instance.setLanguage("zwp");
// chi_sim 是自带的中文包
// instance.setLanguage("chi_sim");
String result = null;
try {
result = instance.doOCR(imageFile);
} catch (TesseractException e) {
throw new RuntimeException(e);
}
System.out.println(result);
}
}
如果网络不行可以下载源码文件进行操作
demo源码
用于配置环境变量,生成.box文件
tesseract-ocr官网
用于调整图片上文字的内容和位置
jTessBoxEditor工具官网
用于设置语言包 (instance.setLanguage)
其他语言包地址