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
文件夹的位置。
当我
它随机开始工作
把tessdata文件夹和我的jar放在同一个目录下
将 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 运行 的任何地方包含它。我不太确定它为什么开始工作,但我很高兴它开始工作了
这个项目的最终目标是把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
文件夹的位置。
当我
它随机开始工作把tessdata文件夹和我的jar放在同一个目录下
将 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 运行 的任何地方包含它。我不太确定它为什么开始工作,但我很高兴它开始工作了