Tesseract For Java 设置 Tessdata_Prefix 可执行 jar

Tesseract For Java setting Tessdata_Prefix for executable jar

这个项目的最终目标是把jar 放在一个目录中,在那里它使用tesseract 并输出一个结果目录和输出txt 文件。不过,我在使用 tesseract 时遇到了一些问题。 我在 Java 中与 Maven 一起使用 tess4j,我想将我的代码制作成一个可执行的 jar。该项目作为桌面应用程序运行良好,但每当我尝试使用 java -jar fileName.jar(导出到 jar 后)运行 时,它都会给我错误

Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory
Failed loading language 'eng'
...

我上网看了看,但真的找不到如何为 jar 设置 tesseract 并获得正确的路径。现在我使用 maven 并在我的 pom 文件 (tess4j -v 3.0) 中有 Tesseract 依赖项,我的项目中有 tessdata。

我对 maven 和 jar 文件相当陌生,之前从未使用过 tesseract,但据我从互联网上得知我已正确设置它。

有谁知道如何让 tess4j 指向我项目中的 tessdata 目录并有一个动态路径,这样我就可以在多台计算机和地方移动使用它?

这就是我对 Tesseract 的称呼

    Tesseract instance = new Tesseract();
    instance.setDatapath("src/main/resources");
    String result = instance.doOCR(imageFile);
    String fileName = imageFile.getName().replace(".jpg", "");
    System.out.println("Parsed Image " + fileName);
    return result;

编辑

这就是我尝试在我的代码中设置环境变量TESSDATA_PREFIX的方式

String dir = System.getProperty("user.dir");
System.out.println("current dir = " + dir);
ProcessBuilder pb = new ProcessBuilder("CMD", "/C", "SET");
Map<String, String> env = pb.environment();
env.put("TESSDATA_PREFIX", dir + "\tessdata");
Process p = pb.start();

但这没有明显的效果。我仍然遇到同样的错误

编辑 2

根据报错信息我需要设置到tessdata的父目录下,我也试过了没有用

编辑 3

经过大量搜索并尝试修复它,我不确定是否可行。 tesseract 中的 doOcr 方法接受一个缓冲图像或文件,如果我的图像不是动态的,这会没问题,所以我不能真正将它们存储在 jar 中。更不用说 TESSDATA_PREFIX 仍然不会设置的事实。如果有人有任何想法,我会洗耳恭听,我会继续寻找解决方案,但我不确定它是否有效

您可以调用 instance.setDatapath 方法将 Tesseract 指向您的 tessdata 文件夹的位置。

http://tess4j.sourceforge.net/docs/docs-3.0/

当我

它随机开始工作
  1. 把tessdata文件夹和我的jar放在同一个目录下

  2. 将 setDatapath 更改为以下内容

    Tesseract instance = new Tesseract();
    instance.setDatapath(".");
    String result = instance.doOCR(imageFile);
    String fileName = imageFile.getName().replace(".jpg", "");
    System.out.println("Parsed Image " + fileName);
    return result;
    

和 3. 我通过右键单击项目从 eclipse 导出,选择 java -> 运行nable jar,然后设置选项 "Extract Required Libraries into Generated Jars"。

(旁注,我之前做的环境设置不需要在项目中了)

我真的以为我试过了,但我想一定是出了什么问题。我从我的项目中删除了 tessdata,并且必须在 jar 运行 的任何地方包含它。我不太确定它为什么开始工作,但我很高兴它开始工作了