문제

Java Application Server에서 Tesseract OCR (광학 문자 인식을 수행하는 C ++의 오픈 소스 라이브러리)을 호출해야합니다. 지금은 runtime.exec ()를 사용하여 실행 파일을 실행하기에 쉽습니다. 기본 논리는 일 것입니다

  1. 현재 메모리에 고정 된 이미지 저장 파일 (a .tif)
  2. 이미지 파일 이름을 TesserAct 명령 줄 프로그램으로 전달하십시오.
  3. Filereader를 사용하여 Java의 출력 텍스트 파일을 읽으십시오.

TesserAct를 위해 JNI 래퍼를 작성함으로써 성능면에서 얼마나 많은 개선을 얻을 수 있습니까? 불행히도 Linux에서 작동하는 오픈 소스 JNI 래퍼는 없습니다. 나는 직접해야 할 것이고 혜택이 개발 비용의 가치가 있는지 궁금합니다.

도움이 되었습니까?

해결책

그만한 가치가 있는지 말하기는 어렵습니다. JNI를 통해 프로세스를 수행 한 경우 OCR 코드가 파일에 쓰지 않고도 이미지 데이터에 직접 액세스 할 수 있다고 가정하면 디스크 I/O 제약 조건을 제거 할 수 있습니다.

더 간단한 접근 방식을 사용하고 성능이 허용되지 않는 경우 JNI 옵션 만 수행하는 것이 좋습니다. 적어도 벤치마킹을 수행하고 실현할 수있는 성능 향상을 추정 할 수 있습니다.

다른 팁

자신의 래퍼를 추구하는 경우 체크 아웃하는 것이 좋습니다. JNA. Java 코드 만 작성하는 대부분의 "기본"라이브러리를 호출 할 수 있으며 Raw JNI가 안전하게 수행하는 것보다 더 많은 도움을 줄 것입니다. JNA는 대부분의 플랫폼에서 사용할 수 있습니다.

조정에 동의합니다. 이를 수행해야 할 이유가 없으면 JNI를 사용하지 마십시오. JNI 레이어 또는 OCR 자체에 메모리 누출이 있거나 심지어 충돌 가능성이있는 경우 JNI 호출을 사용하는 경우 응용 프로그램 안정성이 위험에 처할 수 있습니다. 명령 줄 인터페이스를 통해 사용하는 경우에는 결코 발생하지 않습니다 (모든 메모리는 프로그램 출구에서 릴리스되며 모든 비정상적인 프로그램 종료는 발신자 코드에서 확인할 수 있음).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top