やまけいのブログ

当ブログの内容はバイアスのかかった個人の見解です。

顔を認識したい。

この記事は Speee Advent Calendar 2017 の9日目の記事です。

昨日は @mitsuyoshi さんから、 再利用可能なContainer View Controllerの作り方 でした。

本日のお題は「顔認識」

特に真新しいトピックはないのですが、導入だけでも案外躓いたので、ログとして残しておきます。

これだけ人工知能やら機械学習やら進んだ世の中ですので、先輩から

っ「今日中にこの画像、顔認識だけ済ませといて」

みたいな場面も増えてくると思います。そんな方のお役に立てればいいなと思っています。

実行環境

  • Windows10
  • Python3.6.3 + OpenCV3.3.0
  • PythonはAnaconda環境

インストール

往々にしてそうなのですが、実行より環境の構築で躓きました。いろいろやってみたのできちんと覚えていないのですが、おそらく下記でできました。

pip install opencv-python

conda install ではなんだかうまくいかなかったです。

コード

わりと簡単にできました。

import cv2

# モデルの読み込み
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 画像読み込み・グレースケール化
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 顔を検知
faces = face_cascade.detectMultiScale(gray)

# 顔を線で囲む処理を顔の数繰り返す
for (x,y,w,h) in faces:
    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()

結果

人の顔でやってもあんまり面白くないので、annoying orangeのナシを使わせていただきました。

f:id:yamakei7323:20171209051649p:plain  f:id:yamakei7323:20171209051814p:plain

出来ました!

理論的な詳細とか追記します。

明日は @iida-hayato さんから、 blockchainの話を書きたいです。