3

Java アプリケーション サーバーから tesseract OCR (光学式文字認識を行う C++ のオープン ソース ライブラリ) を呼び出す必要があります。現在、Runtime.exec() を使用して実行可能ファイルを実行するのは簡単です。基本的なロジックは

  1. 現在メモリに保持されているイメージをファイル (.tif) に保存します。
  2. イメージ ファイル名を tesseract コマンド ライン プログラムに渡します。
  3. FileReader を使用して Java から出力テキスト ファイルを読み込みます。

Tesseract 用の JNI ラッパーを作成することで、パフォーマンスがどの程度向上する可能性がありますか? 残念ながら、Linux で動作するオープン ソースの JNI ラッパーはありません。私は自分でそれをしなければならず、その利益が開発コストに見合うかどうか疑問に思っています.

4

3 に答える 3

4

それが価値があるかどうかを言うのは難しいです。JNIを介してインプロセスで実行された場合、OCRコードはファイルに書き込むことなく画像データに直接アクセスできると想定すると、ディスクI/Oの制約が確実に解消されます。

より単純なアプローチを採用し、パフォーマンスが許容できない場合にのみJNIオプションを実行することをお勧めします。少なくとも、ベンチマークを実行して、実現できる可能性のあるパフォーマンスの向上を見積もることができます。

于 2009-01-23T05:29:56.487 に答える
4

独自のラッパーを追求する場合は、JNAを確認することをお勧めします。これにより、Java コードのみを記述したほとんどの「ネイティブ」ライブラリを呼び出すことができ、生の JNI よりも安全に呼び出すことができます。JNA は、ほとんどのプラットフォームで使用できます。

于 2009-01-23T07:07:00.427 に答える
1

私はtweaktに同意します。これを行うパフォーマンス上の理由がない場合は、JNI を使用しないでください。JNI 呼び出しを使用すると、JNI レイヤーまたは OCR 自体でメモリ リークやクラッシュが発生する可能性がある場合、アプリケーションの安定性も危険にさらされる可能性があります。コマンド ライン インターフェイスを介して使用する場合、これは決して起こりません (すべてのメモリはプログラムの終了時に解放され、すべての異常なプログラムの終了は呼び出し元のコードでチェックできます)。

于 2009-01-23T06:28:58.287 に答える