OpenCVを使った顔検出について
顔検出とは、画像内に写る人物の顔を矩形で検出することです。 この記事では、Python版OpenCVを使って、顔検出する方法を説明します。
方法1: カスケード型分類器を用いる
カスケード型分類器を用いて顔検出をする方法を説明します。
準備
以下のファイルを用意して任意の場所に保存します。
コード
以下のコードを実行して顔検出を行います。 ただし、コード上部の設定値は環境に合わせて適宜変更してください。
import cv2
# TODO: 環境に合わせて適宜変更する。
IMG_PATH = "img/sample01.jpg"
XML_PATH = "models/haarcascade_frontalface_default.xml"
DST_PATH = "sample01_detected.jpg"
# 画像を読み込む
img = cv2.imread(IMG_PATH)
# 顔検出モデルを読み込む
face_cascade = cv2.CascadeClassifier(XML_PATH)
# 推論する
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
bboxes = face_cascade.detectMultiScale(gray)
# 可視化する
img_vis = img.copy()
for bbox in bboxes:
cv2.rectangle(img_vis, (bbox[0], bbox[1]), (bbox[0]+bbox[2], bbox[1]+bbox[3]), (0, 0, 255), 2)
# 出力する
cv2.imwrite(DST_PATH, img_vis)
結果
実行結果の例を以下に示します。 画像を見ると、検出された人物の顔に矩形が可視化されていることがわかります。