๐Ÿ˜Haar Face

import numpy as np
import cv2

# ์–ผ๊ตด ๊ฒ€์ถœ์„ ์œ„ํ•œ ์ผ€์Šค์ผ€์ด๋“œ ๋ถ„๋ฅ˜๊ธฐ ์ƒ์„ฑ --- โ‘ 
face_cascade = cv2.CascadeClassifier('./data/haarcascade_frontalface_default.xml')
# ๋ˆˆ ๊ฒ€์ถœ์„ ์œ„ํ•œ ์ผ€์Šค์ผ€์ด๋“œ ๋ถ„๋ฅ˜๊ธฐ ์ƒ์„ฑ ---โ‘ก
eye_cascade = cv2.CascadeClassifier('./data/haarcascade_eye.xml')
# ๊ฒ€์ถœํ•  ์ด๋ฏธ์ง€ ์ฝ๊ณ  ๊ทธ๋ ˆ์ด ์Šค์ผ€์ผ๋กœ ๋ณ€ํ™˜ ---โ‘ข
img = cv2.imread('../img/children.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# ์–ผ๊ตด ๊ฒ€์ถœ ---โ‘ฃ
faces = face_cascade.detectMultiScale(gray)
# ๊ฒ€์ถœ๋œ ์–ผ๊ตด ์ˆœํšŒ ---โ‘ค
for (x,y,w,h) in faces:
    # ๊ฒ€์ถœ๋œ ์–ผ๊ตด์— ์‚ฌ๊ฐํ˜• ํ‘œ์‹œ ---โ‘ฅ
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    # ์–ผ๊ตด ์˜์—ญ์„ ROI๋กœ ์„ค์ • ---โ‘ฆ
    roi = gray[y:y+h, x:x+w]
    # ROI์—์„œ ๋ˆˆ ๊ฒ€์ถœ ---โ‘ง
    eyes = eye_cascade.detectMultiScale(roi)
    # ๊ฒ€์ถœ๋œ ๋ˆˆ์— ์‚ฌ๊ฐํ˜• ํ‘œ ---โ‘จ
    for (ex,ey,ew,eh) in eyes:
        cv2.rectangle(img[y:y+h, x:x+w],(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
# ๊ฒฐ๊ณผ ์ถœ๋ ฅ 
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()