opencv-2.4.6 on iOS 7.0.3 (64 bit)

iOS7と同時にリリースされたiPhone5sは64bitのCPUを搭載しています。
今までのアプリもそのままで動作し、高速ではあるのですが、やはり64bitのネイティブアプリを試してみたくなります。
一つのプロジェクトで構成されていれば簡単に出来てしまいますが、外部のフレームワークやライブラリなどを使っている場合にはそれらが64bit対応していなければなりません。

そこでまずOpenCVの64bit対応を試してみました。

定量的な測定はまだしていませんが、iPhone5sでは32bit版アプリでもかなり高速ですが、64bitアプリにすると更に高速になっている感じがあります。
つい先日発表されたiPad airやRetina版のiPad miniも64bit CPUを登載しているようですので、今後は64 bitアプリも多く出てくるのではないかと思います。

 

●環境

xcode 5.0.1
Darwin Kernel Version 13.0.0 (Mervericks)

platforms/ios/build_framework.py

def build_framework(srcroot, dstroot):
    "main function to do all the work"

    targets = ["iPhoneOS", "iPhoneOS", "iPhoneSimulator"]
    archs = ["armv7", "armv7s", "i386"]
    for i in range(len(targets)):
        build_opencv(srcroot, os.path.join(dstroot, "build"), targets[i], archs[i])
    put_framework_together(srcroot, dstroot)

112,113行目に以下のように編集し、ターゲットとアーキティクチャを追加する。

    targets = ["iPhoneOS", "iPhoneOS", "iPhoneOS", "iPhoneSimulator",  "iPhoneSimulator"]
    archs = ["arm64", "armv7", "armv7s", "i386", "x86_64"]

platforms/ios/cmake/Modules/Platform/iOS.cmake

# Hidden visibilty is required for cxx on iOS
set (CMAKE_C_FLAGS "")
set (CMAKE_CXX_FLAGS "-stdlib=libc++ -headerpad_max_install_names -fvisibility=hidden -fvisibility-inlines-hidden")

set (CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O3 -fomit-frame-pointer -ffast-math")

if (HAVE_FLAG_SEARCH_PATHS_FIRST)
    set (CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
    set (CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
endif (HAVE_FLAG_SEARCH_PATHS_FIRST)

45行目を以下のように編集し、最適化オプションを変更する。

    set (CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -Os -fomit-frame-pointer -ffast-math")

modules/legacy/src/dpstereo.cpp

#define CV_IMAX3(a,b,c) ((temp3 = (a) >= (b) ? (a) : (b)),(temp3 >= (c) ? temp3 : (c)))
#define CV_IMIN3(a,b,c) ((temp3 = (a) <= (b) ? (a) : (b)),(temp3 <= (c) ? temp3 : (c)))

このままではマクロでエラーになるため下記のように修正する。

 
#define CV_IMAX3(a,b,c) (temp3 = (a >= b ? (a >= c ? a : (b >= c ? b : c)) : (b >= c ? b : c)))
#define CV_IMIN3(a,b,c) (temp3 = (a <= b ? (a <= c ? a : (b <= c ? b : c)) : (b <= c ? b : c)))

最後に以下のコマンドでフレームワークを作成します。

python ../opencv/platforms/ios/build_framework.py ios

Leave a Reply

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

*

CAPTCHA


WP-SpamFree by Pole Position Marketing