Created
July 16, 2021 01:11
-
-
Save seupedro/946cb0c02e524a2bb03534e4cfdd98fc to your computer and use it in GitHub Desktop.
A simple human detector
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import cv2 | |
import imutils | |
import numpy as np | |
import argparse | |
HOGCV = cv2.HOGDescriptor() | |
HOGCV.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector()) | |
def detect(frame): | |
bounding_box_cordinates, weights = HOGCV.detectMultiScale(frame, winStride=(4, 4), padding=(8, 8), scale=1.03) | |
person = 1 | |
for x, y, w, h in bounding_box_cordinates: | |
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) | |
cv2.putText(frame, f'person {person}', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1) | |
person += 1 | |
cv2.putText(frame, 'Status : Detecting ', (40, 40), cv2.FONT_HERSHEY_DUPLEX, 0.8, (255, 0, 0), 2) | |
cv2.putText(frame, f'Total Persons : {person - 1}', (40, 70), cv2.FONT_HERSHEY_DUPLEX, 0.8, (255, 0, 0), 2) | |
cv2.imshow('output', frame) | |
return frame | |
def humanDetector(args): | |
image_path = args["image"] | |
video_path = args['video'] | |
if str(args["camera"]) == 'true': | |
camera = True | |
else: | |
camera = False | |
writer = None | |
if args['output'] is not None and image_path is None: | |
writer = cv2.VideoWriter(args['output'], cv2.VideoWriter_fourcc(*'MJPG'), 10, (600, 600)) | |
if camera: | |
print('[INFO] Opening Web Cam.') | |
detectByCamera(writer) | |
elif video_path is not None: | |
print('[INFO] Opening Video from path.') | |
detectByPathVideo(video_path, writer) | |
elif image_path is not None: | |
print('[INFO] Opening Image from path.') | |
detectByPathImage(image_path, args['output']) | |
def detectByCasdasdamera(writer): | |
video = cv2.VideoCapture(0) | |
print('Detecting people...') | |
print('Press Q to exit') | |
while True: | |
check, frame = video.read() | |
frame = detect(frame) | |
if writer is not None: | |
writer.write(frame) | |
key = cv2.waitKey(1) | |
if key == ord('q'): # q -> quit | |
break | |
video.release() | |
cv2.destroyAllWindows() | |
def detectByPathVideo(path, writer): | |
video = cv2.VideoCapture(path) | |
check, frame = video.read() | |
if check == False: | |
print('Video Not Found. Please Enter a Valid Path (Full path of Video Should be Provided).') | |
return | |
print('Detecting people...') | |
while video.isOpened(): | |
# check is True if reading was successful | |
check, frame = video.read() | |
if check: | |
frame = imutils.resize(frame, width=min(800, frame.shape[1])) | |
frame = detect(frame) | |
if writer is not None: | |
writer.write(frame) | |
key = cv2.waitKey(1) | |
if key == ord('q'): | |
break | |
else: | |
break | |
video.release() | |
cv2.destroyAllWindows() | |
def detectByCamera(writer): | |
video = cv2.VideoCapture(0) | |
print('Detecting people...') | |
while True: | |
check, frame = video.read() | |
frame = detect(frame) | |
if writer is not None: | |
writer.write(frame) | |
key = cv2.waitKey(1) | |
if key == ord('q'): | |
break | |
video.release() | |
cv2.destroyAllWindows() | |
def detectByPathImage(path, output_path): | |
image = cv2.imread(path) | |
image = imutils.resize(image, width=min(800, image.shape[1])) | |
result_image = detect(image) | |
if output_path is not None: | |
cv2.imwrite(output_path, result_image) | |
cv2.waitKey(0) | |
cv2.destroyAllWindows() | |
def argsParser(): | |
arg_parse = argparse.ArgumentParser() | |
arg_parse.add_argument("-v", "--video", default=None, help="path to Video File ") | |
arg_parse.add_argument("-i", "--image", default=None, help="path to Image File ") | |
arg_parse.add_argument("-c", "--camera", default=False, help="Set true if you want to use the camera.") | |
arg_parse.add_argument("-o", "--output", type=str, help="path to optional output video file") | |
args = vars(arg_parse.parse_args()) | |
return args | |
if __name__ == "__main__": | |
HOGCV = cv2.HOGDescriptor() | |
HOGCV.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector()) | |
args = argsParser() | |
humanDetector(args) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment