8-5. 캐스케이드 분류기: 얼굴 검출
Viola-Jones 얼굴 검출기
Positive 영상(얼굴 영상)과 Negative 영상(얼굴이 아닌 영상)을 훈련하여 빠르고 정확하게 얼굴 영역 검출
기존 얼굴 검출 방식보다 약 15배 빠르게 동작
기존 방식과의 차별점:
1. 유사 하르 특징(Haar-like feature) 사용
흰색과 검정색 영역을 포함하는 사각형 형태의 필터 집합을 사용하여 두 영역의 차로 결과 값을 추출

2. AdaBoost에 기반한 강한 분류 성능
3. 캐스케이드(cascade) 방식을 통한 빠른 동작 속도
캐스케이드 분류기(Cascade classifier)의 경우 Negative 영역을 빠르게 넘어가도록 다단계 검사 수행 (수행 예시 링크)

캐스케이드 분류기 객체 생성: cv2.CascadeClassifier() -> <CascadeClassifier object>
캐스케이드 분류기 학습 데이터 불러오기: <CascadeClassifier object>.load(filename) -> retval
filename는 XML 파일 이름 (미리 학습된 XML 제공 링크) 각 파일에 대한 정보는 아래 그림 참고
retval는 파일 불러오는데 성공하면 True, 아니면 False

캐스케이드 분류기 멀티 스케일 객체 검출: <CascadeClassifier object>.detectMultiScale(image, scaleFactor, minNeighbors, flags, minSize, maxSize) -> result
image는 cv2.CV_8U 타입의 입력 영상
scaleFactor는 영상 축소 비율로 기본값은 1.1 (커질수록 객체 검출 속도가 빨라진다)
minNeighbors는 얼마나 많은 이웃 사각형이 검출되어야 최종 검출 영역으로 설정할지를 지정하는 값으로 기본값은 3
flags는 사용하지 않음
minSize는 (w,h) 튜플 형식의 최소 객체 크기 (특정 크기 지정할 경우 객체 검출 속도가 빨라진다)
maxSize는 (w,h) 튜플 형식의 최대 객체 크기
result는 (N,4) 크기와 numpy.int32 타입의 검출된 객체의 사각형 정보를 담은 numpy.ndarray

8-6. HOG 보행자 검출
HOG(Histogram of Oriented Gradients)
영상의 지역적 그래디언트 방향 정보를 특징 벡터로 사용
2005 CVPR 학회에서 보행자 검출 방법으로 소개되어 널리 사용되면서 이후 다양한 객체 인식에서 활용 (논문 링크)
특징 벡터의 크기는 실수로 4-BYTE를 곱해줘야 실제 메모리 할당 크기가 나온다.

HOG 기술자 객체 생성: cv2.HOGDescriptor() -> <HOGDescriptor object>
HOG 보행자 검출을 위한 학습된 분류기 계수 불러오기: cv2.HOGDescriptor_getDefaultPeopleDetector() -> retval
retval는 미리 훈련된 특징 벡터로 shape=(3781, 1), dtype=numpy.float32의 numpy.ndarray
SVM 분류기 계수 등록하기: <HOGDescriptor object>.setSVMDetector(svmdetector) -> None
svmdetector는 선형 SVM 분류기를 위한 계수
HOG 멀티 스케일 객체 검출 함수: <HOGDescriptor object>.detectMultiScale(img, hitThreshold, winStride, padding, scale, finalThreshold, useMeanshiftGrouping) -> foundLocations, foundWeights
img는 cv2.CV_8UC1 또는 cv2.CV_8UC3의 입력 영상
hitThreshold는 특징 벡터와 SVM 분류 평면까지의 거리에 대한 임계값
winStride는 셀 윈도우 이동 크기로 (0,0)의 경우 셀 크기와 같게 설정
padding는 패딩 크기
scale는 검색 윈도우 크기 확대 비율로 기본값은 1.05
finalThreshold는 검출 결정을 위한 임계값
useMeanshiftGrouping는 겹쳐진 검색 윈도우를 합치는 방법 지정 플래그
foundLocations는 검출된 사각형 영역 정보
foundWeights는 검출된 사각형 영역에 대한 신뢰도
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
8-7. 실전 코딩
간단한 스노우 앱
카메라 입력 영상에서 얼굴을 검출하여 재미있는 그래픽을 합성하는 프로그램
구현할 기능:
1. 카메라 입력 영상에서 얼굴 & 눈 검출하기
얼굴과 눈 검출용 XML 파일 다운로드
눈이 두 개 검출 되었을 경우에만 좌표 계산을 통하여 그래팩 합성
2. 눈 위치에 맞게 투명한 PNG 파일 합성 (PNG 파일 소스 링크)
두 눈 사이 거리에 맞게 PNG 파일 크기를 Resize 후 왼쪽 눈 위치가 일치하도록 합성 위치를 계산
Alpha 값이 255면 완전한 불투명, 0 이면 완전한 투명, 중간값이면 가중합 연산을 통해 파일 합성
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
인증 타임
얼굴 및 보행자 검출의 경우 이제 딥러닝 방식으로 더 많이 사용한다고 알려주셨다. 실제로 얼굴 및 표정 검출 시 캐스케이드는 배우지 못했던 것 같다. 그래도 굳이 딥러닝으로 돌려야할 만큼의 데이터를 분석하는 것이 아니라면 단순히 테스트 용으로는 충분해 보인다.
스노우 앱 프로그램의 경우 다른 png 파일로도 테스트 해보려고 했는데 스케일링 값이 제대로 계산되지 않아서 그런지 생각만큼 동작해주지 않았다. 스케일링 계산 방식을 제안해주신 방식 말고 더 고민해봐야할거 같다.



#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #OpenCV를 활용한 컴퓨터비전과 딥러닝 올인원 패키지 Online
패스트캠퍼스(FastCampus) 강의 둘러보러 가기
↓ ↓ ↓
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'남돈내배 > 2022_FastCampus_환급이벤트' 카테고리의 다른 글
| 패스트캠퍼스 챌린지 36일차 - Ch9. 특징점 검출과 매칭 (0) | 2022.02.28 |
|---|---|
| 패스트캠퍼스 챌린지 35일차 - Ch9. 특징점 검출과 매칭 (0) | 2022.02.27 |
| 패스트캠퍼스 챌린지 33일차 - Ch8. 영상 분할과 객체 검출 (0) | 2022.02.25 |
| 패스트캠퍼스 챌린지 32일차 - Ch8. 영상 분할과 객체 검출 (0) | 2022.02.24 |
| 패스트캠퍼스 챌린지 31일차 - Ch7. 이진 영상 처리 (0) | 2022.02.23 |