OpenCV3 + opencv_contrib on macOS

OpenCV3のトラッキングAPIを使いたくって、macOSでインストールが面倒だったので、メモ。

TL;DR

MacBook Pro (15-inch, 2016)で動く
OpenCV 3.2.0(相当)のフレームワーク置いときました。
http://ibu.tokyo/downloads/opencv-3.2.0.framework.zip

homebrewで入らない

プロトタイプ作業だったので、pythonでやりたいし、homebrewで簡単に入れたかった。

理想はこのオプション

brew install opencv3 --with-contrib --with-ffmpeg --with-python3 --without-python

なんかエラー出る…

brew install opencv3 --without-python --with-python3
brew install opencv3 --with-contrib

これでも駄目。issue見てもいまいちわからず。
なにもオプションつけないビルド済みのもの以外入らないんじゃ…
余談だけど最近のhomebrewはインストールみすると、関連するissueをログに吐いてくれるの便利。

あきらめてソースからビルド

最新のリリースv3.2.0を以下からダウンロード。

github.com github.com

opencv_contrib/README.md
に書いてある方法はなぜかめんどくさい方法になっていたけど、frameworkビルド用のスクリプトが用意してあるぽい。

python opencv/platforms/osx/build_framework.py --contrib opencv_contrib build

やったービルドできた。
しかし実行するとTracking moduleが入ってない…。

std::cout << cv::getBuildInformation() << std::endl;

でビルド情報が見れるらしく。
どうやら、依存しているdnnのせいで、trackingモジュールが入ってないぽい。
dnnはディープ・ニューラル・ネットワークのモジュールでCaffeのモデルを読んだりできるらしい。
dnnのCMakeListsを読むと、CUDA使えない環境では使えないようにしている。これ、AMD RadeonMacじゃ使えないんじゃ…。

あとで調べるとADMでCUDA動かすプロジェクトもあるみたい。だけど流石にそこまではできない。 CUDAをRadeonで動かす(導入編) - Fixstars Tech Blog /proc/cpuinfo

masterビルドできる

で半分諦めるものの、Githubの中を追っているうちに、masterブランチでは修正されていることに気づいた。
同じ方法でmasterブランチ上でビルドすると今度は無事にdnnモジュール、trackingモジュールも入った。

ビルドしたモジュール: core flann imgproc ml objdetect phase_unwrapping photo plot reg surface_matching video xphoto bgsegm dnn face fuzzy imgcodecs shape videoio xobjdetect highgui superres bioinspired dpm features2d line_descriptor saliency text calib3d ccalib datasets rgbd stereo structured_light tracking videostab xfeatures2d ximgproc aruco optflow stitching world

入ってないモジュール: cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev java python2 python3 ts viz cnn_3dobj cvv dnn_modern freetype hdf matlab sfm

macは好きだけど、開発ではどんどん使えない子になっている…。

サンプル

contribに入っている、ArUcoのマーカーを吐き出すだけの、一番シンプルなサンプル。 github.com

Xcodeでビルドするときに依存ライブラリはこちら。 f:id:asus4:20170521102143p:plain

cv::imwriteとうのファイル読み書きにWebP.framework入れろって怒られたので、iOS用のリンクしたら普通にビルドできた。
oFなどで使う場合はimwrite,imread使わないので、WebPなくても大丈夫。


マスト丼にログ残す実験をして、
ハマったところを後でブログに残そうって思ったりするのでhatenaさんとか、qiitaさんとかのインスタンスが立ったらいいなー。
https://mstdn.jp/@asus4