下準備
OpenCV公式GitHubで配布されているカスケード分類器のファイル(haarcascade_frontalface_default.xml)をDLしておき、Colaboratoryにアップロードする。
from google.colab import files #
f = files.upload() #ファイルアップロード
コード
import io
import numpy as np
import requests
import cv2
from matplotlib import pyplot as plt
# Web上の適当な画像を読み込む
res = requests.get('https://www.warnerbros.com/sites/default/files/styles/key_art_270x400/public/matrix_keyart.jpg')
bin_data = io.BytesIO(res.content)
file_bytes = np.asarray(bytearray(bin_data.read()), dtype=np.uint8)
img = cv2.imdecode(file_bytes, cv2.IMREAD_COLOR)
# OpenCV上はBGRフォーマットだが、matplotで表示するためにRGBフォーマットに変換する
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 事前にアップロードした分類器ファイルを使用する
cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
# 分類器で検出
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(30, 30))
# 検出した領域を矩形で囲む
for (x, y, w, h) in face:
cv2.rectangle(img, (x, y), (x + w, y + h), (200,0,0), 3)
# デフォルトだとグリッドとxy軸ラベルが表示されるので非表示にする
plt.grid(False)
plt.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)
plt.imshow(img)