OpenCVを使ったHaar Cascadesによる顔検知

Haar-like 特徴量を用いた分類器で顔認識、というか顔検知するというネタはよくありますが、内容は全然覚えていないというか理解してなかったのでちょっと触れてみました。

スポンサーリンク

Haar-like features

物体の認識に使われるデジタル画像の特徴。リアルタイムで顔を検知できた最初の分類方法で、画像を四角に切り取るための function として Haar-wavelet があり、これに関連して Haar-like と付けられたようです。

OpenCV では XML で分類器を読み込んで適用することで顔検知できます。

Haar Cascade というのはこの Haar-like features を用いて検知する分類方法を指しますですが、ぐぐっても OpenCV 関連の話しか出てこないので特有の言い回しなのかもしれないですね。

 実装

今回はデフォルトの特徴量マップではなく、アニメの顔検知で有名?な lbpcascade_animeface.xml を使わせてもらいました。

実装方法は簡単なので OpenCV のドキュメントとか作者さんのブログ見ればわかります。

import cv2

cascade = cv2.CascadeClassifier('lbpcascade_animeface.xml')
image = cv2.imread('test.jpg')
gray = cv2.equalizeHist(cv2.cvtColor(image, cv2.COLOR_BGR2GRAY))

faces = cascade.detectMultiScale(
            gray, scaleFactor=1.1, minNeighbors=5, minSize=(24, 24))

for x,y,w,h in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)

cv2.imshow('AnimeFaceDetect', image)
cv2.waitKey(0)

初心者の私でも一回実行して改めてソースコードを眺めると、大体何しているのかわかる程度に簡潔で嬉しいです。リファレンス読めばいいんですけどね。

実行してみるとこんな感じです。ケモノ顔はちょっと相性悪いですかね?

最後に

顔検知がこんなに手軽にできるなんて、すごーい!たーのしー!(け並)

タイトルとURLをコピーしました