.Exeの開発記

遊戯王について書きます

OpenCV+Pythonで顔認識

スポンサーリンク

この記事はPythonOpenCVを利用して画像から顔を認識することを試した備忘録です.使用したのはPython3.6.2です.また,今回のプログラムを使用する前にpipを用いてnumpyとOpenCVのインストールを行いました.

 

使用した画像はこちら.私の押しの園田みおんさんの画像を使いました.

f:id:exe_dev:20190822211917j:plain

出典 : https://news.livedoor.com/article/image_detail/15209688/?img_id=18577181

 

ソースコードはこちら.

 

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
 
img = cv2.imread('./sonoda/6.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

このソースコードOpenCVの公式ドキュメントのコード(http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html)を使用したものになります.

画像はプログラムと同じディレクトリにsonodaという名前のディレクトリを作成し,その中に6.jpgという名前で保存しました.

また,今回は顔の検出にhaar cascadeを使用しました.

使用したhaarcascade_drontalface_alt.xmlOpenCVgithub(https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_alt.xml)からダウンロードできます.

 

実行結果は次のようになりました.

f:id:exe_dev:20190822212422p:plain

しっかり顔を認識していることが確認できます.

問題点

自撮りのような顔が傾いている画像だと顔が認識されづらいです.

その場合は今回の画像のように正面を向いているように画像を回転させる必要があるようです.(処理数が増えるけど,どうすんだこれ??)