얼굴 검출 (Haar Cascade Classifier)

qkdk·2024년 8월 22일

openCV

목록 보기
8/15
post-thumbnail
  • 얼굴을 검출하는 알고리즘
  • 다른 검출 알고리즘에 비해 빠르다
  • 얼굴을 인식(같은 사람인지, 다른 사람인지)를 하지는 못한다.

대표적 특징

Haar Like Feature

  • Edge, Line ... 등등의 featrue를 활용해 특징을 추출한다.
  • 이미지와 겹쳐 검정색 부분은 +, 하얀색 부분은 - 연산을 수행

Integral Image

  • Feature를 계산할때마다 픽셀을 계산하면 시간이 오래걸린다.
  • 일종의 DP사용
  • (0,0) 부터 (n-1, n-1) 까지 합한 결과를 모은 행렬 사용

Cascade Classifier

  • 빠르고 쉬운 연산부터 분류기에 투입하여, 특성이 일치하지 않는 윈도우는 거부, 끝까지 통과하면 특징 검출
  • AdaBoost알고리즘 적용

Code in Cv2

# 사전 학습된 cascade 파일 (.xml) 적용
face_cascade = cv2.CascadeClassifier('../DATA/haarcascades/haarcascade_frontalface_default.xml')

# 얼굴 탐지
def detect_face(img):
    face_img = img.copy()
    face_rects = face_cascade.detectMultiScale(face_img) 
    for (x,y,w,h) in face_rects: 
        cv2.rectangle(face_img, (x,y), (x+w,y+h), (255,255,255), 10) 
        
    return face_img
    
# 개선된 얼굴 탐지
def adj_detect_face(img):
    face_img = img.copy()
    face_rects = face_cascade.detectMultiScale(face_img,scaleFactor=1.2, minNeighbors=5) 
    for (x,y,w,h) in face_rects: 
        cv2.rectangle(face_img, (x,y), (x+w,y+h), (255,255,255), 10) 
        
    return face_img

detectMultiScale 메소드 Syntax

  • detectMultiScale 함수를 사용하여 다양한 크기의 얼굴을 검출합니다.
  • scaleFactor=1.1: 각 이미지 스케일에서 크기가 10%씩 축소됩니다.
  • minNeighbors=5: 객체 후보가 최소 5번 겹쳐진 경우에만 얼굴로 검출됩니다.
  • minSize=(30, 30): 최소 한 변이 30 픽셀 이상의 객체만 검출됩니다.
  • maxSize=(300, 300): 최대 한 변이 300 픽셀 이하의 객체만 검출됩니다.
개선 전개선 후
업로드중..업로드중..
profile
qkdk

0개의 댓글