MacはHomebrew経由でインストールできる模様。以下コマンドを実行してみる。
$ brew install opencv
以下のエラーが出力された。
$ brew install opencv Error: No available formula with the name "opencv" It was migrated from homebrew/core to homebrew/science. You can access it again by running: brew tap homebrew/science
メッセージに従って brew tap homebrew/science
を実行。
再度 brew install opencv
を実行したところ、無事にインストールできた。
ここでpythonからOpenCVを呼び出せるか、試しにREPLを起動してみる。
$ python Python 3.5.1 (default, Apr 16 2017, 13:35:06) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import cv Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named 'cv' >>> import opencv Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named 'opencv' >>> exit()
どうやらモジュールが発見できていない模様。調べてみるとこのインストール方法はどうやら古い気がする。 python3系から呼び出すためには、別のopencvをインストールする必要がありそう。 先ほどインストールしたものを削除する。
$ brew uninstall opencv Uninstalling /usr/local/Cellar/opencv/2.4.13.2... (278 files, 35.6MB)
インストールオプションを調べる。
$ brew info opencv3 homebrew/science/opencv3: stable 3.2.0 (bottled), HEAD [keg-only] Open source computer vision library, version 3 http://opencv.org/ Not installed From: https://github.com/Homebrew/homebrew-science/blob/master/opencv3.rb ==> Dependencies Build: cmake ✘, pkg-config ✔ Recommended: eigen ✔, jpeg ✔, libpng ✔, libtiff ✔, openexr ✔, numpy ✔ Optional: ffmpeg ✘, gphoto2 ✘, gstreamer ✘, jasper ✘, jpeg-turbo ✘, libdc1394 ✘, openni ✘, openni2 ✘, qt ✘, tbb ✘, vtk ✘ ==> Requirements Optional: cuda ✘, java ✔, python3 ✔ ==> Options
次のコマンドを実行。
$ brew install opencv3 --with-python3
(オプション入れたせいか、すごい時間がかかる。。) (make走るのでかなり時間が掛かる。。) (一時間位かかりそう。。)
なんかまたエラーが出た。
Already downloaded: /Users/dorian/Library/Caches/Homebrew/numpy--nose-1.3.7.tar.gz ==> python3 -c import setuptools... --no-user-cfg install --prefix=/usr/local/Cellar/numpy/1.13.1/libexec/nose --single-version-externally-managed --record=installed.txt ==> python3 setup.py build --fcompiler=gnu95 --parallel=8 install --prefix=/usr/local/Cellar/numpy/1.13.1 --single-version-externally-managed --record=installed.txt ==> Caveats If you use system python (that comes - depending on the OS X version - with older versions of numpy, scipy and matplotlib), you may need to ensure that the brewed packages come earlier in Python's sys.path with: mkdir -p /Users/dorian/.local/lib/python3.5/site-packages echo 'import sys; sys.path.insert(1, "/usr/local/lib/python2.7/site-packages")' >> /Users/dorian/.local/lib/python3.5/site-packages/homebrew.pth Python modules have been installed and Homebrew's site-packages is not in your Python sys.path, so you will not be able to import the modules this formula installed. If you plan to develop with these modules, please run: mkdir -p /Users/dorian/.local/lib/python3.5/site-packages echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/dorian/.local/lib/python3.5/site-packages/homebrew.pth ==> Summary 🍺 /usr/local/Cellar/numpy/1.13.1: 1,375 files, 29.1MB, built in 2 minutes 14 seconds ==> Installing homebrew/science/opencv3 --with-python3 ==> Downloading https://github.com/opencv/opencv/archive/3.2.0.tar.gz ==> Downloading from https://codeload.github.com/opencv/opencv/tar.gz/3.2.0 ######################################################################## 100.0% Error: opencv3: Does not support building both Python 2 and 3 wrappers
Error: opencv3: Does not support building both Python 2 and 3 wrappers
え。そうなの? 確かにオプション一覧に無かった。。
ひとまず埒が明かないので、もう一回オプション無しでインストールする。
$ brew install opencv3
問題なくインストール完了。
ではこれを pyenv
でインストールしたpythonから呼び出せるか試してみる。
python用のバイナリファイルは以下パスに入っているみたい。
/usr/local/Cellar/opencv3/3.2.0/lib/python2.7/site-packages
個人的にはpython3系に一本化したいので、しばらくpython3でうまく出来ないか(python3系用のsoファイルがインストールされないか)格闘していたが、一筋縄では行かないと判明したので、さっと諦めて pyenv
で2.7.11にバージョンを変更。
pyenv
でインストールしたpythonは以下ディレクトリに格納されている。
~/.pyenv/versions
brew経由でインストールされたOpenCVのpython用バイナリをpyenv経由でインストールしたpythonから参照出来るようにするために、シンボリックリンクを貼ってあげれば良い。そのためには以下コマンドを実行する。
ln -s /usr/local/Cellar/opencv3/3.2.0/lib/python2.7/site-package/cv2.so ~/.pyenv/versions/2.7.11/lib/python2.7/site-packages
実際にpythonから呼び出せるか確かめてみる。
/Users/dorian/.pyenv/versions/2.7.11/lib/python2.7/site-packages python Python 2.7.11 (default, Aug 6 2016, 11:14:26) [GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__ '3.2.0' >>>
問題なく呼び出せた模様。 環境作るのに時間かかってしまった。。
おまけ
シンボリックリンクの張り替えで、opencvとopencv3を切り替えられた。
$ python Python 2.7.11 (default, Aug 6 2016, 11:14:26) [GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__ '3.2.0' >>> exit() $ rm .pyenv/versions/2.7.11/lib/python2.7/site-packages/cv2.so $ ln -s /usr/local/Cellar/opencv/2.4.13.2/lib/python2.7/site-packages/cv2.so ~/.pyenv/versions/2.7.11/lib/python2.7/site-packages /Users/dorian python Python 2.7.11 (default, Aug 6 2016, 11:14:26) [GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__ '2.4.13.2'
補足
Twitterでつぶやいたら、anacondaなら一発じゃね?って飛んできたので、試したら本当に楽に入ってしまった。。開発用途ならこれで十分かも。
pyenv 使ってるならbrewじゃなくてanaconda で入れたら一発な気がする。。
— Yuto Suzuki (@moc_yuto) 2017年7月22日