我尝试使用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文件(jars在构建路径中的'order and export'处签名),然后运行我的代码:
java -jar manager.jar
请帮忙!
答案 0 :(得分:2)
您的jar file manifest应包含Class-Path条目:
Class-Path: tess4j.jar jai_imageio.jar
然后,这些jar文件应该在执行时放在与jar文件相同的目录中,这样才能正确加载它们。
那时,一切都应该好。但是如果清单中没有该条目,则无法将jar文件与其依赖的其他jar文件连接起来。
答案 1 :(得分:0)
你正在以错误的方式打包文件,你的依赖关系不在jar
中答案 2 :(得分:0)
你的班级在哪里?你错过了上课。在类内部会有public static void main(String args [])并进行编译 Tesseract instance = Tesseract.getInstance();
你需要在构建路径中使用tess4j.jar。
答案 3 :(得分:0)
如果您的操作系统是Windows,libtesseract304.dll
(用于OCR)是使用VC2013构建的,因此您需要其他系统dll
。下载here。