10
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OSXでOpenCV3 + python3の環境を作る

Posted at

環境

osx El Capitan

インストールするもの

  • python 3.5.1
  • openCV 3.1

流れ

  1. pyenvでpython3.5.1をインストール
  2. OpenCV3のインストール
  3. 2.の環境でOpenCV3が動くようにする

1. pyenvでpython3.5.1をインストール

動かしたいのはOpenCV3系だしpythonも新しいものを使いたい。けど、OpenCV2系向けに書かれたものも多く転がっているため、OpenCV2系も動かせるようにしておきたい。OpenCV2系はpython2系でないと動かないみたいなので、複数環境を動かせるような状態にしておきたい。なのでpyenvをインストールしてそこから環境を変えることにする。

$ brew install pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(pyenv init -)"' >> ~/.zshrc

# python3.5.1をインストール
$ pyenv install 3.5.1

2. OpenCV3のインストール

brewから導入。

# brew install opencv3 --with-python3 を打ってみたけど、opencv3をhomebrew/science/opencv3に変更しろと言われる
$ brew install homebrew/science/opencv3 --with-python3

brewから上記のコマンドを入れるが、以下のようなエラーが出てうまくいかない。

/tmp/opencv3-20161123-64293-17bmzya/opencv-3.1.0/modules/videoio/src/cap_qtkit.mm:46:9: fatal error: 'QTKit/QTKit.h' file not found
#import <QTKit/QTKit.h>

http://qiita.com/masaori/items/0c78fcd58a6c6bf4f655
こちらのリンクではOSX Sierraで発生したとあるが、ElCapitanでも発生。解決法は今のところ同じで、brewのオプションにHEADを指定して新しいものを取得する。HEADを取得することで何か別のコミットも交じっているだろうけど、現時点では特に不都合なし。

$ brew install homebrew/science/opencv3 --with-python3 --HEAD

3. 2.の環境でOpenCV3が動くようにする

pyenv経由でOpenCVのsoファイルを読めるようにシンボリックリンクを張る

$ ln -s /usr/local/Cellar/opencv3/HEAD-b8c875d_4/lib/python3.5/site-packages/cv2.cpython-35m-darwin.so ~/.pyenv/versions/3.5.1/lib/python3.5/site-packages

以下でREPLからちゃんと読み込めるか確認

$ python

Python 3.5.1 (default, Nov  7 2016, 22:30:16)
[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 cv2
>>>

はまったこと

どこかのタイミングでpython2.7のモジュールを読み込むようになってしまっていた。そのため、brewでOpenCVをビルドした時にsoファイルが/usr/local/opt/opencv3/lib/python2.7/site-packages/に置かれたり、ファイルの中でもpython2.7前提でのビルドがされているために、シンボリックリンクを張っても以下のようなエラーが出てpythonで読み込めなかったりした。

$ python

Python 3.5.1 (default, Nov  7 2016, 22:30:16)
[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 cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/usr/local/opt/opencv3/lib/python2.7/site-packages/cv2.so, 2): Symbol not found: _PyCObject_Type
  Referenced from: /usr/local/opt/opencv3/lib/python2.7/site-packages/cv2.so
  Expected in: flat namespace
 in /usr/local/opt/opencv3/lib/python2.7/site-packages/cv2.so
>>>

こちらからそのモジュール読み込み問題を解決
http://qiita.com/Asakage/items/690ce9048e708de41166

~/.local/lib/python3.5/site-packages/homebrew.pthにある行をコメントアウトするとちゃんとpython3.5を読み込んでくれるようになった。どのタイミングでこのパスが読み込まれたのかは不明。pyvenvを設定したりここに書いてないことも少しやっていたので、そのタイミングで発生したのかもしれない。

ビルドにも時間かかるし色々問題が発生したので、condaを使ってOpenCV入れるのが一番早いかもしれない。

10
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?