プログラミング

Python3.5およびOpenCVでWebカメラを用いたリアルタイム顔認識と自動モザイク

Webカメラを用いた認識の初歩としてまずは顔認識をおさらい。
そのうえで認識された顔にモザイクをかける処理をする。

すこし動かしてみたが、あまりスムーズにはモザイクがかからない模様。
また背景がごちゃごちゃしていると顔認識もうまくいかなかったりするようだ。
この辺りは最近の機械学習等でより精度の高い認識ができているのかな?と思っている。

コード例

import numpy as np
import cv2
face_cascade = cv2.CascadeClassifier('C:\Anaconda3\pkgs\opencv3-3.1.0-py35_0\Library\etc\haarcascades\haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(2)
def mosaic(img, alpha):
# 画像の高さと幅
w = img.shape
h = img.shape[0]
# 縮小→拡大でモザイク加工
img = cv2.resize(img,(int(w*alpha), int(h*alpha)))
img = cv2.resize(img,(w, h), interpolation=cv2.INTER_NEAREST)
return img
while True:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
for x, y, w, h in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
face = img[y: y + h, x: x + w]
face_gray = gray[y: y + h, x: x + w]
img[y:y+h, x:x+w] = mosaic(img[y:y+h, x:x+w], 0.05)
cv2.imshow('img', img)
key = cv2.waitKey(10)
if key == 27:  # ESCキーで終了
break
cap.release()
cv2.destroyAllWindows()
RELATED POST
翻訳 »