Tess4J IllegalStateException:未设置输入
Posted
技术标签:
【中文标题】Tess4J IllegalStateException:未设置输入【英文标题】:Tess4J IllegalStateException: Input not set 【发布时间】:2014-03-09 01:46:13 【问题描述】:所以我已经设置了我的 Eclipse 和必要的库来让 Tess4J 工作,但是,当我使用提供的示例代码时它给了我一个错误。图像文件就在工作区的根目录中,我什至尝试移动它,甚至编辑方法以直接指向路径。一切都无济于事。老实说,我有点难过,我想知道是否有人可能知道我需要寻找的地方。
import java.io.File;
import net.sourceforge.tess4j.*;
public class Main
public static void main(String[] args)
File imageFile = new File("eurotext.tif");
Tesseract instance = Tesseract.getInstance(); // JNA Interface Mapping
// Tesseract1 instance = new Tesseract1(); // JNA Direct Mapping
try
String result = instance.doOCR(imageFile);
System.out.println(result);
catch (TesseractException e)
System.err.println(e.getMessage());
我得到的错误如下:
Feb 11, 2014 11:05:13 AM net.sourceforge.tess4j.Tesseract doOCR
SEVERE: Input not set!
java.lang.IllegalStateException: Input not set!
at com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.getNumImages(TIFFImageReader.java:268)
at net.sourceforge.vietocr.ImageIOHelper.getIIOImageList(Unknown Source)
at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
at Main.main(Main.java:12)
java.lang.IllegalStateException: Input not set!
提前致谢!
编辑:快速更新,因为我一直在尝试找出很多东西并尝试多种东西。首先,我发现输入未设置是由错误放置的 .dll 文件引起的。然而,现在我遇到了一个新的、更困难的错误。这是新代码(我只是添加了一个 println 来验证它是否能够在文件进入 try-catch 之前读取文件)。
import java.io.File;
import net.sourceforge.tess4j.*;
public class Main
public static void main(String[] args)
File imageFile = new File("C:\\Users\\Marouane Boutaib\\Java projects\\Tess4j\\eurotext.tif");
Tesseract instance = Tesseract.getInstance(); // JNA Interface Mapping
// Tesseract1 instance = new Tesseract1(); // JNA Direct Mapping
System.out.println(imageFile.canRead());
try
String result = instance.doOCR(imageFile);
System.out.println(result);
catch (TesseractException e)
System.err.println(e.getMessage());
但是,我遇到了一个新错误:
true
Exception in thread "main" 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>(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 Main.main(Main.java:12)
我和我的同事认为这是一个缺失的参考,但是,我已经按照指南进行设置,并且我完全没有改变 Tess4J 开发人员自己提供的示例代码。最重要的是,我还没有在 Google 上找到另一个发生这种情况并得到解决的实例。
【问题讨论】:
看起来像位问题。你的软件配置是什么? VM 出现问题,我在将其设置为 64 位时犯了一个小错误。它现在工作得很好,但是,我在 API/准确性/等方面遇到了问题,但还没有具体的问题。感谢您至少花时间查看它! 【参考方案1】:我知道这已经太久了,但是......
首先,请确保您使用的是 32 位 JVM。
其次,将所有dll(gsdll32.dll、liblept168.dll、libtesseract302.dll)插入某个文件夹中,然后使用
System.setProperty("jna.library.path", "<the directory of the folder without a trailing slash>").
之后它就可以工作了。我也想到了……
【讨论】:
好久没看这个了,但是你有正确的答案!【参考方案2】:输入未设置 => 问题
我用这些步骤解决了它:
第 1 步:检查eng.traineddata
文件。如果文件不可用,则表示下载。
第2步:下载完成后。 只需粘贴到项目文件中。或者创建 tessdata 文件夹并粘贴到其中。
这是固定代码:
package ocr_rec;
import java.io.File;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import net.sourceforge.tess4j.*;
public class Test
public static void main(String[] args)
File imageFile = new File("C:\\Users\\Vigne\\OneDrive\\Desktop\\files\\data.jpg");
ITesseract instance = new Tesseract();
System.err.println(instance.getClass().getName().toString());
try
String result = instance.doOCR(imageFile);
System.out.println(result);
catch (TesseractException e)
System.err.println(e.getMessage());
【讨论】:
以上是关于Tess4J IllegalStateException:未设置输入的主要内容,如果未能解决你的问题,请参考以下文章
Tess4J Linux 实践[解决:Tess4J - Native library (linux-x86-64/libtesseract.so) not found in resource path
Tess4J -4.0.2- Linux 实践 [解决:Tess4J - Native library (linux-x86-64/libtesseract.so) not found in reso