diciembre 27, 2022

VARIOS – Visión: detección de personas con OpenCV

Written by

En este caso el ejemplo que presento es para detectar personas en un vídeo usando para ello OpenCV y la función de histograma de gradiente (HOG). Como referencia he tomado el tutorial de PyImageSearch en este enlace: https://pyimagesearch.com/2015/11/09/pedestrian-detection-opencv/

Como requisitos sólo necesita tener OpenCV e Imutils instalados.

El código modificado del original para leer la cámara del ordenador y no usar argumentos de línea es:

from __future__ import print_function
from imutils.object_detection import non_max_suppression
import numpy as np
import imutils
import cv2
import time

# initialize the HOG descriptor/person detector
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())

cap = cv2.VideoCapture(0)
t1=0

while True:
        ret, frame = cap.read()
        
	# load the image and resize it to (1) reduce detection time
	# and (2) improve detection accuracy
        image = imutils.resize(frame, width=min(400, frame.shape[1]))

	# detect people in the image
        (rects, weights) = hog.detectMultiScale(image, winStride=(4, 4),
		padding=(8, 8), scale=1.05)

	# apply non-maxima suppression to the bounding boxes using a
	# fairly large overlap threshold to try to maintain overlapping
	# boxes that are still people
        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)

        t2=t1
        t1 = time.time()
        fps = 1/(t1 - t2)
        cv2.putText(image, 'FPS : {:.2f}'.format(fps), (120, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 2, cv2.LINE_AA)
        
	# show the output image
        cv2.imshow("OpenCV", image)
        if (cv2.waitKey(1) == ord('s')):
             break

cap.release()
cv2.destroyAllWindows()

Ahora la detección se muestra sólo con un rectángulo alrededor de la persona y la tasa de imágenes es media, en torno a 7 imágenes por segundo, lo que da algo de fluidez al vídeo.

Category : VARIOS

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Proudly powered by WordPress and Sweet Tech Theme