2011-10-01 59 views
3

我使用ImageJ用于处理文档图像(商业文件),我期待有一个良好的OCR库中检索某些地区的文本编制正方体。OCR库的Java:在Windows 64位

目前我使用Asprise,但效果并不十分可靠。某些字符经常会感到困惑(0变为O,8 - > B,% - > 0,...),那么就会出现空白,因此在处理这些数据时会遇到很多麻烦。这些图像的分辨率为1240x1754,我还没有尝试过更高的分辨率,但是我想要检测的最小字符高15像素,所以我认为图像的质量已经足够。 (顺便说一下,我对原始图像进行OCR,而不是二进制图像)

在类似的问题在这里看,我注意到正方体经常被recommeneded。由于它是用C++编写的,我不确定如何在Java和ImageJ中使用它。

使用Asprise,其中,因为据我所知,还用C++编写,只是提供了一个Java包装,我可以基于一个BufferedImage执行OCR。所以我认为我可以用tesseract做同样的事情。

1.如何从Java调用正方体的功能呢?

更新:我试图用tesjeract,但是当我执行我的应用程序崩溃因

UnsatisfiedLinkError: C:\Windows\System32\tessdll.dll: Can't find dependent libraries

我能成功编译tesjeract和正方体2.04和放置tessdll.dll和tesjeract.dll在c:\ windows \ system32中。我正在使用此静态块来加载库:

static 
{ 
    System.loadLibrary("tessdll"); 
    System.loadLibrary("tesjeract"); 
} 

如果它是相关的,我正在使用Windows 7 64位。


2。所以我怎么能转换一个BufferedImage成格式的Tesseract能够一起工作呢?

解决

这是代码,如果有人有兴趣:(从audiveris起源)

private ByteBuffer imageToTiffBuffer (BufferedImage image) throws IOException 
{ 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    ImageOutputStream  ios = ImageIO.createImageOutputStream(baos); 

    // Take the first suitable TIFF writer 
    ImageWriter writer = ImageIO.getImageWritersByFormatName("tiff").next(); 
    writer.setOutput(ios); 
    writer.write(image); 
    ios.close(); 

    // allocate() doesn't work 
    ByteBuffer buf = ByteBuffer.allocateDirect(baos.size()); 
    buf.put(baos.toByteArray()); 

    return buf; 
} 

回答

2

外部库的位数需要与JVM相匹配。由于tesjeract是最低的共同标准,因此您需要使用32位JVM。

1

你可以看看audiveris,一个Java OMR包,我相信采用正方体的表单的文本部分。

+0

谢谢!我找到了一种将图像转换为tesseract的方法。 – Pedro