Windowsでサクっと顔認識をする遊び。

2011/05/12時点。まあ違う時期でも似たようなもんでしょう。

OpenCV 2.2をインストール

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.2/からOpenCV-2.2.0-win32-vs2010.exeをダウンロード、インストール。

Python 2.7.1をインストール

Download Python | Python.orgからPython 2.7.1 Windows Installerをインストール。

numpy 1.5.1をインストール

http://sourceforge.net/projects/numpy/files/NumPy/1.5.1/からnumpy-1.5.1-win32-superpack-python2.7.exeをインストール。

OpenCVPythonライブラリをコピー

C:\OpenCV2.2\Python2.7\Lib\site-packages

の中身を

C:\Python27\Lib\site-packages

にコピー。

適当にスクリプト

OpenCV.jpを参考に適当に書きましょう。

#!/usr/bin/python
# vim: fileencoding=utf-8:

# *参考 
#  * リファレンス
# http://opencv.jp/opencv-2.2/py/objdetect_cascade_classification.html#haar-feature-based-cascade-classifier-for-object-detection
#  * 解説ページ(C言語)
# http://www.aianet.ne.jp/~asada/prog_doc/opencv/opencv_obj_det_img.htm

import cv

storage = cv.CreateMemStorage()

# 「目検出」のための教師データの読み込み
hc = cv.Load("C:/OpenCV2.2/data/haarcascades/haarcascade_eye.xml")

# 画像の読み込み
img = cv.LoadImageM("face.jpg")

# 顔認識(速度のため適当にパラメータ)
#faces = cv.HaarDetectObjects(img, hc, storage)
faces = cv.HaarDetectObjects(img, hc, storage, 1.1, 100, 0, (50, 50))

# (R, G, B)
color = (255, 255, 255)

# 検出したパーツそれぞれの領域を
# 四角で囲む
for (x, y, w, h), n in faces:
  p1 = (x, y)
  p2 = (x + w, y + h)
  cv.Rectangle(img, p1, p2, color)
# 四角を描いた画像を保存
cv.SaveImage("face_detected.jpg", img)
face.jpg


face_detected.jpg

楽ですねー。ちなみにドワンゴ就活時に提出した画像だったと思います。

test