Skip to main content

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)

結果

実行結果の例を以下に示します。 画像を見ると、検出された人物の顔に矩形が可視化されていることがわかります。 カスケード分類器による顔検出結果

参考文献