java - 在哪里可以找到有关如何使用 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,因为它们在我的本地驱动器中,但我会看看我能做什么。
解决方案
更新:
我终于想通了。总的来说,问题在于我使用的解释和说明太过时了。我在寻找新教程时修复了它。
我忘记添加到 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。
推荐阅读
- c# - PageIterator 作为 GetAsync() 上的通用扩展方法
- javascript - 该条件在 ajax 请求中不起作用
- flutter - 如何将变量从一个类传递给另一个类并将更改后的变量返回?
- python - 我正在尝试对熊猫聚合进行排序
- android - 在 Android Studio 中找不到 \gradle-wrapper.properties
- c++ - Boost logger的深拷贝
- c++ - 按顶点数对 3D 对象进行排序 C++
- wpf - 文本在 WPF 应用程序的 UI 中可见,但 WinAppdriver 无法识别文本
- python - XOR Tensorflow 不收敛
- html - 如何在博客收据网站上添加打印按钮?