OpenCVを使用してPythonで画像内の顔を検出してみます。
OpenCVモジュールは、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」という名前で保存し、コマンドプロンプトから実行してみます。
実行してみると、女の子の顔が検証されて、顔に長方形が描かれていることが確認できました。
コメント