search
LoginSignup
22
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Androidの OCRライブラリ tess-two (導入編)

tess-twoとは

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の中身をコピーする。
    スクリーンショット_2014-12-05_16_52_05.png

  • jni/Android.mkを作る。
    共有ライブラリをコピーするためのもの。

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→Libraryでtess-twoへの依存関係を追加する。
    スクリーンショット 2014-12-05 16.34.55.png

  • Java Build Path → Librariesでtess-two/bin/tess-two.jarを追加する。
    スクリーンショット 2014-12-05 16.56.48.png

  • Order and Exportのtess-two.jarへのチェックは付けなくていい(この理由がよく分からないが)
    スクリーンショット 2014-12-05 16.56.56.png

テストの実行

Android JUnit Testで tess-two-testを動かす。

一回目の実行結果:

スクリーンショット_2014-12-05_17_06_21.png

最後で失敗している。エラーメッセージを確認。

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で配布されている。それを指定の場所に入れて再テスト。

スクリーンショット_2014-12-05_17_13_41.png

オールグリーン。

しかしテストの結果を見れば分かることだけど tess-two-testの中身は大半が空っぽ。最後のテストだけが OCRに関係している。

次回予定

カメラとの連携はともかく、静止画と範囲を指定してアルファベットの認識くらいはできるようになりたい。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
22
Help us understand the problem. What are the problem?