blog.monophile.net

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。 また、計算を主題に制作を行い、現代音楽作品や公共インスタレーション作品など技術提供を行う。 三輪眞弘に師事する。

List

OpenCVで顔認証をしてみる

いきさつ

 画像処理といえば、顔認識?ってことでやってみます。

やってみる

sampleデータを探す

今回は画像処理では有名なlenaという画像と、顔認識のためのデータセットを使うのでファイルの場所を調べておきます。

$ locate lena.png
$ locate haar

以下が出力結果の抜粋。

/usr/share/matplotlib/sampledata/lena.png
/usr/bin/opencv_haartraining
/usr/share/doc/opencv-doc/haartraining.htm
/usr/share/man/man1/opencv_haartraining.1.gz
/usr/share/opencv/haarcascades
/usr/share/opencv/haarcascades/haarcascade_eye.xml
/usr/share/opencv/haarcascades/haarcascade_eye_tree_eyeglasses.xml
/usr/share/opencv/haarcascades/haarcascade_frontalface_alt.xml
/usr/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml
/usr/share/opencv/haarcascades/haarcascade_frontalface_alt_tree.xml
/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml
:

今回は/usr/share/matplotlib/sampledata/lena.pngと、 /usr/share/opencv/haarcascades/haarcascade_frontalface_default.xmlを使います。

コード

import cv2
haarpath = "/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml"
lenapath = "/usr/share/matplotlib/sampledata/lena.png"
lena = cv2.imread(lenapath)
graylena = cv2.cvtColor(lena,cv2.cv.CV_BGR2GRAY)
cascade = cv2.CascadeClassifier(haarpath)
facerect = cascade.detectMultiScale(graylena, scaleFactor=1.1, minNeighbors=3, minSize=(10, 10), flags = cv2.cv.CV_HAAR_SCALE_IMAGE)
white = (0xff,0xff,0xff)
cv2.rectangle(lena,tuple(facerect[0][0:2]),tuple(facerect[0][0:2]+facerect[0][2:4]),white,thickness=5)
cv2.imwrite("lenafacedetected.jpg",lena,lineType=cv2.CV_AA)

結果

参考URL