Tess4J图像、pdf 文字识别,并解决遇到的3个错误

1.引入依赖

<!--  Tess4J图像识别 -->
		<dependency>
		    <groupId>net.sourceforge.tess4j</groupId>
		    <artifactId>tess4j</artifactId>
		    <version>4.3.1</version>
		</dependency>

2.识别代码

        @Test
	public void t1(){
		
	//设置要识别文件的路径
	String path = "D:\\resource\\tess4j";  	
    	File file = new File(path + "\\t1.jpg");
    	
        ITesseract instance = new Tesseract();

        //设置训练库的位置
        instance.setDatapath("D:\\resource\\Tess4J-3.4.8-src\\Tess4J\\tessdata");
        instance.setLanguage("chi_sim");
        
        String result = null;
        try {
             result =  instance.doOCR(file);
        } catch (TesseractException e) {
            e.printStackTrace();
        }
        System.out.println("result:");
        System.out.println(result);
    }

3.解决遇到的错误

1)这个错误是设置训练库路径错误看报错的第一行

(网上很多文章说训练库如果在 D:\resource\Tess4J-3.4.8-src\Tess4J\tessdata\eng.traineddata这个目录

则设置instance.setDatapath("D:\\resource\\Tess4J-3.4.8-src\\Tess4J"); 这个方法在我这里是错误的。

我的正确的设置为 instance.setDatapath("D:\\resource\\Tess4J-3.4.8-src\\Tess4J\\tessdata");

instance.setLanguage("eng"); //这个eng是文件eng.traineddata,不需要写后缀

Error opening data file D:\resource\Tess4J-3.4.8-src\Tess4J/chi_sim.traineddata
Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.
Failed loading language 'chi_sim'
Tesseract couldn't load any languages!

2)这个错误我也遇到了,我的不需要下载xxx.dll,xx.dll ,我的不需要visual 2015/2017(我的是vs2010版本)

这个错误是在我引用<version>4.2.1</version>版本时候遇到的,估计是老版本会报错

在我更新到<version>4.3.1</version>版本后错误就解决了

10:15:24.633 [main] ERROR net.sourceforge.tess4j.Tesseract - null
java.lang.NullPointerException: null
    at net.sourceforge.tess4j.Tesseract.dispose(Tesseract.java:826)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:239)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:194)
    at com.ch.variflightspider.common.utils.Tess4jUtils.getImgContent(Tess4jUtils.java:114)
    at com.ch.variflightspider.common.utils.Tess4jUtils.main(Tess4jUtils.java:123)
10:15:24.637 [main] ERROR com.ch.sunyong.common.utils.Tess4jUtils - Tess4jUtils getImgContent exception: 
net.sourceforge.tess4j.TesseractException: java.lang.NullPointerException
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:245)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:194)
    at com.ch.variflightspider.common.utils.Tess4jUtils.getImgContent(Tess4jUtils.java:114)
    at com.ch.variflightspider.common.utils.Tess4jUtils.main(Tess4jUtils.java:123)
Caused by: java.lang.NullPointerException: null

3)Exception in thread “main” java.lang.Error: Invalid memory access

eng.traineddata (训练库)路径不对

4.我找到的中文库下载地址

https://github.com/tesseract-ocr/tessdata/blob/master/chi_sim.traineddata

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Tess4j是一个基于Tesseract OCR引擎的Java库,可以用于识别图像中的文字。要获取图像中每个文字的坐标,可以使用Tess4j提供的`getWords()`方法。以下是获取图像中文字坐标的代码示例: ```java import java.awt.Rectangle; import java.io.File; import java.util.List; import net.sourceforge.tess4j.ITesseract; import net.sourceforge.tess4j.ITessAPI.TessPageIteratorLevel; import net.sourceforge.tess4j.Tesseract; import net.sourceforge.tess4j.Word; import net.sourceforge.tess4j.util.ImageHelper; public class Tess4jExample { public static void main(String[] args) { File imageFile = new File("example.png"); ITesseract tess = new Tesseract(); tess.setDatapath("tessdata"); try { String text = tess.doOCR(imageFile); System.out.println(text); List<Word> words = tess.getWords(ImageHelper.convertImageToPix(ImageIO.read(imageFile)), TessPageIteratorLevel.RIL_WORD); for (Word word : words) { Rectangle rect = word.getBoundingBox(); System.out.println(word.getText() + " @ (" + rect.x + "," + rect.y + ")"); } } catch (Exception e) { e.printStackTrace(); } } } ``` 在此示例中,我们首先使用`doOCR()`方法从图像中提取文本。然后,我们使用`getWords()`方法获取每个文字的`Word`对象,并使用`getBoundingBox()`方法获取每个`Word`对象的边界框。最后,我们打印每个文字及其坐标。注意,`getWords()`方法需要一个`Pix`对象,因此我们使用`ImageHelper.convertImageToPix()`方法将`BufferedImage`转换为`Pix`对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值