Terry Very Good

[Object Detection] 2. 이미지를 이용한 얼굴/눈인식 본문

신기술 습득

[Object Detection] 2. 이미지를 이용한 얼굴/눈인식

테리베리 2021. 9. 5. 19:57
728x90
반응형

1. 간단한 이론

Haar-cascade: 영상/이미지에서 오브젝트를 검출위해 사용, 직사각형 영역으로 구성되는 특징을 사용하기 때문에 픽셀을 직접 사용할 때 보다 동작 속도가 빠름

자세한 내용은 https://webnautes.tistory.com/1352 를 참조합시다.

 

2. 이미지를 이용한 얼굴/눈인식

import cv2
import numpy as np
import os

def detectAndDisplay(frame):
    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    frame_gray = cv2.equalizeHist(frame_gray)
    #-- Detect faces
    faces = face_cascade.detectMultiScale(frame_gray)
    for (x,y,w,h) in faces:
        center = (x + w//2, y + h//2)
        frame = cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 4)
        faceROI = frame_gray[y:y+h,x:x+w]
        #-- In each face, detect eyes
        eyes = eyes_cascade.detectMultiScale(faceROI)
        for (x2,y2,w2,h2) in eyes:
            eye_center = (x + x2 + w2//2, y + y2 + h2//2)
            radius = int(round((w2 + h2)*0.25))
            frame = cv2.circle(frame, eye_center, radius, (255, 0, 0 ), 4)
        cv2.imshow('Capture - Face detection', frame)
        
data_root = 'D:/Computer Vision/ai_cv/image/'
cascade_root = 'D:/Computer Vision/ai_cv/haarcascades/'
img = cv2.imread(data_root+"marathon_03.jpg")
#img = cv2.resize(img, dsize=(500, 400), interpolation=cv2.INTER_AREA)

print("width: {} pixels".format(img.shape[1]))   # 가로 픽셀의 수
print("height: {} pixels".format(img.shape[0]))  # 세로 픽셀의 수
print("channel: {}".format(img.shape[2])) # 채널 수

(height, width) = img.shape[:2]

cv2.imshow("Original Image", img)

face_cascade_name = cascade_root+'haarcascade_frontalface_alt.xml'
eyes_cascade_name = cascade_root+'haarcascade_eye_tree_eyeglasses.xml'

face_cascade = cv2.CascadeClassifier()
eyes_cascade = cv2.CascadeClassifier()

#-- 1. Load the cascades
if not face_cascade.load(cv2.samples.findFile(face_cascade_name)):
    print('--(!) Error loading face cascade')
    exit(0)
if not eyes_cascade.load(cv2.samples.findFile(eyes_cascade_name)):
    print('--(!) Error loading eyes cascade')
    exit(0)
    

detectAndDisplay(img)


cv2.waitKey(0)
cv2.destroyAllWindows()

haarcascade_eye_tree_eyeglasses.xml
0.57MB
haarcascade_frontalface_alt.xml
0.65MB

 

728x90
반응형