以前、AnacondaでOpenCV/PyOpenGL環境を作ってきました。
でも、macOSではAnacondaはHomebrewと衝突してスッキリしないので、2019年2月現在はPython標準のvenvで仮想環境を作り、必要なバッケージをインストールするスタイルにしました。
今回はPython3における「venv + OpenCV/PyOpenGLの環境構築手順」をまとめます。
開発環境
- macOS Mojave v10.14.3
- Python v3.7.2(Homebrewでインストール)
- opencv-python v4.0.0.21
- PyOpenGL v3.1.0
venvによる仮想環境の作り方
venvではPythonのバージョンごとの管理できないけど、お手軽にできるのが気に入ってます。
不要になればディレクトリごと削除すればOKだし、バージョン管理できなくても個人で楽しむくらいだから問題なし。
(1)仮想環境を作る
$ cd [project dir] (「venv」など仮想環境用のディレクトリにするとわかりやすい) $ python3 -m venv [venv-name] Activate $ source [venv-name]/bin/activate Deactivate $ deactivate
(2)パッケージを最新版に更新する
更新できるパッケージがあるか「pip list -o」で確認してみると最新版がありました。
$ pip list -o Package Version Latest Type ---------- ------- ------ ----- pip 18.1 19.0.2 wheel setuptools 40.6.2 40.8.0 wheel You are using pip version 18.1, however version 19.0.2 is available. You should consider upgrading via the 'pip install --upgrade pip' command.
更新は任意でいいと思います。
$ pip install --upgrade pip $ pip install -U setuptools $ pip list Package Version ---------- ------- pip 19.0.2 setuptools 40.8.0
OpenCVの環境構築
パッケージのインストール
$ pip install opencv-python $ pip list Package Version ------------- -------- numpy 1.16.1 opencv-python 4.0.0.21 pip 19.0.2 setuptools 40.8.0 ※opencv-pythonは非公式のOpenCVライブラリ。未確認ですが本家からインストールするのはややこしい&Python2用らしいので取り扱いません。 ※numpy(数値計算を効率的に行うためのライブラリ)も同時にインストールされます。
動作確認
以前作った指定画像のRGB比率を求めるプログラム(displayImagePixel.py)を流用します。
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(グラフ描画ライブラリ)をインストールしておきます。
$ pip install matplotlib $ pip list Package Version --------------- -------- cycler 0.10.0 kiwisolver 1.0.1 matplotlib 3.0.2 numpy 1.16.1 opencv-python 4.0.0.21 pip 19.0.2 pyparsing 2.3.1 python-dateutil 2.8.0 setuptools 40.8.0 six 1.12.0 ※cycler/kiwisolver/pyparsing/python-dateutil/sixも一緒にインストールされます。
同じディレクトリに「sample.jpg」を配置してさぁ実行!
$ python displayImagePixel.py
↑プログラムが読み込んだ画像が表示されて、なにかしらのキーを押下すると、
RGBの平均値は[144 125 114] この写真は「赤系」の色が多い
とコンソールに出ます。ちなみに、画像は最近お気に入りの「緑の豆 京都焙煎所」さんの祇園ブレンド。
PyOpenGLの環境構築
パッケージのインストール
$ pip install pyopengl $ pip list Package Version --------------- -------- pip 19.0.2 PyOpenGL 3.1.0 setuptools 40.8.0
動作確認
こちらの記事のプログラムを拝借しました。ありがとうございます。
参考:Mac + pyOpenGLでシェーダーアニメーション描く – Qiita
プログラムの性質上、Pillow(画像処理ライブラリ)をpipで、glfwをHomebrewでインストールしておきます。
$ brew install glfw $ pip install pillow $ pip list Package Version --------------- -------- Pillow 5.4.1 pip 19.0.2 PyOpenGL 3.1.0 setuptools 40.8.0
拝借したプログラムはPython2系なので、print文部分を修正して、pyShaderSample → shader_loop.fragをちょっと変更してさぁ実行!
$ python shader_loop.py shader_loop.vert shader_loop.frag
おわりに
macOSがOpenGL等を非推奨とした今、いずれはMetalへと移行していくでしょう。
でもまぁOpenGLで遊べるうちは遊んでおけばいいと思います。参考にさせてもらったOpenGLシェーダープログラムのようにね。
付録:pipコマンド集
■パッケージのインストール $ pip install [packagename] ■パッケージのインストール(キャッシュしない) $ pip --no-cache-dir install [packagename] ■パッケージのアップデイト $ pip install -U [packagename] ■パッケージのアンインストール $ pip uninstall [packagename] ■インストールされているパッケージをリスト表示 $ pip list ■更新のあるパッケージをリスト表示 $ pip list -o ■インストールされているパッケージをリスト表示 $ pip freeze ※まとめてインストールするための設定ファイルを作成するときに使う
参考:Python, pip list / freezeでインストール済みパッケージ一覧を確認 | note.nkmk.me