OpenCVを使った顔と目の検出方法 Python

PythonのOpenCVを使った顔と目の検出をする方法とhaarcascadeファイルのダウンロード方法について投稿します。
プログラミングはColaboratoryで実行しています。

この投稿では以下2つのhaarcascadeファイルを使って顔検出と目の検出を行います。

haarcascade_frontalface_alt2.xml
haarcascade_eye.xml

目次

・haarcascadeファイルのダウンロード方法

・OpenCVを使った顔と目を検出するプログラム

・実行して表示した画像


haarcascadeファイルのダウンロード方法

プログラムで扱う2つのhaarcascadeファイルのダウンロード方法
OpenCVの公式GitHubにあるdataフォルダの中のhaarcascadesフォルダからダウンロードするファイルを右クリックをし、名前を付けてリンク先を保存でダウンロードできます。

これが公式のサイトのリンクですhttps://github.com/opencv/opencv

ダウンロードができたらColaboratoryのプログラムを実行する場所に新規 ファイルのアップロードから持ってきます。

OpenCVを使った顔と目を検出するプログラム

顔と目を検出するプログラムを説明をします。
まず、画像を読み込むためにドライブをマウントします。そして、30行目のcv2.imreadで読み込んでplt.imshowで表示します。
※cv2で読み込んだ画像はRGBではなくBGRになっているので、plt.imshowで表示するときはRGBに変換して表示します。

35行目は読み込んだ画像データを変数imageに入れ、顔の検出と目の検出をする自作関数face_eye(image)に渡します。

9行目はグレイにした画像から、顔を検出するhaarcascadeファイルを使って顔を検出します。検出した顔の座標は変数facesに入ります。
※顔と目を検出するときはグレイにした画像を使います。グレイ画像にして、色を少なくすることで処理を行いやすくしています。

10行目から18行目までは読み込んだ画像から顔を検出した座標を使って、顔の部分を切り取ります。それから、目を検出するためにグレイにした画像からも検出した座標を使って、顔の部分を切り取ります。そして、13行目で目を検出するhaarcascadeファイルを使って目を検出します。検出した目の座標は変数eyeに入ります。その後、切り取った顔の表示をします。

19行目から27行目は検出した目の座標を使って切り取った顔から目の部分だけを切り取ります。そして、目だけを表示し、cv2.rectangleを使って四角の枠で目を囲みます。

36行目から38行目は四角の枠で目を囲んだ画像を表示します。

↓実行結果↓

実行して表示した画像