iOSで日本語OCR!ビルド編〜iOS SDK 6.1 + tesseract-ocr 3.02〜
最近iOSでOCR(Optical Character Recognition:工学文字認識)をしたいとの声をよく耳にするので調査してみました。
オープンソースのOCRエンジン「tesseract-ocr」
オープンソースで日本語に対応したOCRエンジンを探してみると、tesseract-ocrなるものを見つけました。このtesseract-ocrですが、Google先生が開発を支援していると噂のオープンソースのOCRエンジンで、C++で書かれています。また、英語、日本語だけでなく多数の言語にも対応しています。ライセンスはApache License 2.0です。ちなみに読み方は「テッサラクトOCR」だそうです。
tesseract-ocrではiOSで簡単に利用できる形式では配布しておりませんが、C++で書かれているので当然Objective-Cでも使うことが出来ます。iOSでtesseract-ocrを動作させるにはiOS SDK用にビルドしてやる必要があります。iOS SDK用にビルドする方法はHow To: Compile and Use Tesseract (3.01) on iOS (SDK 5) | Just 4 FunやCompile tesseract for iOS SDK 6.0 – Code-Itで詳しく書かれています。しかし、これらの記事ではiOS SDK 6.1やtesseract-ocrの最新バージョンである3.02(2013/5/13時点)に対応していません。
この記事ではHow To: Compile and Use Tesseract (3.01) on iOS (SDK 5) | Just 4 FunやCompile tesseract for iOS SDK 6.0 – Code-Itを参考にiOS SDK6.1で動作するtesseract-ocr3.02のビルド方法を書きたいと思います。
tesseract-ocrのビルド
ビルドの準備
Homebrewでlibtoolとautomakeをインストールする
tesseract-ocrをビルドするにはlibtoolとautomakeが必要らしいのでインストールしましょう。この2つをインストールするにはHomebrewを使うのが早いです。Homebrewをインストールされていない方はHomebrew — MacPorts driving you to drink? Try Homebrew!を参考にインストールしておきましょう。
Homebrewをインストールしたら、Homebrewを使ってlibtoolとautomakeをインストールしましょう。この2つをインストールするには以下のコマンドを実行します。
$ brew install libtool automake
XcodeのCommand Line Toolsをインストール
XcodeのCommand Line Toolsをインストールしておきます。XcodeのPreferencesを開きDownloadタブをクリックして、Componentsの中にあるCommand Line Toolsをインストールしておきましょう。
libtoolizeのシンボリックリンクを作る
tesseract-ocrのビルドでlibtoolzieが必要になるらしいので、glibtoolizeのシンボリックリンクとしてlibtoolizeを作成しましょう。
$ ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize
必要なファイルのダウンロード
以下のソースをダウンロードします。
- tesseract-ocr-3.02.02.tar.gz
- http://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.02.tar.gz
- leptonica-1.69.tar.gz
- http://leptonica.googlecode.com/files/leptonica-1.69.tar.gz
- build_dependencies.sh
- http://goo.gl/wQea5
Leptonicaは画像解析ライブラリで、tesseract-ocrを使用するのに必要なライブラリです。
ビルド用のディレクトリを作成
ソースコードをビルドするためのディレクトリを作成します。場所はどこでもいいのでtesseract-iOS6.1-buildディレクトリを作成しましょう。
ディレクトリを作成したら、その中に先ほどダウンロードしたファイルを解凍してできたディレクトリを以下のように配置します。
- tesseract-iOS6.1-build/
- tesseract-ocr/
- leptonica-1.69/
- build_dependencies.sh
ビルド用シェルスクリプトbuild_dependencies.shの修正
tesseract-ocrをビルドするためのシェルスクリプトbuild_dependencies.shですが、このままだとiOS6.1やtesseract3.02に対応できないので修正します。
build_dependencies.sh:9、10行目(変更前)
IOS_BASE_SDK="6.0" IOS_DEPLOY_TGT="6.0"
build_dependencies.sh:9、10行目(変更後)
IOS_BASE_SDK="6.1" IOS_DEPLOY_TGT="5.1"
build_dependencies.sh:164行目付近(変更前)
tess_inc=( api/apitypes.h api/baseapi.h ccmain/thresholder.h ccstruct/publictypes.h ccutil/errcode.h ccutil/genericvector.h ccutil/helpers.h ccutil/host.h ccutil/ndminx.h ccutil/ocrclass.h ccutil/platform.h ccutil/tesscallback.h ccutil/unichar.h )
build_dependencies.sh:164行目付近(変更後)
tess_inc=( api/apitypes.h api/baseapi.h ccmain/thresholder.h ccstruct/publictypes.h ccutil/errcode.h ccutil/genericvector.h ccutil/helpers.h ccutil/host.h ccutil/ndminx.h ccutil/ocrclass.h ccutil/platform.h ccutil/tesscallback.h ccutil/unichar.h ccmain/pageiterator.h ccmain/resultiterator.h ccmain/ltrresultiterator.h ccutil/unicharset.h ccutil/strngs.h ccutil/memry.h ccutil/unicharmap.h )
ビルド!
これでtesseract-ocrをiOS用にビルドする準備が整いました。それではターミナルを開き、tesseract-iOS6.1-buildに移動して以下のコマンドを実行しましょう。
$ sudo sh ./build_dependencies.sh
これが結構時間がかかるのでしばらく放置。終了したらtesseract-iOS6.1-buildディレクトリの中を確認してください。 するとdependenciesディレクトリが作成されているはずです。このディレクトリの中身が以下のようになっていればビルド成功です。
- tesseract-iOS6.1-build/
- tesseract-ocr/
- leptonica-1.69/
- build_dependencies.sh
- dependencies/
- inclide/
- leptonica/(leptonicaのヘッダファイル群)
- tesseract/(tesseract-ocrのヘッダファイル群)
- lib/(生成された静的ライブラリ。liblept.aとlibtesseract_all.aがあることを確認)
- liblept.a
- libtesseract_all.a
- ・・・
- inclide/
次回:tesseract-ocrを使用したサンプルアプリを作ってみよう!
今回はtesseract-ocr3.02をiOS SDK6.1用にビルドしました。次回は生成したライブラリを使用してサンプルアプリを作ってみましょう!