1.Tesseract和Tess4J介绍
Tesseract支持Unicode(UTF-8),可以“开箱即用”地识别100多种语言。Tesseract支持各种输出格式:纯文本、HOCR(HTML)、PDF、TSV、仅不可见文本PDF。Tesseract-OCR支持中文识别,并且开源和提供全套的训练工具,是快速低成本开发的首选。
Tess4J则是Tesseract在Java的本地动态库的API(该库提供光学字符识别(OCR)支持:TIFF、JPEG、GIF、PNG和BMP图像格式,多页tiff图像,PDF文档格式)。tess4j是在apache许可证v2.0下发布和分发的,也可以从maven中央存储库获得。如果使用Tess4J只需要下载相关Jar包,导入库,再把项目封装好就可以处处运行了,可移植性比较好。Tess4J在英文和数字识别中性能比较好,但是在中文识别中,无论速度还是识别率还是较弱,因此需要针对场景进行训练,才能获得较好结果。
2.下载识别中文字体库
https://github.com/tesseract-ocr/tessdata/blob/master/chi_sim.traineddata
3.新建maven项目
把字体库文件放入resources目录下
4.maven配置
net.sourceforge.tess4j
tess4j
4.4.0
5.java代码
package net.itxw;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import net.sourceforge.tess4j.util.LoadLibs;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**
* @Author: houyong
* @Date: 2019/9/19
*/
public class Tess4JTest {
public static void main(String[] args) {
System.out.println(ocrCn("D:\\itxwnet.png"));
}
public static String ocrCn(String path){
String result="";
try {
//记录开始时间
double start = System.currentTimeMillis();
//初始化Tesseract
Tesseract tesseract = new Tesseract();
tesseract.setLanguage("chi_sim");
//获取tessdata下的字体库文件
File tessDataFolder = LoadLibs.extractTessResources("tessdata");
//设置语言包
tesseract.setDatapath(tessDataFolder.getAbsolutePath());
//读取图片文件
File file = new File(path);
BufferedImage textImage = ImageIO.read(file);
//识别图片文字
result=tesseract.doOCR(textImage);
//计算耗时
double end = System.currentTimeMillis();
System.out.println("耗时"+(end-start)/1000+" s");
textImage.flush();
} catch (IOException e) {
e.printStackTrace();
} catch (TesseractException e) {
e.printStackTrace();
}
return result;
}
}
6.测试识别图片文字
将要识别的图片:
执行结果:
这个速度和准确率还是差点意思了。1.6秒,错了2个字。