今回は、画像処理を始めようと思い、どうせやったら可愛い顔を用いて学習したいので、手始めに乃木坂ちゃんの顔を抽出して見ました。
では早速実験していきます。
目的
乃木坂46の写真を用いて顔認証を行う。
手法
・カスケード型分類器
openCVの中に入っている。これには以下のような種類のデータが用意されている。
これらは cv.CascadeClassifier()でパスを指定してxmlファイルを読み込み使用する。
・detectMultiScaleで検出する。
返り値は(左上の点のx座標, y座標, 幅, 高さ)となっている。
import cv2
import matplotlib.pyplot as plt
imagePath = 'nogizaka6.jpg'
face_cascade_path = '/usr/local/opt/opencv/share/'\
'OpenCV/haarcascades/haarcascade_frontalface_default.xml'
# カスケード分類器を作成
face_cascade = cv2.CascadeClassifier(face_cascade_path)
# 画像を読み込む
# img = cv2.imread('nogizaka.jpg')
img = cv2.imread(imagePath)
# グレースケール化
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# cv2.imwrite('c.jpg', img)
#囲む色
color = (0, 255, 0)
#顔を検知
faces = face_cascade.detectMultiScale(img_gray)
print (faces)
for (x,y,w,h) in faces:
# 検知した顔を矩形で囲む
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_color = img[y:y+h, x:x+w]
#画像表示
cv2.imwrite(imageName, img)
出力結果
元画像
抽出結果
元画像
抽出結果
このシステムは正面を向いている顔の認証ですので斜めを向いている画像には効果がありません。
また、今回の結果を見てると服などで輪郭が隠れている画像は上手くいっていないみたいです。
元画像
抽出画像
このように顔だけを切り取ることもできます。
今回は顔画像を抽出して見ました。
これからはこの画像と私がいつも使ってる機械学習、HTMを用いた顔認証をやっていきたいと思います。
p.s
やっぱり、プログラミングの勉強するのにも可愛いこの画像を使って勉強すると楽しいですね!笑