読者です 読者をやめる 読者になる 読者になる

Xcode 7.0 + Swift2 でTesseract-OCR-iOSを使う(追記あり)

過去記事のXcode 7対応版です。※実機で動かす場合の注意を末尾に追加。

a244.hateblo.jp

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を組み込む

f:id:atuyosi:20151013000552j:plain

公式ドキュメントにはlibz.dylibを追加しろと書いてあるが、Xcode 7からdylibではなくtbdというファイルを介して読み込むようになった模様

なので素直にlibz.tbdを追加する。

  1. Project NavigatorからPods というプロジェクトを選択し、TesseractOCRiOSというターゲットをクリックする。
  2. 画面の下の方に"Linked Frameworks and Libraries"というカテゴリがあるので、下部の”+”アイコンをクリックする。
  3. ダイアログが表示されるので検索ボックスにlibzと入力して絞り込む。
  4. lib.tbdが表示されるはずなので、これを選択、”Add”をクリックする。

f:id:atuyosi:20151012234252p:plain

tessdataのインポート

必要な言語のlang.traineddataを用意する。 日本語の言語データについては冒頭で参照している過去のエントリも参考にしてください。

  1. 適当な場所にtessdataというフォルダを作り、Tesseract-ocrの言語データを展開しておく。
  2. Finderでtessdataのあるフォルダを表示しておく。
  3. FinderのウィンドウからtessdataフォルダをXcodeのプロジェクトの直下または対象アプリのターゲット直下にドラッグアンドドロップする。

    f:id:atuyosi:20151013001011j:plain

  4. ポップアップが表示されるので”Copy if needed”にチェックを入れ、"Folder References"を作る。

    f:id:atuyosi:20151012235204p:plain

  5. 最終的にこんな感じで青色のフォルダができていれOK。中身はjpn.traineddataとか各種言語データ。

    f:id:atuyosi:20151012234957p:plain

サンプルコード(他力本願で)

下記にちょうどいいサンプルがあるので参考にする。というか、コピペしてちょっと修正するだけでひとまず動くはず。他力本願ですいません。

qiita.com

必要な作業は

  • 文字の入った画像ファイルを用意する
  • ViewController.swiftを修正
    • import TesseractOCRの追加
    • printlnprint文にする
  • 上記サンプルだと一箇所警告が出るので気になる場合はvar tesseract =という箇所をlet tesseract = にすればいい。

デバッグログにOCR結果が出力されるはず。

[2015/10/15] 追記

実機の場合は、プロジェクトナビゲーターから[Build Settings] -> [Build Options] の"Enable Bitcode" を"No"にしないとリンカがエラーを吐きます。 Podsプロジェクト内のTesseractOCRiOSターゲット、並びにアプリ側の両方で設定する必要あり。

参考URL


P.S. 気分転換にブログテーマを変えてます。あしからず。