본문 바로가기
Study/Udemy

[CVM] 1. Face Detection

by _YUJIN_ 2024. 1. 9.

목표 : python 라이브러리를 활용한 얼굴 인식 

1. Haarcascade 와 OpenCV를 활용한 Face Detection
2. HOG와 Dlib을 활용한 Face Detection
3. CNN과 Dlib을 활용한 Face Detection
4. 웹캠으로 Face Detection 

 

PIXELS 

  • 모든 이미지는 행과 열로 구성된 행렬 형식으로 표시된다. 
  • 이미지의 기본 구성 요소는 픽셀 그룹 (정사각형)으로 구성된 큰 셀이다. 
  • 가로 32픽셀, 세로 32픽셀이라고 할 때, 32 x 32 = 1024 으로 이미지의 총 픽셀 수는 1024이다.
  • 단일 픽셀에는 기본 색상당 하나씩 총 3개의 채널이 있다. (R,G,B) 색상에 따라 이미지의 RGB 값이 달라진다.
  • 가로 32픽셀, 세로 32픽셀이라고 할 때 RGB 값까지 포함하면 32 x 32 x 3 = 3072 이며, 컬러 이미지를 구성하는 데 필요한 정보량이다. 회색 이미지를 구성하는 데 필요한 정보량은 32 x 32 x 1 = 1024 이다.
  • 컬러 이미지는 R,G,B 값이 필요하기 때문에 흑백이미지 보다 이미지 크기가 크다는 걸 알 수 있다.
  • 흑백 이미지는 픽셀별로 R,G,B 값이 모두 동일하게 되어 있다.

 

Cascade 분류기

  • 얼굴과 기타 물체를 감지하는 가장 기본적인 방법 중 하나이다.
  • 얼굴 검출 용도로 많이 쓰이고, 눈, 보행자, 자동차 번호판까지 검출이 가능하다. 
  • Positive 이미지와 negative 이미지를 훈련하여 빠르고 정확하게 얼굴 영역을 검출한다. 
  • 모든 이미지를 가지고 Adaboost 알고리즘을 통해 학습한다.

 

주제 1. Haar cascade 와 OpenCV를 활용한 Face Detection

  • 개발 환경 : Colab

1. 구글 드라이브 마운트 

from google.colab import drive
drive.mount('/content/drive')

 

2. 이미지 불러오기 

import cv2
image = cv2.imread('/content/drive/MyDrive/people.jpg')

 

3. 이미지 확인

  • cv2_imshow() 메서드 활용
from google.colab.patches import cv2_imshow
cv2_imshow(image)

 

4. 이미지 크기 확인 및 변경

  • cv2.resize(이미지, (너비, 높이)) : 이미지를 지정한 너비와 높이 크기로 변경 
image.shape  #-- (1280, 1920, 3) : 높이 1280 픽셀, 너비가 1920 픽셀, 채널 3개
image = cv2.resize(image, (800, 600))
image.shape  #-- (600, 800, 3)

 

5. 흑백 변환 

image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2_imshow(image_gray)

 

6. 하르 캐스케이드 검출기로 얼굴 탐지하기

# Load prebuilt cascade classifier for detecting fontalfaces
cascade_face_detector = cv2.CascadeClassifier('/content/drive/MyDrive/colab/haarcascade_frontalface_default.xml')

 

  • detectMultiScale() 메서드를 활용해서 얼굴 검출
detections = cascade_face_detector.detectMultiScale(image_gray)
detections

''' output 
array([[677,  72,  68,  68],
       [115, 124,  53,  53],
       [475, 123,  59,  59],
       [387, 233,  73,  73],
       [ 92, 239,  66,  66],
       [390, 323,  56,  56]], dtype=int32)
'''

 

  • 행이 6개, 열이 4개 : 행이 6개라는 것은 검출된 얼굴이 6개라는 의미 
  • 첫 번째 열은 얼굴을 둘러싼 b-box의 왼쪽 상단 모서리의 x좌표, 두 번째 열은 검출된 얼굴을 둘러싼 b-box의 왼쪽상단 모서리의 y좌표, 세/네 번째 열은 b-box의 너비와 높이 
  • 검출된 이미지 확인
for (x, y, w, h) in detections:
  cv2.rectangle(image, (x, y), (x + w, y + h), (0,255,255), 5)
cv2_imshow(image)

반응형

'Study > Udemy' 카테고리의 다른 글

[CVM] 3. Face Detection (3)  (0) 2024.01.28
[CVM] 2. Face Detection (2)  (0) 2024.01.27