話題の記事

iOSで日本語OCR!ビルド編〜iOS SDK 6.1 + tesseract-ocr 3.02〜

2013.05.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

最近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 FunCompile 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 FunCompile tesseract for iOS SDK 6.0 – Code-Itを参考にiOS SDK6.1で動作するtesseract-ocr3.02のビルド方法を書きたいと思います。

tesseract-ocrのビルド

ビルドの準備

Homebrewでlibtoolとautomakeをインストールする

tesseract-ocrをビルドするにはlibtoolautomakeが必要らしいのでインストールしましょう。この2つをインストールするにはHomebrewを使うのが早いです。Homebrewをインストールされていない方はHomebrew — MacPorts driving you to drink? Try Homebrew!を参考にインストールしておきましょう。

Homebrewをインストールしたら、Homebrewを使ってlibtoolautomakeをインストールしましょう。この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
        • ・・・

次回:tesseract-ocrを使用したサンプルアプリを作ってみよう!

今回はtesseract-ocr3.02をiOS SDK6.1用にビルドしました。次回は生成したライブラリを使用してサンプルアプリを作ってみましょう!

参考