Logical Scribbles
[OpenCV] HOG를 이용한 간단한 객체 인식 본문
이번에는 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. 결과
확실히 조명이 사람을 탐지하기에 적절하지 않거나 뒤의 배경이 검정색일 때 탐지가 잘 되지 않는 듯 하다.
끝!
'딥러닝 > OpenCV' 카테고리의 다른 글
[OpenCV] 서로 다른 이미지 간 유사도 측정해보기 (0) | 2023.12.06 |
---|---|
[OpenCV] 이미지에 Selective Search 적용하고 IoU 계산해보기 (0) | 2023.11.21 |
[OpenCV] K-means 알고리즘을 사용하여 이미지 군집화 해보기 (0) | 2023.11.17 |