【发布时间】:2017-12-15 18:40:47
【问题描述】:
我正在尝试使用 tesseract 对 java 中的图像进行 OCR。我意识到有像 Tess4J 这样的包装器提供了更多的功能和东西,但我一直在努力让它正确设置。无论如何,只需使用 Runtime 运行一条单行命令就足够了,因为这只是一个个人小项目,不需要在其他计算机或任何东西上工作。
我有这个代码:
import java.io.IOException;
public class Test {
public static void main(String[] args) {
System.out.println(scan("full-path-to-test-image"));
}
public static String scan(String imgPath) {
String contents = "";
String cmd = "[full-path-to-tesseract-binary] " + imgPath + " stdout";
try { contents = execCmd(cmd); }
catch (IOException e) { e.printStackTrace(); }
return contents;
}
public static String execCmd(String cmd) throws java.io.IOException {
java.util.Scanner s = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
}
}
当它直接从终端编译和运行时,它可以完美运行。但是,当我在 eclipse 中打开完全相同的文件时,它会给出一个 IOException:
java.io.IOException: Cannot run program "tesseract": error=2, No such file or directory
发生了什么事?感谢您的帮助。
【问题讨论】:
-
你会想要熟悉“当前目录”和“相对路径”的概念。这些不是 Java 概念,而是基本的文件系统概念。
-
我不完全确定您的建议。当程序直接从终端或从 Eclipse 运行时,Tesseract 不在当前目录/工作目录中,并且在命令行上时,无论当前目录如何,该命令都有效。
-
我可能误解了输出。我认为这意味着 tesseract 本身找不到您的文件。但我可能错了。可能是 Eclipse 运行在一个 PATH 环境变量与终端 shell 不同的环境中。
-
我更改了 cmd 字符串以包含二进制文件的完整路径,因此 PATH 变量应该不再有任何影响,对吗?
-
您可以尝试从终端和 IDE 打印出两次运行的环境,看看是否有什么不同
标签: java eclipse tesseract runtime.exec