목표 : 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. 하르 캐스케이드 검출기로 얼굴 탐지하기
- 사전 훈련된 검출기 xml 파일을 다운받아서 사용 (https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml)
- cv2.CascadeClassifier() 메서드를 활용해서 훈련된 검출기 불러오기
# 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 |