人工知性を作りたい

私が日々、挑戦したことや学んだことなどを紹介していく雑記ブログです。 (新しいAI技術HTM, 専門の音声信号処理, 趣味のアニメ等も書いてます。)

global navigation menu page top

pythonと画像処理を用いて乃木坂ちゃんの顔を抽出して見た!

今回は、画像処理を始めようと思い、どうせやったら可愛い顔を用いて学習したいので、手始めに乃木坂ちゃんの顔を抽出して見ました。

 

では早速実験していきます。

 

目的

乃木坂46の写真を用いて顔認証を行う。

 

手法

openCV

 ・カスケード型分類器

openCVの中に入っている。これには以下のような種類のデータが用意されている。

  • 正面の顔検出: haarcascade_frontalface_default.xml
  • 瞳検出:    haarcascade_eye.xml
  • 笑顔検出:   haarcascade_smile.xml

これらは 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)

 

 

出力結果

元画像

f:id:hiro-htm877:20190204221415j:plain

 

抽出結果

f:id:hiro-htm877:20190204221447j:plain

 

元画像

f:id:hiro-htm877:20190204221550j:plain

 

抽出結果

f:id:hiro-htm877:20190204221613j:plain

 

このシステムは正面を向いている顔の認証ですので斜めを向いている画像には効果がありません。

また、今回の結果を見てると服などで輪郭が隠れている画像は上手くいっていないみたいです。

 

元画像

f:id:hiro-htm877:20190204221848j:plain

 

抽出画像

f:id:hiro-htm877:20190204221910j:plain

 

f:id:hiro-htm877:20190204222207p:plain

このように顔だけを切り取ることもできます。

 

 

 

今回は顔画像を抽出して見ました。

これからはこの画像と私がいつも使ってる機械学習、HTMを用いた顔認証をやっていきたいと思います。

 

p.s

やっぱり、プログラミングの勉強するのにも可愛いこの画像を使って勉強すると楽しいですね!笑