Skip to content

Instantly share code, notes, and snippets.

@bigsnarfdude
Created May 9, 2017 16:11
Show Gist options
  • Save bigsnarfdude/52f96f1cf345492e93d3f520a09e67a0 to your computer and use it in GitHub Desktop.
Save bigsnarfdude/52f96f1cf345492e93d3f520a09e67a0 to your computer and use it in GitHub Desktop.
[pedestrianDetection] HOG to SVM with autoscaler in OpenCV python
from __future__ import print_function
from imutils.object_detection import non_max_suppression
from imutils import paths
import numpy as np
import imutils
import argparse
import cv2
ap = argparse.ArgumentParser()
ap.add_argument('-i', "--images", required=True, help="path to images directory")
args = vars(ap.parse_args())
# initialize the HOG descriptor (person detector)
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
#loop over the image paths
for imagePath in paths.list_images(args["images"]):
# load the image and resize it to reduce detection time and improve accrcy
image = cv2.imread(imagePath)
image = imutils.resize(image, width=min(400, image.shape[1]))
orig = image.copy()
#detect people
(rects, weights) = hog.detectMultiScale(image, winStride=(4,4),
padding=(8,8),scale=1.05)
#draw the original bounding boxes
for (x, y, w, h) in rects:
cv2.rectangle(orig,(x,y),(x + w, y + h), (0,0,255), 2)
#apply non-maxima suppresssion to the bounding boxes using
#pretty large overlap threshold to try to maintain overlapping people boxs
rects = np.array([[x,y, x + w, y + h] for (x, y, w, h) in rects])
pick = non_max_suppression(rects, probs=None, overlapThresh=0.65)
#draw the final bounding boxes
for (xA, yA, xB, yB) in pick:
cv2.rectangle(image, (xA, yA), (xB, yB), (0,255,0),2)
#show some information on the number of bounding box
filename = imagePath[imagePath.rfind("/") + 1:]
print("[INFO]{}: {} original boxes, {} after suppression".format(
filename, len(rects), len(pick)))
#show the different frames
cv2.imshow("Before NMS",orig)
cv2.imshow("After NMS",image)
cv2.waitKey(0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment