OpenCVをWindows Server 2012 R2に入れてPythonで使う、だけの話なのに死ぬ思いした話

Windowsの場合、
結論から言うと、必要なものは、
・Anaconda3(前提)
・opencv3 (Pythonライブラリ)
OpenCV 3.2.0 (本体)
の3つだけです。cv2.pydのコピぺとか環境変数の追加とか一切必要ありません。

1. opencv3のインストー

$conda install --channel https://conda.anaconda.org/menpo opencv3

2. OpenCV 3.2.0 のダウンロード

github.com

3. opencv-3.2.0-vc14.exeを実行し、得られたファイルを任意の場所に格納する

以上。

参考ページ:

qiita.com ただし、カスケードファイルが
C:\Users[username]\Anaconda3\envs[envname]\Library\etc
に入っていると書いてありますが、私が見たところ空でした。(うん?この記事はもしかしてPythonのライブラリであるopencv3と本体のOpenCV(3.1)を混同していないか?)
ですので(カスケードファイルを取得するために(?))OpenCV本体が必要になります。
opencv-3.2.0-vc14.exe実行後取得できるファイルの格納先はCドライブ直下にしました。以下のようにカスケードファイルの絶対パスをコード中に書いてやれば使いたい放題です。

import cv2, sys, re

# 入力ファイルを指定 
if len(sys.argv) <= 1:
    print("no input file")
    quit()
image_file = sys.argv[1] 

# 出力ファイル名
output_file = re.sub(r'\.jpg|jpeg|png$', '-mosaic.jpg', image_file)
mosaic_rate = 30 

# カスケードファイルのパスを指定
cascade_file = "C:¥opencv¥sources¥data¥haarcascades¥haarcascade_frontalface_alt.xml"

# 画像の読み込み 
image = cv2.imread(image_file)
image_gs = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # グレイスケール変換

# 顔認識を実行 
cascade = cv2.CascadeClassifier(cascade_file)
face_list = cascade.detectMultiScale(image_gs,
    scaleFactor=1.1,
    minNeighbors=1,
    minSize=(100,100))

if len(face_list) == 0:
    print("no face")
    quit()

# 認識した部分にモザイクをかける 
print(face_list)
color = (0, 0, 255)
for (x,y,w,h) in face_list:
    # 顔を切り抜く 
    face_img = image[y:y+h, x:x+w]
    # 切り抜いた画像を指定倍率で縮小 
    face_img = cv2.resize(face_img, (w//mosaic_rate, h//mosaic_rate))
    # 縮小した画像を元のサイズに戻す 
    face_img = cv2.resize(face_img, (w, h), 
        interpolation=cv2.INTER_AREA)
    # 元の画像に貼り付ける 
    image[y:y+h, x:x+w] = face_img
# 描画結果をファイルに書き込む
cv2.imwrite(output_file, image)

今回もこの本に書いてあるコードを拝借してます。

以上、超シンプルなやり方以外にも色々とインストール方法はたくさんあるようで、今回はそんな多岐にわたるマニュアル(ブログ)に翻弄されて時間と労力を消費してしまいました。

実はmac だと

$ brew tap homebrew/science
$ brew install opencv
$ pip install opencv-python

の連続コンボだけですぐに使えます。非常にシンプルです。ところがWindowsだと色々と面倒な処置が必要なようです。特に私が今回最初に参照したページにはシステム環境編集のPathをいじれとか書いてある。

www.buildinsider.net

googleで「opencv install windows」で検索すると一番先頭に出てくるページですから参照しようとしたのも無理はありません。素直に従ってPathの内容をここに記載してある通り書き換えて、他のPathが全部消えてしまったとしても無理はありません。(←死ぬ思いしたのここ)

qiita.com

ここもひどいもんです。曰く、「opencv/build/python/2.7/x64/以下にあるcv2.pydファイルをクリップボードにコピーします。このファイルをWinPython(ここはAnacondaに読み替え)のモジュール管理フォルダに格納します。」

↓そもそも公式ページからして良くわかりません。どこからダウンロードすればいいのか。

opencv.org

Pythonのライブラリも名称がはっきりしません。opencv3なのかcv2なのか。使うときは

import cv2

ですが、conda listで見るとopencv3と表記されています。

先述の本にはWindowsでのインストールの方法が記載されていなかったんです。そのせいで大変な思いをしました。なんとかして欲しかったものです。