【Python】OpenCVで画像から顔検出するコード
こんばんは。
今回は、PythonでOpenCVを使用し、画像から顔検出を行うコードを紹介します。
まずはOpenCVをインストールします。
<Anacondaを使用している場合>
conda install -c conda-forge opencv
<main.py>
import cv2
import matplotlib.pyplot as plt
import datetime
def plot_and_save_faces(image_path, cascade_path):
# 画像を読み込む
image = cv2.imread(image_path)
# 元画像のdpiを取得
dpi = image.shape[0] / plt.gcf().get_figheight()
# グレースケールに変換
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 分類器を読み込む
face_cascade = cv2.CascadeClassifier(cascade_path)
# 顔を検出
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
# 画像を表示
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
# カウンターの初期化
count = 0
# 検出された顔の周りに枠を描画
for (x, y, w, h) in faces:
rect = plt.Rectangle((x, y), w, h, fill=False, color='red')
plt.gca().add_patch(rect)
count += 1
# 軸を非表示にする
plt.axis('off')
# 現在の日時を取得
now = datetime.datetime.now()
timestamp = now.strftime("%Y%m%d_%H%M%S")
# 結果を保存
output_path = f"result_{timestamp}.jpg"
plt.savefig(output_path, dpi=dpi, bbox_inches='tight', pad_inches=0)
# 保存した結果画像のパスを表示
print("顔検出結果を保存しました:", output_path)
print("検出された顔の数:", count)
# 画像を表示
plt.show()
# 画像ファイルのパス
image_path = "ABC.jpg"
# カスケード分類器のパス
cascade_path = cv2.data.haarcascades + "haarcascade_frontalface_alt2.xml"
# 顔検出結果をプロット上に表示し、結果画像を保存
plot_and_save_faces(image_path, cascade_path)
画像ファイルのパスは適宜変更してください。
すべての顔を検出できるわけではありませんので、ご注意ください。
検出した顔に赤枠を追加し、日時別のファイル名で保存します。
また、検出数もコンソールに表示させています。
この記事が気に入ったらサポートをしてみませんか?