3

我试图让事情与 tess4j(OCR 算法)一起工作,并且我正在使用以下代码:

import java.awt.image.RenderedImage;
import java.io.File;
import java.net.URL;

import javax.imageio.ImageIO;
import net.sourceforge.tess4j.*;

public static void main(String[] args) throws Exception{

    URL imageURL = new URL("http://s4.postimg.org/e75hcme9p/IMG_20130507_190237.jpg");

    RenderedImage img = ImageIO.read(imageURL);
    File outputfile = new File("saved.png");
    ImageIO.write(img, "png", outputfile);

    try {
    Tesseract instance = Tesseract.getInstance(); // JNA Interface Mapping

    //   Tesseract1 instance = new Tesseract1(); // JNA Direct Mapping

        String result = instance.doOCR(outputfile);
        System.out.println(result);

    } catch (Exception e) {
        System.err.println(e.getMessage());
    }

}

当我在 Eclipse(juno-64bit)中运行它时,它运行完美!

但是从命令行我得到这个异常:

Exception in thread "main" java.lang.NoClassDefFoundError: net/sourceforge/tess4j/Tesseract
    at SimpleQueueServiceSample.testOCR(SimpleQueueServiceSample.java:73)
    at SimpleQueueServiceSample.main(SimpleQueueServiceSample.java:57)Caused by: java.lang.ClassNotFoundException: net.sourceforge.tess4j.Tesseract
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 2 more

在我的构建类路径中,我拥有正确的 jars 文件:

tess4j.jar
jai_imageio.jar

之后,我导出一个简单的 jar 文件(这些 jar 在构建路径中的“order and export”处签名),然后运行我的代码:

java -jar manager.jar

请帮忙!

4

4 回答 4

2

您的jar 文件清单应包含一个Class-Path条目:

Class-Path: tess4j.jar jai_imageio.jar

然后,这些 jar 文件应在执行时与您的 jar 文件放在同一目录中,以便可以适当地加载它们。

到那时,一切都应该很好。但是如果清单中没有该条目,则无法将您的 jar 文件与它所依赖的其他 jar 文件连接起来。

于 2013-05-11T16:09:45.813 回答
0

您以错误的方式打包文件,您的依赖项不在 jar 中

于 2013-05-11T16:02:36.260 回答
0

你教室在哪儿 ?你错过了写作课。在类里面会有 public static void main(String args[]) 并编译 Tesseract instance = Tesseract.getInstance();

您将需要 tess4j.jar 在构建路径中。

于 2013-05-11T20:13:31.853 回答
0

如果你的操作系统是Windows,libtesseract304.dll(用于OCR)是用VC2013构建的,所以你需要其他系统dll在这里下载。

于 2016-05-04T03:06:31.830 回答