ChatGPTに、OpenCVを使って顔検知するPythonコードを書いてもらった

ChatGPTに、OpenCVを使って顔検知するPythonコードを書いてもらいました。

OpenCVには顔検知機能がデフォルトで含まれているので、新たに機械学習をかけなくても(精度は別として)すぐ使えます。便利ですね。

指示文(プロンプト):

PythonopenCVを使って、指定された画像から顔を認識して、顔部分を赤色の罫線で囲って表示し、別名で保存するプログラムを提示してください。検知された顔の座標値も出力するようにしてください。

回答:

PythonopenCVを使って、指定された画像から顔を認識して、顔部分を赤色の罫線で囲って表示し、別名で保存するプログラムは以下のようになります。


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で生成したものです。

検知前:

検知後: