2016-06-15 2 views
0

Java 응용 프로그램에서 Tess4j 3.0.0과 Tesseract 3.04를 사용하고 있습니다. 내 응용 프로그램에서 Runnable을 구현하는 OCR 용 서비스를 만들었습니다.Tess4j가 설치된 Tesseract 3.0이 Linux 서버에서 응용 프로그램을 크래킹합니다.

응용 프로그램은 코드 아래

서비스에 CentOS의 6에 배포됩니다.

사용자의 요청에 따라 문서 업로드 서비스에서 OCR 서비스의 스레드를 시작하고 PDF의 텍스트 데이터를 처리합니다.

단일 요청 코드를 테스트 할 때 완벽하게 작동합니다. 문제 : 한 번에 둘 이상의 요청을 보내면 전체 응용 프로그램이 충돌합니다.

아래는 내가 서비스에 디버거를 넣어 응용 프로그램을 실행 catalina.out

# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# SIGSEGV (0xb) at pc=0x00007f9514000078, pid=12979, tid=140277704374016 
# 
# JRE version: Java(TM) SE Runtime Environment (8.0_74-b02) (build 1.8.0_74-b02) 
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.74-b02 mixed mode linux-amd64 compressed oops) 
# Problematic frame: 
# C 0x00007f9514000078 
# 
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again 
# 
# An error report file with more information is saved as: 
# //hs_err_pid12979.log 
# 
# If you would like to submit a bug report, please visit: 

에서 오류가 발생, 모든 것이 잘 작동합니다. 서비스에서 Tesseract1

@Bean 
public Tesseract1 tesseract() { 
    return new Tesseract1(); 
} 

에 대한

+0

이미지를 시도해보고 이미지에 대해 동일한 유형의 문제가 발생하는지 확인할 수 있습니까? 이것은 내부적으로 Tess4j에서 사용되는 Ghost4j와 관련된 문제인 것 같습니다. 코어 덤프를 활성화하고 해당 덤프에 대한 자세한 정보를 게시 할 수 있습니까? 'hs_err_pid12979.log'를 게시하십시오. 이것이 Ghost4j와 관련된 경우 Ghost4j는 멀티 스레딩을 지원하지 않으므로 처리 과정을 동기화해야합니다. –

+0

감사합니다. @ sangram-jadhav. 실제로 Ghost4j에 문제가있었습니다. 지금은 Tesseract 코드를 동기화 된 블록 안에 넣었습니다. 나는 나중에 큐를 구현할 것이다. 위의 코드를 멀티 스레드 환경에서 작업하면서 응용 프로그램을 손상시키지 않고 편집했습니다. 몇 가지 다른 이유 때문에이 코드 조각이 스레드에 필요했습니다. –

답변

0

만들 콩 :

@Autowire 
private Tesseract1 instance; 

자동으로 묶어 정팔 포체는

이제
syncrhonized(instance){ 
    String result = instance.doOCR(imageFile); 
    //other stuff 
} 

서비스 스레드 응용 프로그램을 충돌없이 실행됩니다 동기화 블록 내부 doOcr 방법을 넣어.

참고 : 동시 문서 요청을 위해 동시 OCR이 삭제됩니다.

+0

답을 고맙습니다. 직접 내부에 Tesseract 인스턴스가있는 빈을 만드는 방법을 자세히 설명해 주시겠습니까? 감사 –

관련 문제