LoginSignup
10
7

More than 5 years have passed since last update.

Colaboratory上でOpenCVを使って顔認識をしてみる

Posted at

下準備

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)

結果

opencv.png
10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7