tess-twoとは
OCRライブラリ Tesseract-OCRを Android NDKに対応したもの。Tesseract-OCRは HP Labで作られ、現在 Googleがプロジェクトを引き継いでいる。
これを使えば Androidでテキストにカメラをかざすことでそのテキストを読み取るアプリケーションを書けるようになるはず。
入手とビルド
以下、自分の作業記録。開発環境は Yosemite(10.10.1)。
展開すると2つのプロジェクト(tess-two, eyes-two)とテスト(tess-two-test)を確認できる。eyes-twoはOCRに必要なさそうなので今回は手を付けない。
tess-two
cd tess-two
ndk-build
android update project --path .
ant release
ビルドはかなり時間がかかる。
% tess-two-master/tess-two » ndk-build
[armeabi] Compile thumb : lept <= adaptmap.c
[armeabi] Compile thumb : lept <= affine.c
[armeabi] Compile thumb : lept <= affinecompose.c
...
[mips] Compile++ : tess <= resultiterator.cpp
[mips] Compile++ : tess <= tessbaseapi.cpp
[mips] SharedLibrary : libtess.so
[mips] Install : libtess.so => libs/mips/libtess.so
% tess-two-master/tess-two » android update project --path .
Updated local.properties
Added file ./proguard-project.txt
% tess-two-master/tess-two » ant release
Buildfile: /Users/nunocky/tmp/tess-two-master/tess-two/build.xml
...
BUILD SUCCESSFUL
Total time: 1 second
※ antは homebrewで入れた。
tess-two-testを試す
使い方がわからないので、とりあえず同梱されている tess-two-testを動かしてみることにする。
eclipseの「File->Import->Existing Projects into Workspace」で tess-two, eyes-two, tess-two-testをインポートする。
-
tess-two-testにディレクトリ jni/externalを作り、その下に tess-two/libの中身をコピーする。
-
jni/Android.mkを作る。
共有ライブラリをコピーするためのもの。
include $(CLEAR_VARS)
LOCAL_MODULE := liblept
LOCAL_SRC_FILES := external/$(TARGET_ARCH_ABI)/$(LOCAL_MODULE)$(TARGET_SONAME_EXTENSION)
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libtess
LOCAL_SRC_FILES := external/$(TARGET_ARCH_ABI)/$(LOCAL_MODULE)$(TARGET_SONAME_EXTENSION)
include $(PREBUILT_SHARED_LIBRARY)
tess-two-testのプロパティ設定
-
Java Compilerは 1.6を指定。 1.7だとビルドできない。
テストの実行
Android JUnit Testで tess-two-testを動かす。
一回目の実行結果:
最後で失敗している。エラーメッセージを確認。
junit.framework.AssertionFailedError: Make sure that you've copied eng.traineddata to /mnt/sdcard/tesseract/tessdata/eng.traineddata
at com.googlecode.tesseract.android.test.TessBaseAPITest.testGetUTF8Text(TessBaseAPITest.java:94)
...
再テスト
eng.traineddataは プロジェクトのWebで配布されている。それを指定の場所に入れて再テスト。
オールグリーン。
しかしテストの結果を見れば分かることだけど tess-two-testの中身は大半が空っぽ。最後のテストだけが OCRに関係している。
次回予定
カメラとの連携はともかく、静止画と範囲を指定してアルファベットの認識くらいはできるようになりたい。