Computer Vision/opencv(python)

[53] 6) HOG 보행자 검출

jwjwvison 2021. 3. 24. 14:38
  • HOG(Histogram of Oriented Gradients) 란?
    • 영상의 지역적 그래디언트 방향 정보를 특징 벡터로 사용
    • 2005년 CVPR학회에서 보행자 검출 방법으로 소개되어 널리 사용되기 시작함
    • 이후 다양한 객체 인식에서 활용됨

 

  • HOG 멀티스케일 객체 검출 함수
cv2.HOGDescriptor.detectMultiScale(img , hitThreshold=None , winStride=None, padding=None, 
                           scale=None, finalThreshold=None,useMeanshiftGrouping=None)--> foundLocations , foundWeights

 • img : 입력 영상 . cv2.CV_8UC1 또는 cv2.CV_8UC3.
 • hitThreshold: 특징 벡터와 SVM 분류 평면까지의 거리에 대한 임계값
 • winStride: 셀 윈도우 이동 크기 . (0, 0) 지정 시 셀 크기와 같게 설정
 • padding: 패딩 크기
 • scale: 검색 윈도우 크기 확대 비율 . 기본값은 1.05.
 • finalThreshold : 검출 결정을 위한 임계값
 • useMeanshiftGrouping : 겹쳐진 검색 윈도우를 합치는 방법 지정 플래그
 • foundLocations (출력) 검출된 사각형 영역 정보
 • foundWeights : (출력) 검출된 사각형 영역에 대한 신뢰도

 

  • HOG 보행자 검출 예제
import sys
import random
import numpy as np
import cv2


# 동영상 불러오기
cap = cv2.VideoCapture('vtest.avi')

if not cap.isOpened():
    print('Video open failed!')
    sys.exit()

# 보행자 검출을 위한 HOG 기술자 설정
hog=cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

while True:
    ret,frame=cap.read()

    if not ret:
        break

    # 매 프레임마다 보행자 검출
    detected,_=hog.detectMultiScale(frame)

    # 검출 결과 화면 표시
    for (x,y,w,h) in detected:
        c=(random.randint(0,255),random.randint(0,255),random.randint(0,255))
        cv2.rectangle(frame,(x,y,w,h),c,3)

    cv2.imshow('frame',frame)
    if cv2.waitKey(10)==27:
        break
    
cv2.destroyAllWindows()