4

这个项目的最终目标是把jar放到一个使用tesseract的目录中,并输出一个结果目录和输出txt文件。不过,我在使用 tesseract 时遇到了一些问题。我正在使用 Maven 在 Java 中使用 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 仍然不会设置的事实。如果有人有任何想法,我仍然会全力以赴,我会继续寻找解决方案,但我不确定它是否会起作用

4

2 回答 2

1

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

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

于 2016-03-24T01:35:29.627 回答
1

当我随机开始工作时

  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 - > runnable jar,然后设置选项“将所需的库提取到生成的jar中”。

(旁注,像我早期做的环境设置不再需要在项目中了)

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

于 2016-03-24T20:21:14.883 回答