【问题标题】:Tesseract OCR not working for 64 bit machineTesseract OCR 不适用于 64 位机器
【发布时间】:2014-10-30 01:01:57
【问题描述】:

我正在开发一个使用 Tesseract 进行 OCR 的应用程序。

我的代码在 Windows 32 位系统中运行良好。 但是当我尝试使用 32 位 .dll 文件在 64 位机器上运行相同的代码时,代码正在运行,但是代码没有给出准确的结果。

所以我使用 64 位 .dll 文件在 64 位机器上运行它。 现在,当我尝试运行相同的程序时,在控制台(Eclipse Kepler)中出现以下错误。

Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: %1 is not a                                                           
valid Win32 application.
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.TessAPI.<clinit>(TessAPI.java:38)
at net.sourceforge.tess4j.Tesseract.init(Tesseract.java:293)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:227)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:176)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:159)

我已经下载了与 64 位系统兼容的 64 位 .dll 文件 (https://github.com/charlesw/tesseract/tree/master/src/lib/TesseractOcr/x64),但我仍然遇到同样的错误。 我在 64 位机器上使用 GhostScript v-8.71。我已经在 Program Files 和 Program Files(x86) 中安装了它。我也相应地设置了环境变量。但仍然无法正常工作。

请给我一些解决方案!

【问题讨论】:

  • JDK 32|64 位,Tess4J 版本?
  • 我使用的是 Eclipse IDE,所以我安装了 JRE v7 64bit。我使用的 Tess4J 是 1.2 版。
  • 尝试使用 JDK 64 位、Tess4J 1.3 和 GS 9.14 64 位版本。
  • 看看Tess4J Tutorial能不能帮到你。
  • 感谢您的建议,我都试过了...但没有帮助...我仍然遇到同样的错误

标签: java 32bit-64bit tesseract


【解决方案1】:

Tess4J 目前仅支持 32 位 JVM

This is the creator, nguyenq, responding to a similar issue on a sourceforge forum.

同样,教程中指出发行版中仅包含 32 位 DLL。

To run with a JVM 64-bit, you'll need to use Tesseract and Leptonica 64-bit DLLs.

一种解决方案:让您的 IDE 改用 32 位 JVM。

-- 缺点是您可能混合了 32 位和 64 位环境,在复杂的应用程序或环境中这可能很奇怪......(我认为这不是太糟糕,但可能会让您的 IDE 感到痛苦)

In an update found here,您似乎可以找到 64 位 Java 的 DLL here, as part of the Tesseract wrapper for .NET(很奇怪)。 但是,我还没有尝试过那些 64 位 DDL,并且在 sourceforge 链接中,它说他们 depend on the Visual C++ Redistributable for VS2012 or Visual C++ Redistributable for VS2013 ... 这太糟糕了....

如果我找到更清洁的解决方案,我会更新这篇文章。

更新

请注意,我是使用 Amazon Web Services 实例进行此操作的。

我能够让 Tess4J 在 64 位 Ubuntu 14.04 上工作。一旦我放弃了我的 Red Hat 发行版并转到 Ubuntu,这实际上非常简单。

sudo apt-get install tesseract-ocr 将完全设置 tesseract。您可以输入tesseract -v 进行检查。我还需要 GhostScript,因为我正在使用 PDF。 sudo apt-get install ghostscript 再次设置好一切。使用gs -v 进行验证。

现在在您的 Java 应用程序中,所有您需要在路径中包含来自 Tess4J 下载的 JAR -- jna-4.1.0j.arjai_imageio.jartess4j.jarghost4j-0.5.1.jar,如果您正在使用 PDF。

在您的 Java 应用程序中,您需要设置数据路径,以便您的 Tesseract 实例知道 tesseract 的安装位置。即使我设置了环境变量,它也从未对我有用。我需要像这样显式设置数据路径:

Tesseract tessInstance = Tesseract.getInstance();
tessInstance.setDatapath(System.getenv("TESSDATA_PREFIX"));
ImageIO.scanForPlugins(); // make sure it knows about GhostScript, to work with PDFs
String result = tessInstance.doOCR(myFile);

确保 setDatapath() 设置为您的 tesseract 安装的 tessdata 文件夹的 parent 文件夹(在我的 Ubuntu 上,这是 /usr/share/tesseract-ocr/`)。

这就是我所需要的。不用担心类路径中的 DLL。

tl;博士:

使用最新的 Ubuntu

sudo apt-get tesseract-ocr

sudo apt-get ghostscript 如果使用 PDF

包括适当的 Tess4J JAR(jna-4.1.0j.arjai_imageio.jartess4j.jarghost4j-0.5.1.jar,如果您使用的是 PDF)

调用 tess.setDataPath() 指向您的 tesseract 安装(/usr/share/tesseract-ocr/ 用于我的 Ubuntu 14.04)

ImageIO.scanForPlugins() 如果使用 GhostScript

就是这样。你很高兴打电话给tess.doOCR(MyFile)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-17
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多