Section 1. 캐스케이드 분류 (Cascade Classifier)
1. Viola – Jones 얼굴 검출기
수 천개의 얼굴 영상(Positive)과 얼굴이 아닌 영상(Negative)을 훈련하여 분류 모델을 구현하고 해당 모델을 이용해서 입력 영상 속 얼굴을 검출하는 방식
- 2001년에 바이올라 존스가 얼굴 검출 관련 논문 발표
- AdaBoost 라는 알고리즘을 사용한 머신러닝 기술
- 유사 하르(Harr-like) 특징을 사용
- 캐스케이드(cascade) 방식을 통한 빠른 동작 속도
2. 유사 하르 특징 (Haar-like features)
- 사각형 형태의 필터 집합을 사용
- 흰색 사각형 영역 픽셀 값의 합에서 검정색 사각형 영역 픽셀 값을 뺀 결과 값을 추출
- 최종적으로 + 값인지 - 값인지를 기준으로 얼굴의 특징이 있는지 판단
- 사람의 눈쪽은 눈썹과 눈동자 등으로 인해 어둡고, 그 아래 콧등 부분은 밝게 표시되는 특징들을 추출
3. 캐스케이드 분류기(Cascade classifier)
- 특징을 모으는 작업은 에이다 부수트 알고리즘으로인해 수행되며 평균적으로 6000개의 특징을 추출하는데, 모두 비교하기에는 비효율적
- 또한 영상 파일에서 보통 얼굴이 한 두개 있을 뿐 나머지 부분은 얼굴이 아닌 non-face 영역
- non-face인 영역을 빠르게 skip 하도록 다단계 (cascade) 검사 수행
- 캐스케이드 분류기 얼굴 검출 과정 시각화 영상 유튜브 링크
4. cv2.CascadeClassifier 객체 생성 및 학습 데이터 불러오기
- cv2.CascadeClassifier 객체, 학습 데이터 파일
- filename - 얼굴을 검출하도록 특징을 지정해논 파일이며 미리 학습된 모델
- 객체를 생성할 때 생성자를 이용해서 filename 값으로 XML 파일을 지정
- 또는 객체 생성 후 load 함수를 이용하여 학습된 모델 데이터 (XML) 삽입
5. 미리 학습된 XML 파일
6. 캐스케이드 분류 함수
- detectMultiScale 함수
- image - 입력영상
- scaleFactor - 영상 축소 비율 (기본값 1.1.)
- minNeighbors - 얼마나 많은 이웃 사각형이 검출되어야 최종 검출 영역으로 설정할지를 지정 (기본값 3)
- flags - (현재)사용되지않음
- minSize - 최소 객체 크기(w, h)
- maxSize - 최대객체크기(w,h)
- result - 검출된 객체의 사각형 정보(x, y, w, h)를 담은 numpy.ndarray. shape=(N, 4)
7. 캐스케이드 분류 실습
- 실습 코드 핵심 부분
① 입력 영상 파일을 src로 불러옴
② cv2.CascadeClassifier 객체를 생성하고 다운로드 받은 XML 파일을 생성자 인자로 넘김
③ detectMultiScale 함수를 이용하여 얼굴로 판단되는 부분의 정보를 faces 변수에 저장
④ faces 에는 x,y,w,h 정보가 담겨있으므로 이를 이용하여 사각형을 출력
- 출력 결과