我会从字符串变量中的图像中提取文本,所以我使用Tess4j来做这个,当我创建一个新项目并测试它时它工作正常:
public static void main(String[] args) throws TesseractException {
File image=new File("eurotext.tif");
Tesseract instance=Tesseract.getInstance();
String result = instance.doOCR(image);
System.out.println(result);
}
但是当我尝试将tess4j集成到myproject中时,我得到了异常:
java.lang.IllegalStateException: Input not set!
at com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.getNumImages
(TIFFImageReader.java:28)
at net.sourceforge.vietocr.ImageIOHelper.getIIOImageList(Unknown Source)
at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
是否有另一种不使用ocr来提取文本的方法?
我不知道为什么我会收到此错误,但它会调用TessBaseAPIGetUTF8Text
java.lang.Error: Invalid memory access
at com.sun.jna.Native.invokePointer(Native Method)
at com.sun.jna.Function.invokePointer(Function.java:470)
at com.sun.jna.Function.invoke(Function.java:404)
at com.sun.jna.Function.invoke(Function.java:315)
at com.sun.jna.Library$Handler.invoke(Library.java:212)
at sun.proxy.$Proxy7.TessBaseAPIGetUTF8Text(Unknown Source)
at net.sourceforge.tess4j.Tesseract.getOCRText(Tesseract.java:336)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:232)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:173)
at net.sourceforge.tess4j.Tesseract.doOCR(Tesseract.java:158)
有人已经在tomcat中使用了tess4j吗?
答案 0 :(得分:1)
您拥有“无效的内存访问权限”,因为您必须定义要使用的trainingdata的数据路径。如果你没有指定语言,它会认为它是eng。
例如,您的项目路径是PROJECT,您的训练数据是PROJECT / data / tessdata / eng.traineddata
tess.setDatapath("data");
tess.setLanguage("eng");
答案 1 :(得分:0)
看起来你还没有设置输入。确保您有正确的图像路径。
答案 2 :(得分:0)
除数据路径和有效输入图像外,似乎还有第三个原因。我认为这与tesseract在某些情况下无法识别图像边界有关。我能够通过使用BufferedImage来消除错误,而不是传递一个空的Rectangle,传递一个Rectangle(0,0,imageWidth-1,imageHeight -1)