Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OCR库:在Windows 64位上编译tesseract_Java_Dll_Dependencies_32bit 64bit_Ocr - Fatal编程技术网

Java OCR库:在Windows 64位上编译tesseract

Java OCR库:在Windows 64位上编译tesseract,java,dll,dependencies,32bit-64bit,ocr,Java,Dll,Dependencies,32bit 64bit,Ocr,我正在使用ImageJ处理文档图像(业务文档),我正在寻找一个好的OCR库来检索某些区域的文本 目前我正在使用Asprise,但是结果不是很可靠。某些字符经常会混淆(0变成O,8->B,%->0,…),然后在不应该出现的地方出现空白,因此在后处理这些数据时会遇到很多麻烦。图像的分辨率为1240x1754,我还没有尝试过更高的分辨率,但是我想检测的最小字符是15像素高,所以我假设图像的质量足够了。(顺便说一下,我正在对原始图像执行ocr,而不是二进制图像) 看看这里类似的问题,我注意到tesser

我正在使用ImageJ处理文档图像(业务文档),我正在寻找一个好的OCR库来检索某些区域的文本

目前我正在使用Asprise,但是结果不是很可靠。某些字符经常会混淆(0变成O,8->B,%->0,…),然后在不应该出现的地方出现空白,因此在后处理这些数据时会遇到很多麻烦。图像的分辨率为1240x1754,我还没有尝试过更高的分辨率,但是我想检测的最小字符是15像素高,所以我假设图像的质量足够了。(顺便说一下,我正在对原始图像执行ocr,而不是二进制图像)

看看这里类似的问题,我注意到tesseract经常被推荐。因为它是用C++编写的,我不知道如何在java和Image J中使用它。p>

使用ASPRISE,我知道,它也用C++编写,只提供java包装器,我可以根据缓冲区执行OCR。所以我想我可以用tesseract做同样的事情

1。如何从Java调用tesseract函数?

更新:我试图使用tesjeract,但当我执行应用程序时,它因错误而崩溃

未满足链接错误:C:\Windows\System32\tessdll.dll:找不到依赖库

我能够成功编译tesjeract和tesseract 2.04,并将tessdll.dll和tesjeract.dll放在c:\windows\system32中。我正在使用此静态块加载库:

static
{
    System.loadLibrary("tessdll");
    System.loadLibrary("tesjeract");
}
如果相关,我使用的是64位Windows 7


2。那么,如何将BuffereImage转换为TeserAct能够使用的格式?

已解决

这是代码,如果有人感兴趣:(来源)


您可以查看一个Java OMR包,我相信它使用Tesseract作为工作表的文本部分。

您可能需要查看Tesseract 2.04的两个Java包装器:以及。

外部库的位需要与JVM匹配。由于tesjeract是最低公分母,因此您需要使用32位JVM。

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