memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

Tess4Jをお試し

GoogleOCRソフトウェアです。

Javaで使いたく。以下、動かした手順メモです。動作環境はOSX10.11.2です。

brewで本体を入れます。

brew install tesseract

ライブラリ自体はc++らしく、Javaで利用できるラッパーを作ってくれた偉い方がいます。ありがたく使わせていただきます。

Tess4J - JNA wrapper for Tesseract

まず、ターミナルでコマンドが動くか確認します。コマンドで動かなければプログラムからも動かない(はず)。

Tess4Jフォルダの中にサンプル画像(eurotext.png)がありますので、そこでターミナルを開き、以下のコマンドを入力します。result.txtというファイルが作成されて認識結果が書き込まれます。

tesseract eurotext.png result

で、このときにエラーが出る場合があるかもしれません。私は出ました(が、翌日やったら出なかった、意味不明)。以下の環境変数を追加します。私はzshなので.zprofileに追加しました。

export TESSDATA_PREFIX="/usr/local/Cellar/tesseract/3.04.00/share"

で、準備ができたのでEclipseを起動しJavaプロジェクトを作成します。

次に、Tess4Jフォルダ内のdistとlibにあるjarをEclipseのプロジェクトに追加します。

ちなみにビルド上は全部は必要ないようですが、実行時にエラーがでるので追加します(→これでclasspathに追加されるため)。もしくは/Library/Java/Extensionsに入れちゃえばいいのかもしれません。

以下のクラスを作成して実行します。認識させたい画像ファイルは適当に各自で用意してJavaプロジェクト直下に配置しましょう。ちなみにこのサンプルは以下のサイトを参考にしました。

Development with Tess4J in NetBeans, Eclipse, and Command-line

import java.io.File;
import net.sourceforge.tess4j.*;

public class TesseractExample {

    public static void main(String[] args) {
        File imageFile = new File("a.png");
        ITesseract instance = new Tesseract();
        instance.setDatapath(System.getenv("TESSDATA_PREFIX"));
        
        try {
            String result = instance.doOCR(imageFile);
            System.out.println(result);
        } catch (TesseractException e) {
            System.err.println(e.getMessage());
        }
    }
}

原理も仕組みもよくわからず、とりあえず動かすことを優先した手順ですので、間違っているかもしれません。そのときは各自で修正してください。