Xcode 7.0 + Swift2 でTesseract-OCR-iOSを使う(追記あり)
スポンサーリンク
過去記事のXcode 7対応版です。
※実機で動かす場合の注意を末尾に追加。
cocoapods で環境構築。前提はXcode 7.0.1、Swift 2。
新規プロジェクトを作ることを前提にします。
Podfile の作成
注意点としては、
- 確実にXcodeを終了しておく
- デフォルトでインストールされているrubyを使う
cocoapods 側はOS標準のrubyを使うことを推奨していたはずなので。
プロジェクトのルートフォルダへ移動し、Xcodeを終了させておく。
pod init
Podfileを編集する。2行目、4行目のコメントを外す。platformのiosバージョンはサポート対象に合わせて変更。 Tesseract-OCR-iOSの安定板(4.0.0)ではうまくビルドできないので、開発版を用いる。 逆に言うと、Swift 1.2とXcode 6.3の組み合わせなら安定板で良い。
# Uncomment this line to define a global platform for your project platform :ios,'8.0' # Uncomment this line if you're using Swift use_frameworks! target 'MyOCR' do pod 'TesseractOCRiOS', :git => 'https://github.com/gali8/Tesseract-OCR-iOS.git', :branch => 'master' end target 'MyOCRTests' do end target 'MyOCRUITests' do end
みんな書いてるけど、BridgingHeaderはいらない。
import TesseractOCR
とすれば問題なく動作する。初回のコンパイルが通るまでは警告が出るかもしれないが、一回Frameworkのビルドが完了すれば出なくなる。
Xcode側の設定
Workspaceを開く
アプリ名.xcworkspace
というフォルダができているはずなので、open
コマンドで開けばいい。
libz.tbdを組み込む
公式ドキュメントにはlibz.dylib
を追加しろと書いてあるが、Xcode 7からdylib
ではなくtbd
というファイルを介して読み込むようになった模様
なので素直にlibz.tbd
を追加する。
- Project NavigatorからPods というプロジェクトを選択し、TesseractOCRiOSというターゲットをクリックする。
- 画面の下の方に"Linked Frameworks and Libraries"というカテゴリがあるので、下部の”+”アイコンをクリックする。
- ダイアログが表示されるので検索ボックスにlibzと入力して絞り込む。
lib.tbd
が表示されるはずなので、これを選択、”Add”をクリックする。
tessdataのインポート
必要な言語のlang.traineddata
を用意する。
日本語の言語データについては冒頭で参照している過去のエントリも参考にしてください。
- 適当な場所にtessdataというフォルダを作り、Tesseract-ocrの言語データを展開しておく。
- Finderでtessdataのあるフォルダを表示しておく。
FinderのウィンドウからtessdataフォルダをXcodeのプロジェクトの直下または対象アプリのターゲット直下にドラッグアンドドロップする。
ポップアップが表示されるので”Copy if needed”にチェックを入れ、"Folder References"を作る。
最終的にこんな感じで青色のフォルダができていれOK。中身は
jpn.traineddata
とか各種言語データ。
サンプルコード(他力本願で)
下記にちょうどいいサンプルがあるので参考にする。というか、コピペしてちょっと修正するだけでひとまず動くはず。他力本願ですいません。
必要な作業は
- 文字の入った画像ファイルを用意する
- ViewController.swiftを修正
import TesseractOCR
の追加println
をprint
文にする
- 上記サンプルだと一箇所警告が出るので気になる場合は
var tesseract =
という箇所をlet tesseract =
にすればいい。
デバッグログにOCR結果が出力されるはず。
[2015/10/15] 追記
実機の場合は、プロジェクトナビゲーターから[Build Settings] -> [Build Options] の"Enable Bitcode" を"No"にしないとリンカがエラーを吐きます。 Podsプロジェクト内のTesseractOCRiOSターゲット、並びにアプリ側の両方で設定する必要あり。
参考URL
- Installation · gali8/Tesseract-OCR-iOS Wiki · GitHub
- 【Swift】文字認識ライブラリ、TesseractOCR for iOSを試してみた - Qiita
P.S. 気分転換にブログテーマを変えてます。あしからず。