【问题标题】:Tesseract For Java setting Tessdata_Prefix for executable jarTesseract For Java 为可执行 jar 设置 Tessdata_Prefix
【发布时间】:2016-07-10 00:50:44
【问题描述】:

这个项目的最终目标是把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 仍然不会设置的事实。如果有人有任何想法,我会全力以赴,我会继续寻找解决方案,但我不确定它是否会起作用

【问题讨论】:

  • 这可能有帮助吗? stackoverflow.com/questions/18095708/…
  • @ShmulikKlein 不,对我没用。我将添加一个关于我如何设置环境变量的编辑。我得到了同样的错误
  • 所以问题是我的项目层次结构中有 tessdata。我真的不能把它拿出来,因为系统可能没有它,所以我需要找到一种方法来在让它可执行的同时仍然加载 tessdata

标签: java maven tesseract executable-jar tess4j


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

当我随机开始工作时

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 2013-02-03
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2013-02-05
    相关资源
    最近更新 更多