2017年8月7日月曜日

顔を認識してモザイクをかける@OpenCV3 + Python3

USBカメラなどから画像を取り込んで、顔と認識した部分にモザイクを掛けます。 都度顔認識していますので、物体追跡させて方が効率がいいのかも。

# -*- coding: utf-8 -*-
# for Python 3.4, 3.5
import cv2

def mozaic(cascade, image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    faces = cascade.detectMultiScale(
        gray, scaleFactor=1.11, minNeighbors=4, minSize=(5, 5))

    # 検出した部分を縮小して、拡大(最近傍補間)する
    for [x, y, w, h] in faces:
        face = image[y:(y + h), x:(x + w)]
        face_tmp = cv2.resize(face, (int(w/20),int(h/20)))
        face = cv2.resize(
            face_tmp, (w,h), interpolation=cv2.INTER_NEAREST)
        image[y:(y + h), x:(x + w)] = face
    return image

# デバイスは固定
cap = cv2.VideoCapture(0)
if cap.isOpened() is False:
        raise("IO Error.")

# haarcascade_frontalface_alt.xmlは下記から持ってくる
# https://github.com/opencv/opencv/tree/master/data/haarcascades
cascade_path = "haarcascade_frontalface_alt.xml"
cascade = cv2.CascadeClassifier(cascade_path)

while True:
    ret, frame = cap.read()
    frame = mozaic(cascade, frame)
    cv2.imshow('image', frame)
    k = cv2.waitKey(1)
    if k == 27:
        break;
        
cap.release()
cv2.destroyAllWindows()

0 件のコメント:

コメントを投稿