OpenCVを使用してPythonで画像内の顔を検出する

OpenCVを使用してPythonで画像内の顔を検出してみます。

OpenCVモジュールは、Pythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■Python

Pythonバージョン

今回のPythonのバージョンは、「3.8.2」を使用しています。(Windows10)

■画像を用意する

OpenCVモジュールを使用してPythonで画像内の顔を検出する前に、顔を検出する画像を用意します。

今回は「girl_sample.jpg」という女の子の画像を用意しました。保存されている場所は「C:\Users\user\test(フォルダパス)」です。

なお、今回用意した画像は著作権フリーとなります。

■OpenCVモジュールを使用して画像内の顔を検出する

画像の用意ができましたので、OpenCVモジュールを使用して画像内の顔を検出するスクリプトを書いていきます。

■コード

import cv2

face_classifier = cv2.CascadeClassifier(r"C:\Users\user\test\haarcascade_frontalface_default.xml")

image=cv2.imread(r"C:\Users\user\test\girl_sample.jpg")
gray= cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

faces = face_classifier.detectMultiScale(gray, 1.3,5)

for(x,y,w,h) in faces:
    cv2.rectangle(image,(x,y),(x+w,y+h),(127,0,255),2)

cv2.imshow("Detect face",image)
cv2.waitKey(0) 
cv2.destroyAllWindows()

インポートで、cv2(OpenCV)モジュールを呼び出します。cv2.imread()関数で今回用意した画像を読み込みます。読み込んだ後にgray変数を作成し、cv2.cvtColor()関数で第2のパラメーターで「cv2.COLOR_BGR2GRAY」と記述し、読み込んだ画像をグレースケール形式に変換します。

その後、face_classifier変数を作成し、顔を分類するためのXMLファイルを指定します。今回は、GitHubのレポジトリ(https://github.com/opencv/opencv/tree/master/data/haarcascades)から顔を分類するためのXMLファイルをWindows10にダウンロードして使います。今回、XMLファイルを置いた場所は「C:\Users\user\test(フォルダパス)」です。

次に、faces変数を作成し、detectMultiScale()関数を使います。これにより画像の中から異なるサイズの物体(顔)を検出することができます。

顔の周りに長方形を描くために、faces配列内の各項目をループするforループを使用します。cv 2.rectangle ()関数を使用して、画像の顔の周りに赤い長方形を描きます。

最後に、cv2.imshow()で画像を表示させます。

■実行

今回のスクリプトを「detect_face.py」という名前で保存し、コマンドプロンプトから実行してみます。

実行してみると、女の子の顔が検証されて、顔に長方形が描かれていることが確認できました。

コメント

タイトルとURLをコピーしました