Logical Scribbles

[OpenCV] HOG를 이용한 간단한 객체 인식 본문

딥러닝/OpenCV

[OpenCV] HOG를 이용한 간단한 객체 인식

KimJake 2023. 11. 14. 22:41

이번에는 OpenCV 라이브러리를 통해 HOG를 이용한 간단한 객체 인식을 해보도록 하자. OpenCV는 처음 써본다. 

코드가 매우 간단하다. (OpenCV에서 많은 것을 지원해주는 듯 하다.)

 

1. 구현

import cv2

from google.colab import drive
drive.mount('HOG')

 

cv2 모듈을 불러오고, 구글 드라이브에 마운트 해준다.

 

from google.colab.patches import cv2_imshow

 

나는 구글 코랩으로 진행했는데, 코랩에서는 cv2.imshow()를 지원하지 않는다고 한다. 따라서 추가적으로 google.colab.patches에서 cv2_imshow를 불러와야 한다. (처음에 cv2.imshow()로 이미지 출력을 도전하였으나 실패했다.)

 

img = cv2.imread('/content/HOG/MyDrive/data/IMG_7460.jpg') 
#-- HOG 알고리즘 불러오기
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

#-- 객체 검출
detected, _ = hog.detectMultiScale(img)

#-- 검출 객체 박스 표시
for (x, y, w, h) in detected:
    cv2.rectangle(img, (x, y, w, h), (0, 255, 0), 3)
    cv2.putText(img, 'Person',(x, y - 5), cv2.FONT_HERSHEY_DUPLEX, 1, (0,255,0), 1)

cv2_imshow(img)

 

이미지를 드라이브에 업로드 해주고, HOG 알고리즘을 불러온다. 이 때 HOGDescriptor 와 setSVMDetector, cv2.HOGDescriptor.detectMultiScale이 사용된다.

 

cv2.HOGDescriptor

 

HOGDescriptor에 대한 설명이다. 지난 포스팅에서 설명했던 보행자 인식에서 주로 사용되는 parameter들이 기본값으로 설정되어 있다.

 

cv2.HOGDescriptor_getDefaultPeopleDetector()

64*128사이즈로 사람을 탐지하도록 훈련된 모델이라고 한다.

 

setSVMDetector(훈련된 모델)

SVM을 이용하여 탐지하도록 훈련된 모델이라고 한다. 이안에 cv2.HOGDescriptor_getDefaultPeopleDetector()를 넣게 되면 64*128 사이즈로 사람을 탐지하는 모델이 SVM을 이용하여 탐지하게 된다.

 

cv2.HOGDescriptor.detectMultiScale

인풋 데이터를 조금씩 축소하면서 다양한 크기에 대해서 검출을 하도록 한다. scale 값을 변경해서 속도를 향상시킬 수 있다고 한다. 아웃풋은 foundlocations 사각형 영역 정보입니다.

 

2. 결과

 

문씨

 

 

확실히 조명이 사람을 탐지하기에 적절하지 않거나 뒤의 배경이 검정색일 때 탐지가 잘 되지 않는 듯 하다.

 

끝!