ocr学习第一篇:java通过tesseract-ocr实现图像文字识别

参考资料:

安装包下载地址:https://blog.csdn.net/qq_43317529/article/details/83340739
语言包下载地址:  https://blog.csdn.net/SpuerCheng/article/details/79323620
环境变量配置: https://blog.csdn.net/p312011150/article/details/82624567
jTessBoxEditor下载地址: https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/

训练过程参考地址:
https://www.cnblogs.com/wangkevin5626/p/9640165.html

https://www.cnblogs.com/zgq123456/p/9804000.html
https://blog.csdn.net/sylsjane/article/details/83751297
https://www.cnblogs.com/wj-1314/p/9454656.html

资料下载路径:

链接:https://pan.baidu.com/s/1ttCDK5SQAYNNSnbJZLph7Q
提取码:ogg7

1. tesseract-ocr安装地址:

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第1张图片

2. 环境变量配置:

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第2张图片

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第3张图片 

3. 测试tesseract-ocr安装是否成功

打开cmd,切换到图片所在目录,执行如图所示代码:

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第4张图片

4. 下载语言包,拷贝到如图所示位置:

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第5张图片

5. 语言训练过程,先下载jTessBoxEditor工具,直接解压缩即可使用:

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第6张图片

此处我把他解压在了如图所示路径下:

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第7张图片

双击如图所示jar文件,出现图示弹窗,即安装成功:

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第8张图片

6. 开始训练

 a.找几张图片转换成tiff或者tif类型

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第9张图片

b.点击tools工具选择merge:

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第10张图片

b.选中tif文件点击打开

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第11张图片

c. 添加文件名num.font.exp0.tif,点击保存,即可看到在tif文件目录下生成了一份行的tif文件如图所示:

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第12张图片

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第13张图片

d.拷贝新生成的num.font.exp0.tif到一个路径下准备进行矫正训练,此处我是直接放在ocr下自己新建了一个tif文件夹如图所示:

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第14张图片

 

e. 生成BOX文件

打开命令行并切换至num.font.exp0.tif所在目录,输入,生成文件名为num.font.exp0.box

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

【语法】:tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox  

lang为语言名称,fontname为字体名称,num为序号;在tesseract中,一定要注意格式。

生成的文件如图所示:

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第15张图片

 

定义字符配置文件

在目标文件夹内生成一个名为font_properties的文本文件,内容为

font 0 0 0 0 0  

【语法】:       

fontname为字体名称,italic为斜体,bold为黑体字,fixed为默认字体,serif为衬线字体,fraktur德文黑字体,1和0代表有和无,精细区分时可使用。

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第16张图片

 

字符矫正

打开jTessBoxEditor,BOX Editor -> Open,打开num.font.exp0.tif;矫正上的字符,记得有好多页噢!

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第17张图片

修改完成后点击保存。

f. 自己写一个批处理文件,此处我写的是num.bat,双击执行,可以看到生成一些文件,如图示:

rem 执行改批处理前先要目录下创建font_properties文件 

echo Run Tesseract for Training.. 
tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train 
 
echo Compute the Character Set.. 
unicharset_extractor.exe num.font.exp0.box 
mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr 


echo Clustering.. 
cntraining.exe num.font.exp0.tr 

echo Rename Files.. 
rename normproto num.normproto 
rename inttemp num.inttemp 
rename pffmtable num.pffmtable 
rename shapetable num.shapetable  

echo Create Tessdata.. 
combine_tessdata.exe num. 

echo. & pause

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第18张图片

g. 拷贝此语言包到ocr路径下:

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第19张图片

h.打开cmd,执行命令,查看识别结果:

ocr学习第一篇:java通过tesseract-ocr实现图像文字识别_第20张图片

至此一个完整的训练过程结束。

7. 通过java代码执行cmd命令,进行调用工具,生成识别结果:

package com.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
 * 参考地址:https://blog.csdn.net/fangquan1980/article/details/80296002
 * @author edz
 *
 */
public class test {

	/**
	 * java执行cmd命令
	 * 可以使用 && 来连接两条命令,示例:  String cmd = “cmd /c D: && cd D:\\img && dir /b”;
	 */
	public static void main(String[] args) {
		/**
		 * 操作过程:切换到待识别图片所在目录c盘的test目录下,执行ocr命令,识别图片内容保存到4.txt文件中
		 */
		// Java调用 dos命令,跳转到c:test目录下,执行 tesseract 1.png 4 -l chi_sim命令
		String cmd = "cmd /c c: && cd /test && tesseract 1.png 4 -l num";
		try {
			Process process = Runtime.getRuntime().exec(cmd);
			InputStream is = process.getInputStream();
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader br = new BufferedReader(isr);
			String content = br.readLine();
			while (content != null) {
				System.out.println(content);
				content = br.readLine();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

ocr简单学习过程结束。

你可能感兴趣的:(ocr)