2017-12-15 13 views
-2

java의 이미지에서 tesseract를 사용하여 OCR을 수행하려고합니다. 나는 더 많은 기능과 물건을 제공하는 Tess4J와 같은 래퍼가 있다는 것을 알고 있지만 제대로 설정하기 위해 고심하고있다. Runtime으로 한 줄짜리 명령을 실행하는 것만으로도 개인용 프로젝트이므로 다른 컴퓨터 나 다른 컴퓨터에서 작업 할 필요가 없습니다.터미널에서 실행할 때 Eclipse가 실행될 때 런타임 exec 명령이 작동합니다.

가 컴파일 터미널에서 직접 실행할 것
import java.io.IOException; 

public class Test { 
    public static void main(String[] args) { 
     System.out.println(scan("full-path-to-test-image")); 
    } 
    public static String scan(String imgPath) { 
     String contents = ""; 
     String cmd = "[full-path-to-tesseract-binary] " + imgPath + " stdout"; 
     try { contents = execCmd(cmd); } 
     catch (IOException e) { e.printStackTrace(); } 
     return contents; 
    } 
    public static String execCmd(String cmd) throws java.io.IOException { 
     java.util.Scanner s = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A"); 
     return s.hasNext() ? s.next() : ""; 
    } 
} 

, 그것은 완벽하게 작동합니다 :

나는이 코드를 가지고있다.

java.io.IOException: Cannot run program "tesseract": error=2, No such file or directory

무슨 일이야 : 나는 일식에 동일한 파일을 열 때, 그러나, IOException를 준다? 어떤 도움을 주셔서 감사합니다.

+0

"현재 디렉토리"및 "상대 경로"의 개념에 익숙해지기를 원할 것입니다. 이는 Java 개념이 아니라 기본적인 파일 시스템 개념입니다. – VGR

+0

나는 당신이 무엇을 제안하고 있는지 완전히 모릅니다. Tesseract는 프로그램이 터미널이나 eclipse에서 직접 실행될 때 현재 디렉토리/작업 디렉토리에 없으며 명령 행에있을 때 현재 디렉토리와 상관없이 명령이 작동합니다. – sc8ing

+0

출력을 잘못 해석했을 수 있습니다. 나는 그것을 tesseract 자체가 당신의 파일을 찾을 수 없다는 의미로했다. 그러나 나는 틀릴 수도 있습니다. Eclipse가 터미널 쉘과 다른 PATH 환경 변수를 가진 환경에서 실행 중일 수 있습니다. – VGR

답변

1

Eclipse의 Test 클래스에 대한 실행 구성에서 작업 폴더를 확인하십시오. 터미널에서 같은 프로그램을 실행할 때와는 다른 것입니다.

+0

나는 그것들을 동일하게 설정했지만 행운은 없다. Tesseract는 homebrew와 함께 설치되었으므로 Java 파일이 어쨌든있는 디렉토리 중 하나에 있지 않습니다. – sc8ing

+0

그럼 두 경우 모두 Tesseract 바이너리는 시스템 PATH 변수를 통해 위치해야합니까? 야생 추측으로 - IDE를 다시 시작하십시오. IDE를 시작한 후에 Tesseract를 설치했다면, 시작한 후에 일어난 PATH에 대한 업데이트를받지 못합니다. –

+0

그게 문제가 아닌 것 같습니다. 또한 PATH 변수에서 발생할 수있는 문제를 제거하기 위해 cmd 문자열을 이진 경로의 전체 경로로 바꿨습니다. – sc8ing