OpenCVをPythonで利用する on Mac

色々詰まったのでメモを残しておきます。

基本方針

ざっと検索する限り、NumPyというPythonパッケージを入れれると、もれなくOpenCVのPythonバインディングが付いてくるということが分かりました。

というわけでNumPyを入れることを目標とします。

Macでの方法

簡単に調べた感じでは、

1. Macportsを使う方法
2. Homebrewを使う方法
3. 地道に入れる方法

の3つがあるようです。

MacportsNumPy(SciPy)の公式サイトで推奨されている(?)方法のようですが、Homebrew派なのでスルーします。

次に、Homebrewを使う方法ですが、Pythonbrewで入れて、pipでインストールする方法なのですが、コレを試したら、segmentation faultでアカン感じのエラーウィンドウが出たのでやめました。Python2.6の方が安定してるよ、みたいな話もStackoverflowなどで見うけられましたが、そもそもPythonサードパーティの管理ツールで入れることが、MacビルトインのPythonと競合するという話もあり、あまり好ましくないという意見もあります。

というわけで、最終的に地道に入れる方法を試しました。

試行錯誤の巻

pipでサクッとインストールできるという情報は得られていましたが、ビルトインの方ではpipが入っていません。が、pipはeasy_installで入れるので入れちゃいました。残念なのは、パッケージを入れる度に管理者権限が必要な点ですが、致し方ありません…。

$ sudo easy_install pip
$ pip install numpy
Requirement already satisfied (use --upgrade to upgrade): numpy in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
Cleaning up...

あれ?既に入ってるようなメッセージが出て来ました。かといって、import cv2のようにしても見つからないと言われてしまいます。とりあえず言われたとおり--upgradeオプションを付けてみました。

$ sudo pip install numpy --upgrade
...
Successfully installed numpy
Cleaning up...

沢山ログが出ましたが、上手くいったようです。

すると、、、何も変わりませんでしたorz

さて、そもそもcvなりcv2なり、そんな感じの名前のファイル・ディレクトリが、site-packagesにないとおかしいはずで、モジュールをサーチ出来ないってことは、現時点ではどこにもないということか、とかなんとか考えながら調べていたら、HomebrewでインストールしたOpenCVに、Pythonバインディングが入っていることが判明しました。

どうも、NumPyがインストールされている状態で、適切にパスなどをconfigureした後、OpenCVを入れると、自動で入ってくれることがあるような無いような感じで、ネット上の情報は錯綜していたようです。

とやかく考えてもしょうがないので、とりあえずシンボリックリンクを貼ってみました。

$ sudo ln -s /usr/local/Cellar/opencv/2.4.6.1/lib/python2.7/site-packages/* /Library/Python/2.7/site-packages/
$ python
Python 2.7.2 (default, Oct 11 2012, 20:14:37) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2

とりあえず、上手くいったようです。

まとめ

  • 最初に書いた基本方針は嘘で、OpenCVのバインディングはOpenCVについてくる。NumPyに関してはバインディングが依存しているから入れる必要がある、というだけだった。
  • NumPyが入っていないなら、easy_install、pipなどを使って入れる。
  • OpenCVがインストール済みなら、どこかにバインディングが用意されている可能性があるので、探す。見つけたらシンボリックリンク貼っておく。