IPython
Python3
OpenCV3

とりあえずWindows上のIPython Notebook + OpenCV環境構築

More than 3 years have passed since last update.


この記事は

Python + OpenCVで画像を弄くりまわしちゃいたいので、Windows 7上にPython + virtualenv + OpenCV環境構築したときのメモです。

基本的に自分用のメモですので、読みにくくてもあしからず。

記事は

1. PythonのDLとインストール

2. virtualenvのインストール

3. OpenCVのインストール

4. テストラン

の順に書いていきます。

参考記事↓

Windowsでpyenvとかvirtualenvを使おうと思ったときに学んだことのメモ

Windows環境でVirtualenvする


1. Python DL&Install

とりあえず公式サイトへ行き、インストーラを入手します。

トップページからも入手できますが、x64バージョンを確実に入手したかったのでリリースノートから86-x64 MSI installerをDLしてきました。

公式: https://www.python.org/

3.4.3リリースノート: https://www.python.org/downloads/release/python-343/

DL後はインストーラにしたがって Next> をぽちぽちすればインストールされます。

(以下、インストール先は < PYTHON_PATH > と表します。私は何も考えずに C:/Python34 にインストールしました。)

インストールが終了したらPATHに以下の2つのパスを登録してください。

(例はC:\Python34にインストールしたとして)

Python本体: C:\Python34

補助コマンド(pip, easy_install): C:\Python34\Scripts


2. virtualenvのインストール

つづいて virtualenv をインストールします。

virtualenvは本体とは独立したPython環境を構築するためのツールで、Rubyでいうところのbundleと同等の機能を持っています。

環境を独立させることで、特定の作業にしか利用しないライブラリ(i.e. OpenCV)が他の環境へ影響を与えることを防ぎ、個々の環境を管理しやすくなります。

ざっくり言えば、↓なんだそうです。


virtualenv is a tool to create isolated Python environments.

公式: https://virtualenv.pypa.io/


公式サイトに則り次のコマンドを入力するとインストール完了です。

https://virtualenv.pypa.io/en/latest/installation.html

> pip install virtualenv

インストールが完了すると<PYTHON_PATH>\Scriptsにvirtualenv.exeが生成されていて、コマンドプロンプトから利用できるようになります。

virtualenvのインストールが完了したら、いよいよ作業用ディレクトリを作成します。

コマンドプロンプトを開き、適当な作業用ディレクトリを作成&移動したうえでOpenCV用の環境"opencv"をそのディレクトリに作成します。

次のコマンドを入力すると環境が構築できます。

> virtualenv opencv

仮想環境上で作業する際には activate.bat で環境に入り、抜ける際には deactive.bat で環境を閉じます。

> opencv\Scripts\activate.bat

(opencv) ...>
(opencv) ...> opencv\Scripts\deactive.bat

virtualenvの詳しい使い方は公式のユーザガイドを参照してください。

User Guide: https://virtualenv.pypa.io/en/latest/userguide.html

Reference Guide: https://virtualenv.pypa.io/en/latest/reference.html


3. OpenCVのインストール

Virualenvをインストールできたので、いよいよOpenCVをインストールします。

OpenCV2.x (2015年6月4日には3.0がリリースされました) では画像データをnumpyで管理しています。

まずはOpenCVをインストールする前にnumpyをインストールします。

Virtual Studioがインストールされていれば自前コンパイルも可能ですが、今回はカリフォルニア大学アーバイン校のGohlkeさんらが公開しているパッケージをつかってインストールします。

Unofficial Windows Binaries for Python Extension Packages: http://www.lfd.uci.edu/~gohlke/pythonlibs/

numpy: http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

今回はnumpy-1.9.2+mkl-cp34-none-win_amd64.whlをDL&installします。

pip install "numpy-1.9.2+mkl-cp34-none-win_amd64.whl"

続いて opencv もDL&installします。

opencv: http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv

今回はopencv_python‑3.0.0‑cp34‑none‑win_amd64.whlをDL&installします。

pip install "opencv_python‑3.0.0‑cp34‑none‑win_amd64.whl"

以上でインストールは終了です。


4. テストラン

テストランの前にせっかくなのでpython用の編集環境 ipython を整えます。

ipythonのnotebook機能は試行錯誤する際には重宝するツールです。

ipythonはjupyterというライブラリに依存するのでまずはjupyterをインストールし、次にipythonをインストールします。

また画像表示のためにmatplotlibをインストールします。

jupyter: http://www.lfd.uci.edu/~gohlke/pythonlibs/#jupyter

ipython: http://www.lfd.uci.edu/~gohlke/pythonlibs/#ipython

matplotlib: http://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib

インストールしたのは

jupyter: jupyter‑1.0.0‑py2.py3‑none‑any.whl

ipython: ipython‑4.0.0‑py2.py3‑none‑any.whl

matplotlib: matplotlib‑1.4.3‑cp34‑none‑win_amd64.whl

です。

pip install "jupyter‑1.0.0‑py2.py3‑none‑any.whl"

pip install "ipython‑4.0.0‑py2.py3‑none‑any.whl"
pip install "matplotlib‑1.4.3‑cp34‑none‑win_amd64.whl"

インストール後、 ipython notebookと入力するとブラウザが立ち上がりファイルの閲覧編集が可能になります。

詳しい使い方はGoogle等で検索すれば見つかるとおもいます。

はじめるiPython notebook: http://qiita.com/icoxfog417/items/175f69d06f4e590face9

今回は定番のレナさんの画像をとりあえず読み込んで表示してみます。

(Wikipediaで全体画像を見てみたけどなかなか良い、けど会社ではちょっと・・・)

画像本体(from カーネギーメロン大): http://www-2.cs.cmu.edu/~chuck/lennapg/lena_std.tif

The Lenna Story

Wikipedia: レナ_(画像データ)

コードを示します。

%matplotlib inline

import cv2 # opencv
import matplotlib.pyplot as plt # matplotlibの描画系

fn_img = "lena_std.tif" # レナさんの画像ファイル名
img = cv2.imread(fn_img) # レナさんの画像を読み込む

# opencvの処理系では (B,G,R) で管理されているが、
# matplotlib では (R,G,B) で画像を認識するので、
# 表示用に一旦変換する
show_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

plt.imshow(show_img) #表示

実行結果は↓みたいな感じです。

result.jpg


おまけ

ためしに顔認識してみた結果を示します。

%matplotlib inline

import cv2 # opencv
import matplotlib.pyplot as plt # matplotlibの描画系

fn_img = "lena_std.tif" # レナさんの画像ファイル名
img = cv2.imread(fn_img) # レナさんの画像を読み込む

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # グレースケール化

# cascade の学習結果は https://github.com/Itseez/opencv/tree/master/data/haarcascades から落とせる
cascade_path = "haarcascade_frontalface_alt.xml"
cascade = cv2.CascadeClassifier(cascade_path) # カスケード分類器を作成
facerect = cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=1, minSize=(10,10)) # 顔認識

img_result = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 出力結果用にコピー & RGB化
rect_color = (0, 255, 0) # 矩形の色 (B=0, G=255, R=0)
if len(facerect) > 0:
for rect in facerect:
# 検出範囲を矩形で囲む
cv2.rectangle(img_result, tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]), rect_color, thickness=2)

plt.imshow(img_result)

sample2.jpg

おしい・・・

sample3.jpg

とりあえず、こんな感じで使えます。