OpenCVライブラリを使えば、画像中から顔を検出するプログラムを簡単に書くことができる。すでに公開されている顔検出器のカスケードファイル(haarcascade_frontalface_default.xml)を使ってみた。
import os
import cv2
from matplotlib import pyplot as plt
#ダウンロード済みのカスケードファイルのパスを指定
cascade_path = "/content/drive/MyDrive/haarcascade_frontalface_default.xml"
#顔検出したい画像ファイルのパスを指定
image_path = "/content/drive/MyDrive/20221218.jpg"
color = (255, 255, 255) #白
#ファイル読み込み
image = cv2.imread(image_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
#グレースケール変換
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#カスケード分類器の特徴量を取得する
cascade = cv2.CascadeClassifier(cascade_path)
#物体認識(顔認識)の実行
facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=3, minSize=(30, 30))
if len(facerect) > 0:
# 検出した領域を矩形で囲む
for (x, y, w, h) in facerect:
cv2.rectangle(image, (x, y), (x + w, y + h), color, 3)
# デフォルトだとグリッドとxy軸ラベルが表示されるので非表示にする
plt.grid(False)
plt.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)
plt.imshow(image)
#認識結果の保存
image_out = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
cv2.imwrite("detected.jpg", image_out)
試しに、この写真を使って、顔検出を実行してみました。
顔検出の処理結果、15番のK田選手だけ認識しませんでした!
コメント