環境構築手順を更新しました。Anacondaをやめてvenvを使います。
macOSにPython3系の環境を構築する方法はいくつかあります。
- macOS用パッケージマネージャーのHomebrewを利用して、Python3とOpenCV3までHomebrewのみで構築する方法
- Homebrewでpyenv/virtualenvをインストール(pip install)してから、pyenvとvirtualenvを使い、Macのシステムから分離して構築する方法
- Anaconda3をMacにインストールして独自のPython環境を構築する方法(Macのシステムと共存)
僕は3にしています。
この記事では3の環境でOpenCVとPyOpenGLを使えるようにするまでをまとめます。いまいち「?」なところもあるけれど、ひとまず動かせるようになりました。
Anaconda?pyenv?どれがいいの?
本題に入る前にとても興味深い記事がありました。
参考:Anaconda は Environment Isolation Tool (環境分離ツール) ではない – Qiita
どの選択がベストか、それは人によって違うでしょうね。
Python2系と3系で同時に開発している方はpyenvを使うかもしれませんし、必要なライブラリだけでいいと考えている人もいるでしょう。pyenvとAnacondaを組み合わせることが合っているならそちらを使う、というふうに。
僕は色々と揃っているAnacondaにしました。しかし、OpenCVやOpenGL関連の設定がPythonのバージョンが違うだとか依存関係だとかよくわからなくなったので(前回の記事)、次にpyenv/virtualenvを使ってみたり。
最終的に落ち着いたのが前述3の「AnacondaをMacにインストールする」でした。理由は▼こちら。
- Anacondaはやっぱ便利
- 仮想環境はAnacondaでも作れる
- Homebrewと競合するから環境を分けるのが望ましいらしいけど、pyenv配下にAnacondaを入れてもそうでなくてもbrew doctorでワーニングが出るじゃんよ
- AnacondaでOpenCVとOpenGLが使えた!
というわけで以下からが本題。なお、この記事の情報はすべて2017年4月時点のものです。
開発環境
- macOS Sierra 10.12.4
- Visual Studio Code 1.11.1
- Anaconda3(Python 3.6)
- OpenCV3(本家)
- OpenCV 3.1.0(Anaconda Package)
- PyOpenGL(本家)
- PyOpenGL 3.1.1a1(Anaconda Package)
【Anaconda3でOpenCVを使う方法】
OpenCVはPython3.6系ではなく3.5系で動く
以下を見るにOpenCV3はPython3.6系には対応していないようです。特別にmakeするなど対策はあるようですが、あくまで暫定的とのこと。
参考:python – Can’t install OpenCV3 on Anaconda3 python3.6 on macOS – Stack Overflow
したがって、AnacondaでPython3.5の仮想環境を作ればOKです。
■仮想環境作成(Pythonのバージョン指定) $ conda create -n py35opencv python=3.5 anaconda ■仮想環境に入る(Activate) $ source activate py35opencv ■OpenCVのインストール $ conda install --channel https://conda.anaconda.org/menpo opencv3 ■インストールの確認 $ conda list | grep opencv3
これで最新版のOpenCV3がインストールされます。Pythonは3.5.2の環境が作られました。
OpenCVの動作確認
以下のソースをGitHubにおきました。(→ nnamm/DisplayPhotoInfo)
import cv2 import numpy as np import matplotlib.pyplot as plt # Display window(readed image) img = cv2.imread('sample.jpg') # read the image cv2.imshow("result", img) # create window cv2.waitKey(0) # wait the input cv2.destroyAllWindows() # Convert image to RGB color for matplotlib img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Show image with matplotlib for Jupyter notebook # (enter "%matplotlib inline" in the import statement) imgplot = plt.imshow(img) # Display RGB average from sample.jpg average_color_per_row = np.average(img, axis=0) average_color = np.average(average_color_per_row, axis=0) average_color = np.uint8(average_color) print("RGBの平均値は", end="") print(average_color) # Display the highest channel maxcolor = max(average_color) if (maxcolor == average_color[0]): maxcolorText = "赤" elif (maxcolor == average_color[1]): maxcolorText = "緑" else: maxcolorText = "青" print("この写真は「" + maxcolorText + "系」の色が多い")
※別途、matplotlibが必要です。同一ディレクトリに「sample.jpg」も配置してください。
■実行 $ python DisplayPhotoInfo.py
まず画像が表示され、なにかしらのキーが押下されると

RGBの平均値は[213 127 99] この写真は「赤系」の色が多い
とRGBの情報が表示されます。
【補足】なぜか公式のコマンドではインストールできないOpenCV
なぜかうまくいかないこのコマンド。
$ conda install -c anaconda opencv=3.1.0
condaのリポジトリにないって弾かれる。あるとしたらOpenCV2系(conda search opencv)。opencv=3.1.0と入力しているのに謎。
よって、ネットで見つけたこちらを実行することにしたわけです。
$ conda install --channel https://conda.anaconda.org/menpo opencv3
ただし、Python3.6系の環境で行うと以下のようなエラーが出ます。
UnsatisfiableError: The following specifications were found to be in conflict: - opencv3 -> python 2.7* -> openssl 1.0.1* - python 3.6 Use "conda info " to see the dependencies for each package.
ここが前回つまずいて先に進めなかったところでした。
【Anaconda3でPyOpenGLを使う方法】
PyOpenGLはPython3.6系で動く
$ conda install -c anaconda pyopengl=3.1.1a1
これでオッケー。仮想環境のPython3.5系でもインストールできます。
PyOpenGLの動作確認
本家からソースコードがダウンロードできますが、Python2系のソースコードになっているため動かし方にはコツがあります。
参考:PyOpenGL-Demo 3.0.1b1 : Python Package Index
Python3系で実行できるよう、以下を参考にコンバートツールを使います。
■ディレクトリ移動 $ cd PyOpenGL-Demo-3.0.1b1\PyOpenGL-Demo\Nehe ■全ソースコードを2系から3系へコンバート $ 〜〜〜/anaconda3/bin/2to3-3.6 -w . ■ソースコードの「version」「date」「author」の行をコメントアウト
■実行 $ python lesson11.py

「?」な課題点
pylintエラー
Visual Studio Code上なぜかpylintエラーが出ちゃうんですよね。
▼OpenCVのサンプル。CV2をインポートして使っているのに赤い。だけど動く。気持ちわるい。

▼PyOpenGLのインポート。VSCからライブラリが補足されない(?)のか真っ赤っか。だけど動く。ここスッキリしない。

OpenCVとPyOpenGLのコード補完が効かない
VSCの内部的に両方とも無いものしているのか、コード補完が効きません。初学生には辛いけど、慣れればなんとかなるでしょう。
もしかして補足されるような拡張機能をインストールしないといけないのかな。
おわりに
それにしてもQiitaには助けられています。
とはいえ、自分がやりたいことにドンピシャの情報はなかなかお目にかかれません。どの情報も断片的になりがち。なので自分がやりたいことをまとめてみました。
ひとまずこれで画像解析して遊べそうです。以下のサイトを読み進めていきます。
参考:画像処理入門講座 : OpenCVとPythonで始める画像処理 | プログラミング | POSTD
参考:画像解析 opencv python入門 – Qiita
ゆくゆくは自分の写真を使ってデータ分析してみたいです。
付録:Anacondaで仮想環境を作る方法
■仮想環境の作成 $ conda create -n py35opencv python=3.5 anaconda ■仮想環境の削除 $ conda remove -n py35opencv –all ■仮想環境に入る(Activate) $ source activate py35opencv ■仮想環境から出る(Deactivate) $ source deactivate py35opencv ■仮想環境の確認 $ conda info -e