mac+xcodeでopencvを試す

顔認識に興味が出てきました。アプリ開発で使えたら楽しそうだなぁ、と。

ちょっと調べたところ、顔認識(画像処理)と言えば、やっぱりopencv。過去にちょっとだけ業務で触ったことあったけど、c++ということで敬遠していました。

でも、顔認識とかできるとおもしろ系のアプリ(ARカメラなど)が作れそうじゃないですか。せっかくなんで再入門(いや、ただの入門)することにしました。

お品書き

  • 開発環境の構築
  • サンプルの実行

環境

開発環境の構築

まずはopencvのインストール。homebrewでインストールします。「homebrew/science」formuraがない場合、tapしてください。

# 「homebrew/science」formuraがない場合
$ brew tap homebrew/science

# インストール
$ brew install opencv
==> Installing opencv3 from homebrew/science
==> Downloading https://homebrew.bintray.com/bottles-science/opencv3-3.1.0_4.el_capitan.bottle.tar.gz
Already downloaded: /Users/takyafumin/Library/Caches/Homebrew/opencv3-3.1.0_4.el_capitan.bottle.tar.gz
==> Pouring opencv3-3.1.0_4.el_capitan.bottle.tar.gz
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local.

opencv3 and opencv install many of the same files.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/opencv3/lib
    CPPFLAGS: -I/usr/local/opt/opencv3/include
    PKG_CONFIG_PATH: /usr/local/opt/opencv3/lib/pkgconfig


If you need Python to find bindings for this keg-only formula, run:
  echo /usr/local/opt/opencv3/lib/python2.7/site-packages >> /usr/local/lib/python2.7/site-packages/opencv3.pth
  mkdir -p /Users/takyafumin/Library/Python/2.7/lib/python/site-packages
  echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/takyafumin/Library/Python/2.7/lib/python/site-packages/homebrew.pth
==> Summary
🍺  /usr/local/Cellar/opencv3/3.1.0_4: 281 files, 119.7M

opencvは「keg-only」(?)なので、/usr/local/libにシンボリックリンクが作成されません。以下コマンドでシンボリックリンクを作成します。「--force」オプションをつけて実行してください。

「keg-only」はよく分からなかったのですが、少し調べたところ、OS標準のものとバッティングする可能性のあるライブラリの場合に自動で置き換えないようになっているもののようです。シンボリックリンクが作成されないだけなので、下記コマンドでシンボリックリンクを作成すれば良いようです。ただし、OS標準のものを優先したい場合、違うやり方を探す必要があります。(コンパイル時にパラメータ指定する等)

# シンボリックリンク作成
$ brew link opencv3 --force
Linking /usr/local/Cellar/opencv3/3.1.0_4... 56 symlinks created

ただしこれだけだと後でXcodeのビルド時にエラーが出ます。

dyld: Library not loaded: /usr/local/opt/webp/lib/libwebp.6.dylib
  Referenced from: /usr/local/opt/opencv3/lib/libopencv_imgcodecs.3.1.dylib
  Reason: image not found
(lldb) 

webpがない、ってことのようなので、追加でインストールします。

$ brew install webp

サンプルの実行

さて、環境が構築できたのでサンプルを実行してみます。

下記ページを参考にXcodemac向けコンソールアプリケーションを作成します。

qiita.com

ビルド用の設定として、以下を忘れずに行います。

  • includeパスの指定

    • Search Paths
      • Header Search Paths: /usr/local/Cellar/opencv3/ ※recursiveを指定
  • linkerの指定

    • Link Binary With Libraries: /usr/local/Cellar/opencv/lib/libopencv*.dylibを一つずつ指定(使うものだけでいい)

実行して、macのカメラが起動して間抜けなおっさんが映れば成功です。