article thumbnail image
Published 2021. 7. 24. 18:56

- OpenCV 와 haarcascade를 이용한 얼굴 인식

 

 

 

<개요>

1. 사전 학습된 분류기인 haarcascade_frontalface_alt.xml 을 로드합니다.

2. 객체 탐지 알고리즘인 detectMultiScale 을 실행하기 위해 이미지 프로세싱을 합니다.

3. detectMultiScalerectangle 함수를 이용하여 원본 이미지에 bbox를 그려줍니다.

 

 

# harrcascade

기계학습을 이용한 객체 탐지 알고리즘입니다.

CNN과 같은 신경망이 아닌, 하르 특징 (Haar Features) 계산을 통해 객체를 찾습니다.

 

 

 

<코드 설명>

# 얼굴 찾는 모델
model_file = "face_det_pretrained/haarcascade_frontalface_alt.xml"

# 모델 로드
clf = cv.CascadeClassifier(model_file)

# 이미지 로드
src = cv.imread("images/iu.png")
img = src.copy()

# gray 스케일 변경
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY

모델과 이미지를 로드하고 이미지는 gray 스케일로 변경합니다.

 

 

# haarcascade 얼굴 탐지 알고리즘 
results = clf.detectMultiScale(gray, # 입력 이미지
                               scaleFactor=1.2, # 인접 객체 최소 거리 픽셀
                               minNeighbors=1, # 인접 객체 최소 거리 픽셀
                               minSize=(25, 25) # 탐지 객체 최소 크기
                               )
print(results)

detectMultiScale 을 통해 객체 탐지 알고리즘을 실행해줍니다.

 

 

detectMultiScale 을 이용한 results 값 -> 탐지된 얼굴의 x, y, width, height 값들

 

 

for box in results:
    x, y, w, h = box
    
    # bbox 그리기
    cv.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), thickness=2)

cv.imshow("src", img)
cv.waitKey(0)
cv.destroyAllWindows()

rectangle 함수를 이용해 bbox 를 그려줍니다.

 

 

 

<전체 코드>

import cv2 as cv

model_file = "face_det_pretrained/haarcascade_frontalface_alt.xml"
clf = cv.CascadeClassifier(model_file)

src = cv.imread("images/iu.png")
img = src.copy()
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

results = clf.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=1, minSize=(25, 25))
print(results)

for box in results:
    x, y, w, h = box
    cv.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), thickness=2)

cv.imshow("src", img)
cv.waitKey(0)
cv.destroyAllWindows()

 

 

 

<실행 화면>

아이유님 얼굴 탐지

 

 

 

- Just Do It -

반응형

'Python > Machine_vision' 카테고리의 다른 글

[Python] YoloV5 custom dataset 학습  (0) 2021.08.14
[Python] 손 글씨 인식  (0) 2021.07.24
복사했습니다!