Could not initialize class net.sourceforge.tess4j.TessAPI

问题遇到的现象和发生背景

我需要开发一个图片识别的功能,使用tess4j进行图片识别,window环境正常。使用docker将springBoot项目部署到linux服务器上,功能就用不了了,我在linux系统安装了leptonica、tesseract,也没有成功。应该如何使用tess4j?

问题相关代码,请勿粘贴截图
运行结果及报错内容

Caused by: java.lang.NoClassDefFoundError: Could not initialize class net.sourceforge.tess4j.TessAPI
at net.sourceforge.tess4j.Tesseract.init(Tesseract.java:379)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:292)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:275)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:256)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:240)
at com.csg.sdc.admin.backend.cgls.msa.ValidImageUtil.parseValidImage(ValidImageUtil.java:41)
at com.csg.sdc.admin.backend.cgls.msa.ValidImageUtil.getValidImageString(ValidImageUtil.java:26)
at com.csg.sdc.admin.backend.cgls.msa.CertUtil.crew(CertUtil.java:60)
at com.csg.sdc.admin.backend.cgls.msa.Cert.search(Cert.java:45)
at com.csg.sdc.admin.backend.cgls.service.EmpInfoService.getEmpInfoCert(EmpInfoService.java:673)
at com.csg.sdc.admin.backend.cgls.web.EmpInfoController.getEmpInfoCert(EmpInfoController.java:96)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)

我的解答思路和尝试过的方法
我想要达到的结果

我应该怎么配置、才能在linux系统正确的部署运行springboot项目的tess4j图片识别功能?

  1. 首先在Linux端检查是否能正常使用tesseract 命令,如果不能则是linux端安装出了问题

NoClassDefFoundError,这个错是jar冲突,或者少jar包

相关的代码

    public static String getValidImageString(File imgFile) {
        if (imgFile == null) {
            return null;
        } else {
            try {
                File rfile = cleanLinesInImage(imgFile);
                BufferedImage textImage = ImageIO.read(rfile);
                return parseValidImage(textImage);
            } catch (IOException var3) {
                var3.printStackTrace();
                return null;
            }
        }
    }

    public static String parseValidImage(BufferedImage img)
    {
        Tesseract instance = new Tesseract();
        try {
            instance.setDatapath(ResourceUtils.getFile("classpath:tessdata").getAbsolutePath());
            instance.setTessVariable("tessedit_char_whitelist", "23456789abcdefghjkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ");
            return instance.doOCR(img).trim().replaceAll("[^0-9a-zA-Z]*", "");
        } catch (Exception e) {
            e.printStackTrace();
        }return null;
    }

服务器上输入tesseract 命令,显示结果,应该是安装成功的。

img

题主有解决这个问题吗?

大佬,问题解决了吗?

解决没有 我也是报这个错误