캐스케이드 분류기는 Object Detection이 가능한 OpenCV의 대표적인 API이다. 초기에는 얼굴 인식을 위한 목적으로 만들어졌고, 최근에는 대부분의 물체 인식까지 가능하다. OpenCV는 얼굴 인식에 대해 훈련된 데이터(haarcascade)를 XML 형태로 제공한다. OpenCV의 sources/data/haarcascades 폴더 내에 포함된 파일로 얼굴 인식이 가능하다.

opencv/sources/data/haarcascades 목록

 


Haarcasacade를 이용한 얼굴 인식

import cv2
import numpy as np

img = cv2.imread('faces.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Cascade 분류기 생성
cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 얼굴 검출
face = cascade.detectMultiScale(gray)

for (x,y,w,h) in face:
    cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0), 1)
    
cv2.imshow("Face detect", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

캐스케이드 분류기를 생성하는 cv2.CascadeClassifier()는 검출기 파일을 인자로 사용하며, detectMultiScale에 이미지를 인자로 지정하면 분류기에 해당하는 검출이 이루어진다. 얼굴이 아닌 눈을 검출하려면 haarcascade_eye.xml 파일을 사용하는 등 원하는 검출 부위에 따라 파일을 선택하면 된다. haarcascade는 얼굴 검출을 목적으로 개발되었지만, 출력 결과처럼 예상하지 못했던 부분에서 얼굴이라고 인식된 부분이 있는 것으로 보아 개선될 필요가 있다고 느껴진다.

 

* Reference

 

Cascade Classification — OpenCV 2.4.13.7 documentation

The object detector described below has been initially proposed by Paul Viola [Viola01] and improved by Rainer Lienhart [Lienhart02]. First, a classifier (namely a cascade of boosted classifiers working with haar-like features) is trained with a few hundre

docs.opencv.org

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기