2017-02-17 64 views
0

我通过tesseract运行pdf /图像,dpi越高,结果就会越好。我在sparse_text的页面分割模式中使用了tesseract,因此在将其输入到tesseract引擎中时,我真的需要将整个pdf作为一个整体进行检查。如何确保请求的图像分辨率不会丢失内存异常

我使用adobe pdf sdk从PDF中获取图像以供入tesseract。问题是,有时我得到一个内存不足的错误。我打电话

int[] intBuf = util.getAbgrRect(page, x, y, w, h, wPix, hPix); 

在大多数情况下(归一化坐标系)要求有参数x = 0, y = 0, w = 1, h = 1, wPix = 300 dpi * length of drawing, hPix 300 dpi * height of drawing。由于我不知道从用户输入到程序中的pdf的大小,我需要进行一些类型的检查以确保所请求的wPix和hPix对于可用内存的量不是太大,并且会导致崩溃pdf sdk。

我有点不确定如何解决这个问题,我想我可以做的一件事是检查可用的内存/ Java堆大小可用,并以某种方式确定我可以从pdf sdk请求的最大dpi,而不会耗尽内存/请求数据太多的数据阵列。我也想知道是否可以从pdf sdk请求二进制图像或灰度图像,以便返回的数组尺寸更小,这就是我需要提供给tesseract的最终内容。我不确定这是否是一个好主意,或者是否有其他想法。有关如何解决这个问题的任何建议?

回答

0

基本上任何一种猜测方法都是不可靠的。你可以确保你的系统有足够的内存空间,并且设置一些足够大的限制,你声明的限制不应超过。

如果一切都失败了,你总是可以做不可思议的,写

int[] intBuf = null; 
try { 
    intBuf = util.getAbgrRect(page, x, y, w, h, wPix, hPix); 
} catch(OutOfMemoryError e) { 
    // abort processing 
} 

这不是很漂亮,但它会工作。小心一点。