Help us understand the problem. What is going on with this article?

python+OpenCVで顔認識をやってみる

More than 5 years have passed since last update.

「顔認識ってサクッとできないのー?」って聞かれたので試してみた。
細かいチューニングとかはできてない。

インストール

Macだと結構簡単。OpenCVをbrewを使ってインストールする。
pythonはbrewで入れたものを使ってる。
numpyも必要みたいだけど、インストール済みだったんで省略。
どうやら、OpenCVをインストールする時にPython用のパッケージcv2がsite-packageにコピーされるみたいなので、インストール順としてはPython→numpy→OpenCVがいいみたい。

bash
brew tap homebrew/science
brew install opencv

Pythonで動かす

とりあえず、先にコードを晒す。
試行錯誤に使った時のコメントも、汚いけど残しておくことにした。
パラメータチューニング用の説明まで残しているがwww

recognize.py
# -*- coding: utf-8 -*-

import cv2

#HAAR分類器の顔検出用の特徴量
#cascade_path = "/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml"
cascade_path = "/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml"
#cascade_path = "/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_alt2.xml"
#cascade_path = "/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_alt_tree.xml"


image_path = "lena.jpg"

color = (255, 255, 255) #白
#color = (0, 0, 0) #黒

#ファイル読み込み
image = cv2.imread(image_path)
#グレースケール変換
image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY)

#カスケード分類器の特徴量を取得する
cascade = cv2.CascadeClassifier(cascade_path)

#物体認識(顔認識)の実行
#image – CV_8U 型の行列.ここに格納されている画像中から物体が検出されます
#objects – 矩形を要素とするベクトル.それぞれの矩形は,検出した物体を含みます
#scaleFactor – 各画像スケールにおける縮小量を表します
#minNeighbors – 物体候補となる矩形は,最低でもこの数だけの近傍矩形を含む必要があります
#flags – このパラメータは,新しいカスケードでは利用されません.古いカスケードに対しては,cvHaarDetectObjects 関数の場合と同じ意味を持ちます
#minSize – 物体が取り得る最小サイズ.これよりも小さい物体は無視されます
facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
#facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=3, minSize=(10, 10), flags = cv2.cv.CV_HAAR_SCALE_IMAGE)

print "face rectangle"
print facerect

if len(facerect) > 0:
    #検出した顔を囲む矩形の作成
    for rect in facerect:
        cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), color, thickness=2)

    #認識結果の保存
    cv2.imwrite("detected.jpg", image)

今回は学習用の画像を用意していないので、OpenCVに一緒に付いているHAAR分類器の特徴量を利用している。HAAR分類器についてはこちらを参照(第10回CV勉強会 OpenCV祭り 物体検出徹底解説!)。
有名なレナさんの画像だとどの特徴量でも認識できたが、他の画像で試すとhaarcascade_frontalface_default.xmlはあんまり上手く認識できなかったので、色々試したほうが良さげ。

元の画像
lena.jpg

認識後の画像
detected.jpg

wwacky
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした