首页 > 解决方案 > 在哪里可以找到有关如何使用 Tesseract API 的说明文件,或者是否有其他方法可以修复此错误?

问题描述

我只是很沮丧。我有我父​​亲给我的这个个人项目,所以我可以用自己的方式帮助他的公司。我正在尝试使用 Tesseract API 从图像中读取单词。我从来没有做过像添加库或任何技术性的事情,所以我按照这些说明来帮助我:

https://tphangout.com/how-to-use-the-tesseract-api-to-perform-ocr-in-your-java-code/

https://dzone.com/articles/reading-text-from-images-using-java-1

除了一部分(第 7 步;他们要求放入 liblept.dll 文件;在我提取 Tess4j 后,我找不到那个特定的 .dll 文件)之外,我一直按照这些说明进行操作。)我不断收到错误消息。

我已经删除了我的 Netbeans 项目并重新尝试安装并遵循相同的步骤。我什至认为可能是图像文件类型,所以我在 tiff、png 和 jpg 之间切换。没有什么。

ImageReader 类

import java.io.*;
//import java.util.*;
import net.sourceforge.tess4j.*;
public class ImageReader {
    String filePath;
    public ImageReader(String s) {
        filePath = s;
    }

    public String getImageReadings() {
        File imageFile = new File(filePath);
        Tesseract instance = new Tesseract();
        try {
            String result = instance.doOCR(imageFile);
            return result;
        } 
        catch (TesseractException e) {
            System.err.println(e.getMessage());
            return "Error while reading image";
        }
    }  
}

我希望它在读取我用 Hello 输入创建的 png 时吐出一个 Hello。但它只是给了我这个错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'libtesseract3051': Native library (win32-x86-64/libtesseract3051.dll) not found in resource path ([file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/commons-beanutils-1.9.2.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/commons-io-2.6.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/commons-logging-1.2.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/fontbox-2.0.9.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/ghost4j-1.0.1.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/hamcrest-core-1.3.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/itext-2.1.7.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/jai-imageio-core-1.4.0.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/jbig2-imageio-3.0.0.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/jboss-vfs-3.2.12.Final.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/jcl-over-slf4j-1.7.25.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/jna-4.1.0.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/jul-to-slf4j-1.7.25.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/junit-4.12.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/lept4j-1.6.4.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/log4j-1.2.17.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/log4j-over-slf4j-1.7.25.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/logback-classic-1.2.3.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/logback-core-1.2.3.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/pdfbox-2.0.9.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/pdfbox-tools-2.0.9.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/slf4j-api-1.7.25.jar, file:/C:/Users/kakas/OneDrive/Documents/Tess4J/lib/xmlgraphics-commons-1.5.jar, file:/C:/Users/kakas/OneDrive/Documents/NetBeansProjects/PDFSorter/build/classes/])
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:271)
    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(LoadLibs.java:81)
    at net.sourceforge.tess4j.TessAPI.<clinit>(TessAPI.java:42)
    at net.sourceforge.tess4j.Tesseract.init(Tesseract.java:379)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:292)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:224)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:208)
    at pdfsorter.ImageReader.getImageReadings(ImageReader.java:25)
    at pdfsorter.PDFSorter.main(PDFSorter.java:19)

我有点不知所措,因为到目前为止我只做过像构建计算器这样的迷你项目。我认为这是我找不到的dll文件的问题,但我不确定。也只是最近的更新,由于某种原因,它会在同一位置使用不同的 png 给出不同的错误。第二个错误如下:

[main] ERROR net.sourceforge.tess4j.Tesseract - I/O error reading PNG header!
javax.imageio.IIOException: I/O error reading PNG header!
javax.imageio.IIOException: I/O error reading PNG header!
    at com.sun.imageio.plugins.png.PNGImageReader.readHeader(PNGImageReader.java:315)
    at com.sun.imageio.plugins.png.PNGImageReader.readMetadata(PNGImageReader.java:654)
    at com.sun.imageio.plugins.png.PNGImageReader.readImage(PNGImageReader.java:1256)
    at com.sun.imageio.plugins.png.PNGImageReader.read(PNGImageReader.java:1614)
    at javax.imageio.ImageReader.readAll(ImageReader.java:1066)
    at net.sourceforge.tess4j.util.ImageIOHelper.getIIOImageList(ImageIOHelper.java:395)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:224)
    at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:208)
    at pdfsorter.ImageReader.getImageReadings(ImageReader.java:25)
    at pdfsorter.PDFSorter.main(PDFSorter.java:19)
Caused by: javax.imageio.IIOException: Bad PNG signature!
    at com.sun.imageio.plugins.png.PNGImageReader.readHeader(PNGImageReader.java:242)
    ... 9 common frames omitted

我不确定如何发布我使用的 png,因为它们在我的本地驱动器中,但我会看看我能做什么。

标签: javanetbeanstesseract

解决方案


更新:

我终于想通了。总的来说,问题在于我使用的解释和说明太过时了。我在寻找新教程时修复了它。

我忘记添加到 Netbeans 项目的库文件夹中的 jar 文件之一位于 Tess4j 的 dist 文件夹中。从https://sourceforge.net/projects/tess4j/files(下载所有内容的地方),您需要下载 tess4j 和 lept4j 项目。然后在解压缩文件夹后从他们的 dist 和 lib 文件夹中,将所有 jar 添加到项目的库中。然后,从 IDE 中将 tess4j 和 lept4j 作为项目打开,并将它们的源包复制到项目的源包中。最后,在 Tess4j 和 Lept4j 中查找 .dll 文件(对于每个项目,应该有 2 个 .dll 只是在 32 位和 64 位上有所不同),并将每个文件复制到项目的源代码包中,标记为 net.sourceforge.tess4j。


推荐阅读