In this notebook, you will use computer vision to detect pedestrians.
! pip install imutils opencv-python matplotlib
Requirement already satisfied: imutils in c:\users\hc6118\anaconda3\envs\tsenv\lib\site-packages (0.5.4) Requirement already satisfied: opencv-python in c:\users\hc6118\anaconda3\envs\tsenv\lib\site-packages (4.5.4.60) Requirement already satisfied: matplotlib in c:\users\hc6118\anaconda3\envs\tsenv\lib\site-packages (3.5.0) Requirement already satisfied: numpy>=1.17.3 in c:\users\hc6118\anaconda3\envs\tsenv\lib\site-packages (from opencv-python) (1.21.4) Requirement already satisfied: python-dateutil>=2.7 in c:\users\hc6118\anaconda3\envs\tsenv\lib\site-packages (from matplotlib) (2.8.2) Requirement already satisfied: pyparsing>=2.2.1 in c:\users\hc6118\anaconda3\envs\tsenv\lib\site-packages (from matplotlib) (3.0.6) Requirement already satisfied: kiwisolver>=1.0.1 in c:\users\hc6118\anaconda3\envs\tsenv\lib\site-packages (from matplotlib) (1.3.2) Requirement already satisfied: fonttools>=4.22.0 in c:\users\hc6118\anaconda3\envs\tsenv\lib\site-packages (from matplotlib) (4.28.1) Requirement already satisfied: packaging>=20.0 in c:\users\hc6118\anaconda3\envs\tsenv\lib\site-packages (from matplotlib) (21.3) Requirement already satisfied: pillow>=6.2.0 in c:\users\hc6118\anaconda3\envs\tsenv\lib\site-packages (from matplotlib) (8.4.0) Requirement already satisfied: cycler>=0.10 in c:\users\hc6118\anaconda3\envs\tsenv\lib\site-packages (from matplotlib) (0.11.0) Requirement already satisfied: six>=1.5 in c:\users\hc6118\appdata\roaming\python\python38\site-packages (from python-dateutil>=2.7->matplotlib) (1.15.0)
import cv2
import imutils
import numpy as np
import matplotlib.pyplot as plt
from imutils.object_detection import non_max_suppression
Initialize descriptor and load pre-trained detector
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
Set path to the image and load it using OpenCV
image_path = 'data/example.jpg'
image = cv2.imread(image_path)
Plot the original figure
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.show()
Detect pedestrian in the image, performance highly affected by the parameters
(rects, weights) = hog.detectMultiScale(image, winStride=(6, 6), padding=(24, 24), scale=1.03)
Suppress overlapping bounding boxes
rects = np.array([[x, y, x + w, y + h] for (x, y, w, h) in rects])
merge_boxes = non_max_suppression(rects, probs=None, overlapThresh=0.65)
Draw bounding boxes on detected pedestrian
for (x1, y1, x2, y2) in merge_boxes:
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
Plot the figure with bounding box showing the detected pedestrians
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.show()