【问题标题】:Using Tesseract in a web based application where JDK is 64 bit在 JDK 为 64 位的基于 Web 的应用程序中使用 Tesseract
【发布时间】:2016-02-23 20:26:06
【问题描述】:

我正在使用 Tesseract 开发基于 Web 的 OCR 系统。我的 JDK 是 64 位的。但是当我运行我的项目时,它给出了以下错误

java.lang.UnsatisfiedLinkError: 找不到指定的模块。

at com.sun.jna.Native.open(Native Method)
at com.sun.jna.Native.open(Native.java:1759)
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:260)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
at com.sun.jna.Library$Handler.<init>(Library.java:147)
at com.sun.jna.Native.loadLibrary(Native.java:412)
at com.sun.jna.Native.loadLibrary(Native.java:391)
at net.sourceforge.tess4j.util.LoadLibs.getTessAPIInstance(Unknown Source)
at net.sourceforge.tess4j.TessAPI.<clinit>(Unknown Source)
at net.sourceforge.tess4j.Tesseract.init(Unknown Source)
at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
at net.sourceforge.tess4j.ocr.TesseractOcr.performOcr(TesseractOcr.java:22).

但是当我在独立应用程序中使用 Tesseract 时,它会从图像中提取文本。我使用 Tomcat 作为服务器。并且 tess4j-3.0.jar 缺少 liblept172.dll

  1. 我不能在 64 位 JDK 中使用 Tesseract 吗?
  2. 如何在 Tomcat 服务器中使用 Tesseract
  3. 如何将 liblept172.dll 添加到 tess4j-3.0.jar 文件中?
  4. 是否有不使用 dll 文件的 tesseract 替代品?

我浏览了几乎所有与此问题相关的教程。但不幸的是,非对我有用。有人有想法吗?提前谢谢你

【问题讨论】:

  • Tess4J 需要 Lept4J 库,其中有 liblept.dll
  • 我不能使用用于 64 位的 liblept172.dll 吗?
  • 是的,一定要设置jna.library.path变量来指定它的位置。

标签: java tomcat tesseract


【解决方案1】:

在 64 位 java 中使用 32 位 dll 是不可能的。 对于本机 dll,您必须使用与 jvm 相同的架构。

如果是这种情况,一个常见的 jni 问题是,如果您设置了专用的“本机库路径”并且缺少依赖 dll,例如 libc 或 vcrt。

同样常见的是,您将 lib 放置在未检查的路径中。如果您认为自己做得很好,我们在 Windows 上使用 ProccessMonitor 在 init 期间查找丢失的 dll 文件。您可以跟踪 jvm 正在查看的不同位置,包括文件名。

更新:根据文档 tess4j 在 Windows 上加载 libtesseract304.dll

文档还指出,这些库包含在 jar 中并在运行时提取。这可能需要作为命令行工具运行。它还使用 jna https://jna.java.net/javadoc,它是一个 jni 包装器来帮助加载 dll。它遵循 jna.library.path。

我建议尝试一下 ProcessMonitor。生存时间太短,无法尝试调试 dll 加载错误:-)

https://technet.microsoft.com/de-de/sysinternals/processmonitor.aspx

【讨论】:

  • 下载 tess4j 后,32 位 dll 和 64 位 dll 有两个单独的文件。我在 64 位文件夹中使用了 dll。我什至更改了 VM 选项。但什么都没有改变。我什至将所有 dll 添加到类路径中。我还使用了depends.exe 来查找libtesseract304.dll 的依赖dll。我什至将它们添加到类路径中
  • 本机库不是从类路径加载的,而是从 java.library.path 加载的。如果没有明确设置它默认为 Windows 上的 PATH
  • 您的路径中可能有另一个 x32 dll,首先找到的地方。您是否将 jna 或 java library.path 设置为一个文件夹并将所有 dll 复制到那里?
  • 如何找到 java.library.path?
  • 它是一个系统属性,在命令行中使用 -Djava.library.path=... 设置。
猜你喜欢
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 2016-02-17
相关资源
最近更新 更多