tess4j 是java (jna) 对 tesseract ocr api 的封装。
很久之前需要做一个自动登陆并对网页上的未处理的数据进行按钮点击,其中需要登陆的验证码校验,因此用了一下tess4j,能识别一些简单的文字和数字等,识别率好像一般,但出错了就重新换一个验证码再试,多试几次也能成功。现将之前的简单使用过程记录,备查。
Tess4J是对Tesseract OCR API 的Java JNA 封装。使java能够通过调用Tess4J的API来使用Tesseract OCR。支持的格式包括TIFF、JPEG、GIF、PNG、BMP、JPEG、PDF。这个开始接触的时候,我对这两个东西还搞混淆了。明确说一下,Tess4J是java直接可使用的jar包,而Tesseract OCR是支持Tess4J进文件文字识别的基础,Tess4J可直接使用Maven方式引入。
<!-- tess4j start --> <dependency> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j</artifactId> <version>5.6.0</version> </dependency> <!-- tess4j end -->
需要提前下载好相关的语言库文件,这里我下了chi_sim.traineddata和eng.traineddata两个
下载地址:https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata
下载好后放在代码里面的目录下

准备好两张图片放置在代码的资源目录下,方便程序读取,
立即学习“Java免费学习笔记(深入)”;
图片1

图片2
Flash是Adobe公司推出的一款经典、优秀的矢量动画编辑软件,利用该软件制作的动画尺寸要比位图动画文件(如GLF动画)尺寸小的多,用户不但可以在动画中加入声音、视频和位图图像,还可以制作交互式的影片或者具有完备功能的网站。该软件对动画制作者的计算机知识要求不高,简单易学,效果流畅生动,对于动画制作初学者来说是非常适合的一款软件。在学习制作动画之前,通过本章的学习,读者应熟悉Flash动画的特点,Flash CS3的界面组成元素,动画制作的步骤,并通过制作实例了解Flash一般步骤。 有需要的朋友可以下
0

两张图片放在资源目录下

代码如下:
package cn.ljhua;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import lombok.extern.slf4j.Slf4j;
import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
/**
* Tess4jOcr测试示例
* @author liujh
*/
@Slf4j
public class Tess4jOcrTest {
public static void main(String[] args) {
Tess4jOcrTest test = new Tess4jOcrTest();
test.ocrTest();
}
public void ocrTest() {
log.info("ocrTest start....");
long startMs = System.currentTimeMillis();
//Tesseract的代码开始---------------------->>>>
ITesseract instance = new Tesseract();
/**
* 组装接好tessdata目录的路径字符串
*/
String filePathPre = System.getProperty("user.dir");
String dataPath = filePathPre + File.separator + "tessdata";
/**
* 设置目录datapath the tessdata path to set
* 否则会报Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.错误
*/
instance.setDatapath(dataPath);
//instance.setLanguage("eng");//默认,可以不写
instance.setLanguage("chi_sim");//设置中文识别
String imageName = "verifyCode.png";
try (InputStream inStream = this.getClass().getResourceAsStream("/" + imageName)) {
BufferedImage bImage = ImageIO.read(inStream);
//doOCR也可以传参为File,我这里传的BufferedImage
String result = instance.doOCR(bImage);
//识别的结果回来可能会带回车,处理掉
result = result.replaceAll("\n", "");
log.info("图片名:" + imageName +" 识别结果:"+ result);
} catch (IOException e) {
log.error(e.getMessage(),e);
} catch (TesseractException e) {
log.error(e.getMessage(),e);
}
imageName = "vCode2.jpg";
try (InputStream inStream = this.getClass().getResourceAsStream("/" + imageName)) {
BufferedImage bImage = ImageIO.read(inStream);
//doOCR也可以传参为File,我这里传的BufferedImage
String result = instance.doOCR(bImage);
//识别的结果回来可能会带回车,处理掉
result = result.replaceAll("\n", "");
log.info("图片名:" + imageName +" 识别结果:"+ result);
} catch (IOException e) {
log.error(e.getMessage(),e);
} catch (TesseractException e) {
log.error(e.getMessage(),e);
}
//Tesseract的代码结束--------------------->>>>
log.info("ocrTest success. spend time :{} ms.", (System.currentTimeMillis() - startMs));
}
}测试结果截图如:

英文识别出来比较正常,中文识别出来带了空格,如果需要可以通过代码进一步去掉空格,至此,tess4j的简单使用测试完成。
以上就是如何利用tess4j实现Java中的图片文本识别功能?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号