Python AI 画像

OpenCV、matplotlib、NumPyで画像の顔検知および眼検知を行う。 (1)

OpenCV、matplotlib、numpyでほとんどの画像処理ができます。 OpenCVは、インテルが開発・公開したオープンソースライブラリで現在はITseezが保守しています。 matplotlibは、Python及びその科学計算用ライブラリNumPyのためのグラフ描画ライブラリです。 conda install -c conda-forge opencvconda install numpy、でインストールできます。 matplotlibは、anacondaでpythonをインストールすると自動的にインストールされるようです。

In [1]:
# 顔・目検出

import numpy as np
import cv2
import matplotlib.pyplot as plt

OpenCVには顔・目・鼻・口・上半身などの検出器が用意されていますが、自分でカスケード分類器を作り、好きな物体を検出することができる。 ここでは、顔と眼のhaarカスケード分類器を用います。

In [2]:
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') #  Stump-based 24x24 discrete(?) adaboost frontal face detector.
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

PLAYBOY社も公共の利用のための画像使用を許可したレナさんの画像をテスト画像として用いました。
事前にインターネットからダウンロードしてください。もしくは、お好きな画像で試してください。

In [3]:
img = cv2.imread('lenna.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
In [4]:
faces = face_cascade.detectMultiScale(gray, 1.3, 5) # face detect

for (x, y, w, h) in faces:
#    img = cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 3) # point1, point2, blue, thickness 3
    img = cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 3) # point1, point2, red, thickness 3
    #ROI Region of Interest 対象領域
    roi_gray = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]
    
    eyes = eye_cascade.detectMultiScale(roi_gray) # eye detect
    for (ex, ey, ew, eh) in eyes:
        cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2) # green
In [5]:
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)
plt.show()
In [ ]: