- Viola - Jones 얼굴 검출기
- Positive영상 (얼굴 영상)과 negative 영상(얼굴 아닌 영상)을 훈련하여 빠르고 정확하게 얼굴 영역을 검
- 기존 방법과의 차별점
- 유사 하르(Haar-like) 특징을 사용
- AdaBoost에 기반한 강한 분류 성능
- 캐스케이드(cascade) 방식을 통한 빠른 동작 속도
- 기존 얼굴 검출 방법보다 약 15배 빠르게 동작
- 유사 하르 특징 (Haar-like features)
- 사각형 형태의 필터 집합을 사용
- 흰색 사각형 영역 픽셀 갑스이 합에서 검정색 사각형 영역 픽셀 값을 뺀 결과 값을 추출
- 캐스케이드 분류기(Cascade classfier)
- 일반적인 영상에는 얼굴이 한 두개 있을 뿐, 나머지 영역은 대부분 non-face영역
- Non-face 영역을 빠르게 skip하도록 다단계 검사 수행
github.com/opencv/opencv/tree/master/data/haarcascades
- CascadeClassifier 멀티스케일 객체 검출 함수
cv2.CascadeClassfier.detectMultiScale(image,scaleFactor=None,minNeighbors=None,flags=None,
minSize=None,maxSize=None) -> result
• image: 입력 영상 (cv2.CV_8U)
• scaleFactor : 영상 축소 비율 . 기본값은 1.1.
--> 내부에서 검출하는 사각형의 크기를 몇배씩 키워줄것인지... 1.2로 변경하면 키우는것을 좀더 듬성듬성하게 키우는 것이다
• minNeighbors : 얼마나 많은 이웃 사각형이 검출되어야 최종 검출 영역으로 설정할지를 지정 . 기본값은 3.
• flags: (현재) 사용되지 않음
• minSize : 최소 객체 크기 . (w, h) 튜플
• maxSize : 최대 객체 크기 . (w, h) 튜플
• result: 검출된 객체의 사각형 정보 (x, y, w,h) 를 담은 numpy.ndarray .shape=(N,4).dtype=numpy.int32
- 정면 얼굴 검출 예제
import sys
import numpy as np
import cv2
src = cv2.imread('lenna.bmp')
if src is None:
print('Image load failed!')
sys.exit()
classifier=cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml')
if classifier.empty():
print('XML load failed!')
sys.exit()
faces=classifier.detectMultiScale(src,scaleFactor=1.2,minSize=(100,100))
for (x,y,w,h) in faces:
cv2.rectangle(src,(x,y,),(x+w,y+h),(255,0,255),2)
cv2.imshow('src',src)
cv2.waitKey()
cv2.destroyAllWindows()
'Computer Vision > opencv(python)' 카테고리의 다른 글
[54] 7) 간단 스노우앱 (0) | 2021.03.24 |
---|---|
[53] 6) HOG 보행자 검출 (0) | 2021.03.24 |
[51] 4) 템플릿 매칭 (2): 인쇄체 숫자 인식 (0) | 2021.03.24 |
[50] 3) 템플릿 매칭(1): 이해하기 (0) | 2021.03.24 |
[49] 2) 모멘트 기반 객체 검출 (0) | 2021.03.24 |