Using OpenCV on iOS 6.0

OpenCVをビルドして、iOSで使用するまでのステップをまとめます。
環境は以下の通りです。

  • xcode 4.5.1 (iOS 6対応)
  • OpenCV 2.4.2
  • iPhone 5

1. OpenCVをダウンロードする
まずはOpenCVをダウンロードします。
これを書いている時点での最新バージョンは 2.4.2です。
OpenCV-2.4.2.tar.bz2
ファイルを解凍し、適当なディレクトリーにコピーして下さい。

2. OpenCVをビルドする
OpenCVのディレクトリ名を”opencv”に変更し、pythonのスクリプトを実行します。

$ mv OpenCV-2.4.2 opencv
$ python opencv/ios/build_framework.py ios

時間は少々かかりますが、先ほどのopencvディレクトリと同じ階層に”ios”というディレクトリが作成され、必要なものはそこにまとめられます。

3. xcodeでプロジェクトを作成
プロジェクトのタイプは何でも良いと思います。
作成したプロジェクトの $(PROJECT_NAME)-Prefix.pch を開き下記の部分を追加して下さい。

#import

#ifndef __IPHONE_3_0
#warning “This project uses features only available in iOS SDK 3.0 and later.”
#endif

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif

#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#endif

4. opencv.frameworkの追加
先ほどビルドしたiosディレクトリをプロジェクトのディレクトリにコピーし、
opencv.framework (ios/opencv.framework )ディレクトリをプロジェクトに追加します。ドラッグ&ドロップでOKです。

4. テストプログラムのビルド
とりあえずメインのViewControllerだけ新規作成します。Super Classは何でも構いません。一番簡単なUIViewControllerのサブクラスをひな形だけ作ります。
ファイルを作成したら、拡張子を”.mm”に変更します。こうする事でxcode標準(?)のObjective-CとC++を混在させる事が出来ます。
ちなみにiOS版のOpenCVはC++とで出来ています。

ロジックは何も書いていませんが、この状態でビルドが出来る事になります。
試しにビルドしてみると #include <ext/atomicity.h>  が見つからないとエラーが出ると思います。

不思議な事にエミュレータでビルドすると大丈夫なのですが、実機でビルドをするとエラーが出てきます。
正直な所、ここでかなりハマりました。
ext/atomicity.h なるヘッダファイルはxcodeのディレクトリの下に実際に存在します。またこのエラーはプリコンパイルヘッダを clung がC++用にコンパイルする時に出て来ます。

たどり着いたのはコンパイラの設定です。

問題があるのは “C++ Language Dialect” と “C++ Standard Library” のようです。

下記の様に設定し直します。

この状態でコンパイルは出来る様になったはずです。
しかしリンクに失敗する場合があります。「場合があると」というのは実機にiPhone 5を使用したときです。iPhone 5は新しい armv7s を搭載しています。xcode 4.5も armv7s 用のコードを出力します。しかし OpenCV がまだ armv7s に対応していないようで、Python のスクリプトでビルドしたライブラリには armv7s 用のコードが含まれていないようです。そのため実機用のコードも armv7 用のコードで統一しなければいけないようです。

これも設定で回避できます。

 

“Valid Architectures” からarmv7s を削除し、Build Archive Architecture Only を “NO” にします。

以上です。

One Response to 'Using OpenCV on iOS 6.0'

  1. Sonic says:

    参考にさせて頂きました!
    私の環境、Xcode 4.5.2, OpenCV 2.4.3では
    ext/atomicity.h file not foundは出ないようでした。ご参考まで。

Sonic へ返信する Cancel reply

Your email address will not be published. Required fields are marked *

*

CAPTCHA


WP-SpamFree by Pole Position Marketing