ChatGPTに、OpenCVを使って顔検知するPythonコードを書いてもらいました。
OpenCVには顔検知機能がデフォルトで含まれているので、新たに機械学習をかけなくても(精度は別として)すぐ使えます。便利ですね。
指示文(プロンプト):
PythonでopenCVを使って、指定された画像から顔を認識して、顔部分を赤色の罫線で囲って表示し、別名で保存するプログラムを提示してください。検知された顔の座標値も出力するようにしてください。
回答:
PythonでopenCVを使って、指定された画像から顔を認識して、顔部分を赤色の罫線で囲って表示し、別名で保存するプログラムは以下のようになります。
import cv2
# 画像を読み込む
image = cv2.imread('image.jpg')
# 顔検出用のカスケード分類器を読み込む
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# 画像をグレースケールに変換
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 顔を検出
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)
# 検出された顔に赤色の罫線を描画
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)
print(f'Face detected at x={x}, y={y}, w={w}, h={h}')
# 結果を表示
cv2.imshow('Faces', image)
# 結果を別名で保存
cv2.imwrite('result.jpg', image)
# キー入力待ち
cv2.waitKey(0)
# ウィンドウを閉じる
cv2.destroyAllWindows()
上記のコードは、写真の中に複数の顔がある場合、全ての顔を赤色の罫線で囲うようになっています。`face_cascade.detectMultiScale`メソッドは、画像内のすべての顔を検出し、その座標を`faces`変数に格納します。その後、`for`ループを使用して、検出されたすべての顔に赤色の罫線を描画します。
結果:
下記のように成功しました。掲載している検知前画像はBing-Image Creatorで生成したものです。
検知前:
検知後: