2017-02-17 68 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 
} 

這不是很漂亮,但它會工作。小心一點。