我使用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