Python3 で OpenCV3 と PyOpenGL を使う方法【Anaconda3 on macOS】

5月/6月のフォトセッション受付中!

松本と横浜を中心とした地域で撮影します。あなたのお気に入りの場所で、あなたが自然に振舞っているような雰囲気で、あなたのステキを撮らせてくださいな。

 

MacにPython3系の環境を構築する方法はいくつかあります。

  1. macOS用パッケージマネージャーのHomebrewを利用して、Python3とOpenCV3までHomebrewのみで構築する方法
  2. Homebrewでpyenv/virtualenvをインストール(pip install)してから、pyenvとvirtualenvを使い、Macのシステムから分離して構築する方法
  3. Anaconda3をMacにインストールして独自のPython環境を構築する方法(Macのシステムと共存)

 

僕は3にしています。

この記事では3の環境でOpenCVとPyOpenGLを使えるようにするまでをまとめます。いまいち「???」なところもあるけど、やっと動かせるようになったのでひとまずよしとしました。

一応は以前の状況から進めたので!

▶︎参考:PythonのOpenGLライブラリ「PyOpenGL」はPython3系では動かないのね

 

Anaconda?pyenv?どれがいいの?

本題に入る前にとても興味深い記事がありました。

▶︎参考:Anaconda は Environment Isolation Tool (環境分離ツール) ではない – Qiita

 

どの選択がベストか、それは人によって違うでしょうね。

Python2系と3系で同時に開発している人はpyenvを使うかもしれませんし、必要なライブラリだけでいいと考えている人もいるでしょう。また、pyenvとAnacondaを組み合わせることが合っているならそちらを使う、というふうに。

 

僕がPythonを勉強するにあたり、最初は色々と揃っているAnacondaにしました。しかし、OpenCVやOpenGLの設定がすんなり行かなくてね〜。Pythonのバージョンが違うからだとか依存関係だとかよくわからなくなったので(前回の記事)、次にpyenv/virtualenvを使ってみました。

その上で最終的に落ち着いたのが前述3の「AnacondaをMacにインストールする」ことでした。ざっくり理由を挙げるとこんなところ。

  • Anacondaはやっぱ便利だし
  • 仮想環境はAnacondaでも作れるし
  • Homebrewと競合するから環境を分けるのが望ましいらしいけど、pyenv配下にAnacondaを入れてもそうでなくてもbrew doctorでワーニングが出るじゃんよ
  • AnacondaでOpenCVとOpenGLが使えた!

 

というわけで以下から本題。なお、この記事の情報はすべて2017年4月時点のものです。

 

R4001012

 

環境

 

 
スポンサーリンク

 

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の仮想環境を作ればオッケー。

 

仮想環境作成
conda create -n py35opencv python=3.5 anaconda

仮想環境に入る
source activate py35opencv

OpenCVのインストール
conda install –channel https://conda.anaconda.org/menpo opencv3

インストールの確認
conda list | grep opencv3

 

これで最新版のOpenCV3がインストールされます。Pythonは3.5.2の環境が作られました。

※追記
conda installについてはブログ本文をコピーするとエラーとなります。「-channel」となっちゃう。channelの前はハイフンが2つです。

なぜか公式のコマンドではインストールできない

なぜかうまくいかないこのコマンド。

 

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.

 

ここが前回つまずいて先に進めなかったところでした。

OpenCVの動作確認

以下のソースをGitHubにおきました。▶︎nnamm/DisplayPhotoInfo

 

実行
python DisplayPhotoInfo.py

 
まず画像を表示して、

 

4

 

RGBの平均値は[213 127 99]
この写真は「赤系」の色が多い

 

とRGBの情報を表示するプログラムです。

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系で実行できるよう、以下を参考にコンバートツールを使います。

▶︎参考:PyOpenGLしてみる – Qiita

 

ディレクトリ移動
cd PyOpenGL-Demo-3.0.1b1\PyOpenGL-Demo\Nehe

全ソースコードを2系から3系へコンバート
〜〜〜/anaconda3/bin/2to3-3.6 -w .

ソースコードの「version」「date」「author」の行をコメントアウト

 

実行
python lesson11.py

 

3

 

いまいち「???」なところ

赤いよ・・・

Visual Studio Code上なぜかpylintエラーが出ちゃうんですよね。

▼OpenCVのサンプル。CV2をインポートして使っているのに赤い。だけど動く。気持ちわるい。

 

1

 

▼PyOpenGLのインポート。使っているのに真っ赤っか。だけど動く。気持ちわるい。

 

2

 

OpenCVとPyOpenGLのコード補完が効かない

VSCの内部的に両方とも無いものしているのか、コード補完が効きません。初学生には辛いけど、慣れればなんとかなるでしょう。

おわりに

それにしてもQiitaには助けられています。とはいえ、自分がやりたいことにドンピシャの情報はありません。どの情報も断片的になりがち。だから、自分がやりたいことをまとめてみました。さて、僕と同じ疑問を抱えた方はいるかな(笑)

 

ひとまずこれで画像解析して遊べそうです。以下のサイトを読み進めていきます。

▶︎参考:画像処理入門講座 : OpenCVとPythonで始める画像処理 | プログラミング | POSTD
▶︎参考:画像解析 opencv python入門 – Qiita
▶︎参考:Python | プログラミング学習ノート

 

ゆくゆくは自分の写真を使ってデータ分析する予定です。

 

R4001013

 

補足「Anacondaで仮想環境を作る方法」

仮想環境の作成

conda create -n py35opencv python=3.5 anaconda

仮想環境の削除

conda remove -n py35opencv –all

仮想環境に入る(Active)

source activate py35opencv

仮想環境から出る(Deactive)

source deactivate py35opencv

仮想環境の確認

conda info -e

▶︎参考元:conda で python の環境つくり · GitHub

【空気感フォトグラファーからのお知らせ】

(1)5月/6月の撮影依頼受付中!

松本と横浜を中心とした地域でプロフィール/ポートレイト撮影します。

あなたのお気に入りの場所で、あなたが自然に振舞っているような雰囲気を僕が引き出します。あなたのステキを撮らせてください。

(2)あなたのステキをそっとすくい撮ります!

WebやSNSに顔写真を公開するのがなんだか恥ずかしい。けれどエイっと勇気を出して公開したい!今の自分を見せたい!あるいは実は撮られたかったんです。という方々、そのサポートを僕にやらせてくださいな。

僕なら、あなたが気がつかないときに、あなたのステキをそっとすくい撮ります。だから大丈夫。

詳しくはこちらからどうぞ!

Profile

花村貴史 / Takashi Q. Hanamura
花村貴史 / Takashi Q. Hanamura<空気感フォトグラファー>
「”自分の好き”を大切にしよう」と思いきって大好きな信州に移住したフォトグラファー。その人/その場の空気感をそっとすくい撮る写真が好評。

2017年はプログラミングやCGにも手を出し、「写真」「エンジニア」「芸術」「心理」、それぞれの分野を楽しんでいきます。

詳しいプロフィールはこちらへGo!!