iPhone で OCR したいなと思って調べたら Tesseract-OCR というのがメジャーらしい。で、それを iOS で使えるようにしたのが Tesseract-OCR-iOS。ネット上に情報も多そうだしサクっと使えるんじゃないかな?と思ってとりあえずやってみたのでメモ。
確認した環境
今回やってみた環境は以下の通り
- macOS High Sierra 10.13.15
- Xcode 9.4.1
- iPhone 7
- iOS 11.4
そして参考にしたサイトは以下のサイト
チュートリアルになっているのでこのサイトの手順に従ってサンプルを動かしてみた。
準備
Tesseract-OCR をビルドするのに cocoapods を使うらしいのでまずはインストール。
$ sudo gem install cocoapods $ pod setup Setting up CocoaPods master repo $ /usr/bin/git clone https://github.com/CocoaPods/Specs.git master --progress Cloning into 'master'... remote: Counting objects: 2236694, done. remote: Compressing objects: 100% (410/410), done. remote: Total 2236694 (delta 188), reused 35 (delta 35), pack-reused 2236238 Receiving objects: 100% (2236694/2236694), 548.14 MiB | 358.00 KiB/s, done. Resolving deltas: 100% (1280792/1280792), done. Setup completed
これ、pod setup にすっごく時間がかかった!
けど何の問題もなく終了。
Tesseract-OCR のインストール
まずはチュートリアルのページにあるリンクからサンプルをダウンロードして展開。
中にはサンプルのプロジェクトが入ってるフォルダ LoveInASnap、画像データの入ってるフォルダ Images、そして Tesseract-OCR のデータが入ってる tessdata フォルダが含まれている。
次に LoveInASnap フォルダの中にある LoveInASnap.xcodeproj をダブルクリックして開く。
するとインターネットでダウンロードしたプロジェクトだけど開くかどうかを聞かれるので「Open」でプロジェクトを開く。
無事にプロジェクトが開けることを確認したら Xcode は一旦終了。
ターミナルを起動して LoveInASnap.xcodeproj ファイルのあるフォルダへ移動してそこで pod の準備をする。
$ pod init $ ls LoveInASnap LoveInASnapTests LoveInASnap.xcodeproj Podfile
pod init コマンドで Podfile ファイルが出来上がったのを確認したら、適当なエディタで Podfile を開いて内容を下記の通りに書き換える。
use_frameworks! platform :ios, '11.0' target 'LoveInASnap' do use_frameworks! pod 'TesseractOCRiOS' end
書き換えたらまたターミナルに戻って pod install して TesseractOCRiOS をインストール!
$ pod install Analyzing dependencies Downloading dependencies Installing TesseractOCRiOS (4.0.0) Generating Pods project Integrating client project [!] Please close any current Xcode sessions and use `LoveInASnap.xcworkspace` for this project from now on. Sending stats Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
このインストールは拍子抜けするくらいにサックリと終了。
Xcode で Tesseract-OCR を使う準備
cocoapods が作ってくれた LoveInASnap.xcworkspace をダブルクリックして再度 Xcode を起動する。(LoveInASnap.xcodeproj で起動しないように注意。)
そして Xcode の Project Navigator にある Supporting Files フォルダへ、先ほど展開したサンプルのフォルダに入っている tessdata フォルダをドラッグ&ドロップでコピー。
ここで表示されるダイアログでは「Copy items if needed」にチェックを入れておくのをわすれずに。
次に General タブの一番下にある Linked Frameworks and Libraries を確認。
今は「Pods_LoveInASnap.framework」だけが表示されているはず。
ここで「+」ボタンをクリックして libstdc++.tbd、CoreImage.framework、TesseractOCR.framework を加える。
次は Xcode の Project Navigator で LoveInASnap を選択して Target でも LoveInASnap を選ぶ。
そして Build Settings タブを選択して検索窓に「Enable Bitcode」を入れて表示される Enable Bitcode を NO にする。
次に検索窓に「C++Standard Library」と入力して表示される画面で「Compiler Default」になっているのを確認する。
同じことを今度は Project Navigator の Pods を選択して Target で TesseractOCRiOS を選択して行う。
これで、Tesseract-OCR を使う準備が整った。
コードの入力とその他の設定
あとはチュートリアルページに従って ViewController.swift にコードを書き足して、info.plist にカメラとアルバムにアクセスするプロパティを加え、実機で動作確認するならば code sign を加えれば終了。
この辺りは TesseractOCRiOS に関することではないので省略。
これで command+b でビルドすると問題なくビルドできました。
そしてアプリを起動してサンプルについてきた画像を文字認識させると、ちゃんと文字認識して iPhone の画面にテキストとして表示されました!
というわけで、チュートリアルは問題なく終了〜
ちなみに、もしもビルド時にリンカがエラーを出していたなら、それは Enable Bitcode が YES になっているからかもしれません。
私はそれでビルド時にリンクエラーを出しました!
最後に
今回、一番の難所だったのは cocoapods の使い方。
かな〜り昔に使った記憶があるけど、Xcode でフレームワークとして読み込んだりはしていなかった気が。
そんなわけで、pod install 後に開くプロジェクトが .xcodeproj でなく .xcworkspace なのはやられました。最初 .xcodeproj の方を開いて「TesseractOCR.framework が見つからない!」と困っていたのも今はいい思い出。
というわけで、TesseractOCRiOS を使っての OCR はチュートリアルのサンプルを使ってサクっとできました。
iPhone で OCR してみるということはクリアできたので、次はチュートリアルのサンプルでなく自分の読みたいものを読み込ませてみたいとおもいます。