Detección de peatones usando OpenCV-Python

OpenCV es una biblioteca de código abierto, que está dirigida a la visión por computadora en tiempo real. Esta biblioteca está desarrollada por Intel y es multiplataforma: puede admitir Python, C++, Java, etc. Computer Vision es un campo de vanguardia de la informática que tiene como objetivo permitir que las computadoras comprendan lo que se ve en una imagen. OpenCV es una de las bibliotecas más utilizadas para tareas de visión artificial como reconocimiento facial, detección de movimiento, detección de objetos, etc.

En este tutorial, vamos a construir un detector de peatones básico para imágenes y videos usando OpenCV. La detección de peatones es un área de investigación muy importante porque puede mejorar la funcionalidad de un sistema de protección de peatones en vehículos autónomos.

Podemos extraer características como cabeza, dos brazos, dos piernas, etc., de una imagen de un cuerpo humano y pasarlas para entrenar un modelo de aprendizaje automático. Después del entrenamiento, el modelo se puede usar para detectar y rastrear humanos en imágenes y secuencias de video. Sin embargo, OpenCV tiene un método incorporado para detectar peatones. Tiene un modelo HOG (Histogram of Oriented Gradients) + Linear SVM preentrenado para detectar peatones en imágenes y secuencias de video.

Histograma de gradientes orientados

Este algoritmo verifica directamente los píxeles circundantes de cada píxel. El objetivo es verificar qué tan oscuro es el píxel actual en comparación con los píxeles circundantes. El algoritmo dibuja y flechas que muestran la dirección de la imagen oscureciéndose. Repite el proceso para todos y cada uno de los píxeles de la imagen. Por fin, cada píxel sería reemplazado por una flecha, estas flechas se llaman Gradients . Estos gradientes muestran el flujo de luz de claro a oscuro. Mediante el uso de estos gradientes, los algoritmos realizan más análisis. Para obtener más información sobre HOG, lea el artículo de investigación de Navneet Dalal y Bill Triggs sobre HOG para la detección humana. .

Requisitos

opencv-python 3.4.2
imutils 0.5.3

Para instalar los módulos anteriores, escriba el siguiente comando en la terminal.

pip install moudle_name

Ejemplo 1:

Hagamos que el programa detecte peatones en una imagen:

Imagen utilizada:
python-opncv

import cv2
import imutils
   
# Initializing the HOG person
# detector
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
   
# Reading the Image
image = cv2.imread('img.png')
   
# Resizing the Image
image = imutils.resize(image,
                       width=min(400, image.shape[1]))
   
# Detecting all the regions in the 
# Image that has a pedestrians inside it
(regions, _) = hog.detectMultiScale(image, 
                                    winStride=(4, 4),
                                    padding=(4, 4),
                                    scale=1.05)
   
# Drawing the regions in the Image
for (x, y, w, h) in regions:
    cv2.rectangle(image, (x, y), 
                  (x + w, y + h), 
                  (0, 0, 255), 2)
  
# Showing the output Image
cv2.imshow("Image", image)
cv2.waitKey(0)
   
cv2.destroyAllWindows()

Producción:

python-opnecv-1

Ejemplo 2: Hagamos que el programa detecte peatones en un video:

import cv2
import imutils
   
# Initializing the HOG person
# detector
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
   
cap = cv2.VideoCapture('vid.mp4')
   
while cap.isOpened():
    # Reading the video stream
    ret, image = cap.read()
    if ret:
        image = imutils.resize(image, 
                               width=min(400, image.shape[1]))
   
        # Detecting all the regions 
        # in the Image that has a 
        # pedestrians inside it
        (regions, _) = hog.detectMultiScale(image,
                                            winStride=(4, 4),
                                            padding=(4, 4),
                                            scale=1.05)
   
        # Drawing the regions in the 
        # Image
        for (x, y, w, h) in regions:
            cv2.rectangle(image, (x, y),
                          (x + w, y + h), 
                          (0, 0, 255), 2)
   
        # Showing the output Image
        cv2.imshow("Image", image)
        if cv2.waitKey(25) & 0xFF == ord('q'):
            break
    else:
        break
  
cap.release()
cv2.destroyAllWindows()

Producción:

Publicación traducida automáticamente

Artículo escrito por hritikgupta7080 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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