Tesseract For Java为可执行jar

时间:2016-03-22 22:07:30

标签: java maven tesseract executable-jar tess4j

这个项目的最终目标是获取jar并将其放在使用tesseract的目录中,并输出结果目录和输出txt文件。不过,我在使用tesseract时遇到了一些问题。 我正在使用Java中的tess4j与Maven合作,我想将我的代码变成可执行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仍然不会设置的事实。如果有人有任何想法我仍然是耳朵,我将继续寻找解决方案,但我不确定它是否会起作用

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

当我

时它随机开始工作
  1. 将tessdata文件夹放在与我的jar

  2. 相同的目录中
  3. 将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;
    
  4. 和3.我通过右键单击项目从eclipse导出,选择java - &gt; runnable jar,然后设置选项“将所需的库提取到生成的jar”。

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

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