提取字符串变量中的图像内容

时间:2014-05-23 08:04:44

标签: java-ee tomcat6 ocr tesseract

我会从字符串变量中的图像中提取文本,所以我使用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吗?

3 个答案:

答案 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)