モノクロタイム

I'm from the future!

【opencv2.framework】iOSアプリでもOpenCVを使いたい【Xcode4.5.1】

お久しぶりです。れいじです。

 

iPhoneのアプリで文字認識を扱ったものはたくさんありますね。

Android事情はよくわからないのですが、OCR関係で特にすごいな~と思ったのはこのアプリです。

http://www.kingjim.co.jp/sp/shotnote/

KINGJIMさんの商品のSHOT NOTE。

アルバイト先で付箋型の商品を頂いたので使ってみると、日付やページ番号を所定のところに記入するだけで数字を読み取り撮影日時とページ番号をデータに付与してくれる。

指示通りにノートを撮影するときちんと真上から撮ったように補正してくれます。

ノートをカメラで撮ることでデータ化できるアプリや商品はいろんな会社が開発・販売していますが、どれも特徴があって良いですね。

http://www.kokuyo-st.co.jp/stationery/camiapp/

こちらはKOKUYOさんのCamiApp(キャミアップ)。

アクションマーカーを塗りつぶすことで簡単にデータにタグ付けが出来るようです。

マーカーは8種類まで設定できるそうなので、教科ごとにタグ分けして使うこともできそうですね。

 

おおっと、話がそれてしまいました。

現在の私の課題はiPhoneで数字認識ができるアプリを開発することなのですが、企業が開発したお高いライブラリなど購入できませんので、自分で頑張ってアルゴリズムを考えて実装することになりそうです。

 

さて、数字にかぎらず文字を認識する上で必要になるのが画像処理の知識ですが、以前お世話になったゼミでOpenCVを使った経験があるので、今回はそのOpenCVをiPhoneアプリに組み込んでみたいと思います。

 

今回使うものはこちら。

・Xcode4.5.1

・opencv2.framework

 

OpenCVに関しては自分でビルドするタイプもあるようですが、

f:id:yomoyamareiji:20121118161717p:plain

「iOS用のopencv2.frameworkが追加されました」

Framework形式のものがあるとは!

これは導入も簡単そうですね。

早速ダウンロードして使ってみることとしましょう。

ダウンロードはこちらからどうぞ。

http://sourceforge.jp/projects/sfnet_opencvlibrary/downloads/opencv-ios/2.4.2/opencv2.framework.zip/

Zip形式なので、展開しておきましょう。

ダウンロードが済んだら、Xcodeで新しいプロジェクトを作ります。

今回はOpenCVTestというプロジェクトを作っています。

 

プロジェクトを作成したら、先ほどダウンロードしたopencv2.frameworkをプロジェクト内に追加します。

 

f:id:yomoyamareiji:20121118162312p:plain

 

opencv2.frameworkを使用したクラスは~.mmという拡張子に変えておいてください。

こうすることでObjective-CのコードとC++のコードを混在させることができるので、ごろごろ転がっているサンプルコードを試すことができますね。

 

しかしこのまま実機でビルドしようとするとエラーが出ます。

実機で、ということはエミュレータでは動くんですか、と聞かれそうですがそのとおりです。

エミュレータでは動きますが、まあ実機で動かないと意味が無いので、問題点を検証していくことにします。

もろもろ調べているうちに、C++コンパイラの設定を変えなければいけないことがわかりました。

 

f:id:yomoyamareiji:20121118163555p:plain

 

C++ Language Dialects → Computer Default

C++ Standard Library → Computer Default

 

※画像では「C Language Dialects」もComputer Defaultになっていますがこちらは手動で変える必要はありません。ミスです。

 

さて、これで実機でのビルドが通るようになるはずだ!

と意気揚々とビルドしてみるとまたしてもエラーが…。

リンカーエラーがでるのでこれも色々調べるとどうやらデバッグに使っていた実機がiPhone5であることに原因があるようで…。

 

現時点ではOpenCVはarmv7sに対応しておらず、またiPhone5はarmv7sを搭載し、Xcode4.5系はarmv7s用のコードを吐いているらしい。

そこでコードをOpenCVが対応しているarmv7に統一する必要があるというわけだ。

なるほどな~と思いながら設定してみる。

 

f:id:yomoyamareiji:20121118164540p:plain

 

Build Archive Architecture Only → NO

Valid Architecture → (armv7sを削除し)armv7

 

以上でiOS6向けアプリ,Xcode4.5.1でもOpenCVが使えるようになりました。

OpenCVが使えるようになったのはいいけど、数字認識の方法を考えるのが大変だなぁ。

 

【追記(2013/01/17)】

この手法でもビルドエラーが消えないという方はこちらの記事も参照してみてください。

 

 

 

【おまけ】

 

バイト先で貰った商品と便利そうなやつ

↑バイト先でもらったやつ

ノ-CA836A ルーズリーフ CamiApp B5 A罫 70枚

ノ-CA836A ルーズリーフ CamiApp B5 A罫 70枚

↑CamiAppのほう。データ化するならノート型よりルーズリーフ型がいいなぁ

KING JIM 「電子メモパッド」ブギーボード 黒 BB-1

KING JIM 「電子メモパッド」ブギーボード 黒 BB-1

↑全然関係ないけど以前関わった方が持ってて便利そうだなって思ったやつ