Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
14
Help us understand the problem. What is going on with this article?
@shim0mura

OSXでOpenCV3 + python3の環境を作る

More than 3 years have passed since last update.

環境

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入れるのが一番早いかもしれない。

14
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
repro
世界59か国6,500以上の導入実績を持つCE(カスタマーエンゲージメント)プラットフォーム「Repro(リプロ)」を提供

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
14
Help us understand the problem. What is going on with this article?