2011-10-01 65 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