Python OpenCVで画像内の正面を向いた顔の検出を行う

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

検出モデルの設定

人物正面のフェイスを検出するモデルは以下のGitHubから取得できる。

opencv/haarcascade_frontalface_alt.xml at master · opencv/opencv · GitHub

import cv2

cascade_file = "haarcascade_frontalface_alt.xml"
cascade = cv2.CascadeClassifier(cascade_file)


正面フェイスの検出

こちらもモノクロGRAYをベースに検出を行う。

img = cv2.imread("img/people-looking-in-laptop-5069842_640.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)
face_list = cascade.detectMultiScale(gray)

for (x, y, w, h) in face_list:
    color = (255,0,0)
    pen_w = 3
    cv2.rectangle(img, (x, y), (x+w, y+h), color,thickness=pen_w)

plt.imshow(img)
plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis
plt.show()   

検出結果のプロット

f:id:letitride:20200719000318p:plain:w500


コード全文

import cv2

cascade_file = "haarcascade_frontalface_alt.xml"
cascade = cv2.CascadeClassifier(cascade_file)

img = cv2.imread("img/people-looking-in-laptop-5069842_640.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)
face_list = cascade.detectMultiScale(gray)

for (x, y, w, h) in face_list:
    color = (255,0,0)
    pen_w = 3
    cv2.rectangle(img, (x, y), (x+w, y+h), color,thickness=pen_w)

plt.imshow(img)
plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis
plt.show()