2017-02-17 2 views
0

tesseract를 통해 pdf/이미지를 실행하고 dpi가 높을수록 결과가 더 좋습니다. 나는 tesseract를 sparse_text의 페이지 분할 모드에서 사용하고 있으므로 전체 pdf를 tesseract 엔진에 공급할 때 전체를 조사해야합니다.요청한 이미지 해상도가 메모리 부족 예외를 throw하지 않도록하는 방법

어도비 PDF SDK를 사용하여 PDF에서 이미지를 가져 와서 tesseract에 넣습니다. 문제는 때로는 메모리 부족 오류가 발생한다는 것입니다. 내가 요청 매개 변수 x = 0, y = 0, w = 1, h = 1, wPix = 300 dpi * length of drawing, hPix 300 dpi * height of drawing있다 (좌표계를 정규화) 대부분의 경우

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

를 호출하고 있습니다. 이후 나는 사용자의 프로그램에 입력되는 pdf의 크기를 모르기 때문에 요청한 wPix 및 hPix가 사용 가능한 메모리 양에 비해 너무 많지 않은지 확인하기 위해 일부 유형의 검사를 수행해야합니다. pdf SDK.

나는이 문제를 해결하는 방법에 대해 조금 확신 할 수 없다. 가능한 한 메모리/자바 힙 크기를 확인하고 어떻게 든 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 
} 

을 작성할 수 있습니다, 실패했지만 작동합니다. 조심해.