2017-12-15 26 views
-2

javaの画像でtesseractを使用してOCRを実行しようとしています。私はTess4Jのような包括的な機能と素材を提供するラッパーがあることを認識していますが、私はそれを正しく設定するのに苦労しています。ランタイムで1行のコマンドを実行するだけで、私はちょっと個人的な小さなプロジェクトであり、他のコンピュータや何かで作業する必要がないので、私はとにかく必要です。端末から実行したときに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は自家製でインストールされていたので、Javaファイルはいずれのディレクトリにも置かれていません。 – sc8ing

+0

したがって、どちらの場合も、Tesseractバイナリは、システムのPATH変数を介して配置されるはずですか?野生の推測として - あなたのIDEを再起動します。あなたのIDEを起動した後にTesseractをインストールした場合、起動後に起こったPATHのアップデートは受け付けられません。 –

+0

これは問題ではないようです。また、PATH変数から生じる可能性のある問題を排除するために、私はcmd文字列をバイナリへのフルパスに置き換えました。 – sc8ing

関連する問題