我使用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;
}
谢谢!我找到了一种将图像转换为tesseract的方法。 – Pedro