Saltar al contenido

Cálculo de distancias mediante Ultralytics YOLOv8 🚀

¿Qué es el cálculo de la distancia?

La medición de la distancia entre dos objetos se conoce como cálculo de la distancia dentro de un espacio determinado. En el caso de Ultralytics YOLOv8se emplea el centroide del cuadro delimitador para calcular la distancia de los cuadros delimitadores resaltados por el usuario.



Observa: Cálculo de la distancia mediante Ultralytics YOLOv8

Visuales

Cálculo de la distancia mediante Ultralytics YOLOv8
Ultralytics YOLOv8 Cálculo de la distancia

¿Ventajas del cálculo de la distancia?

  • Precisión de localización: Mejora la precisión del posicionamiento espacial en tareas de visión por ordenador.
  • Estimación del tamaño: Permite estimar los tamaños físicos para una mejor comprensión contextual.
  • Comprensión de la escena: Contribuye a una comprensión tridimensional del entorno para mejorar la toma de decisiones.
Cálculo de la distancia
  • Haz clic en dos cuadros delimitadores cualesquiera con el botón izquierdo del ratón para calcular la distancia

Cálculo de distancias mediante YOLOv8 Ejemplo

from ultralytics import YOLO
from ultralytics.solutions import distance_calculation
import cv2

model = YOLO("yolov8n.pt")
names = model.model.names

cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

# Video writer
video_writer = cv2.VideoWriter("distance_calculation.avi",
                               cv2.VideoWriter_fourcc(*'mp4v'),
                               fps,
                               (w, h))

# Init distance-calculation obj
dist_obj = distance_calculation.DistanceCalculation()
dist_obj.set_args(names=names, view_img=True)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    tracks = model.track(im0, persist=True, show=False)
    im0 = dist_obj.start_process(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
Nota
  • Si haces clic con el botón derecho del ratón, se borrarán todos los puntos dibujados
  • Puedes utilizar el botón izquierdo del ratón para dibujar puntos

Argumentos opcionales set_args

Nombre Tipo Por defecto Descripción
names dict None Nombres de las clases
view_img bool False Mostrar cuadros con recuentos
line_thickness int 2 Aumentar el grosor de los cuadros delimitadores
line_color RGB (255, 255, 0) Línea Color para centroides mapeados en dos cajas delimitadoras
centroid_color RGB (255, 0, 255) Color del centroide de cada cuadro delimitador

Argumentos model.track

Nombre Tipo Por defecto Descripción
source im0 None directorio fuente de imágenes o vídeos
persist bool False persistencia de pistas entre fotogramas
tracker str botsort.yaml Método de seguimiento 'bytetrack' o 'botsort'
conf float 0.3 Umbral de confianza
iou float 0.5 Umbral del pagaré
classes list None filtrar los resultados por clase, es decir, classes=0, o classes=[0,2,3]
verbose bool True Mostrar los resultados del seguimiento de objetos


Creado 2024-01-05, Actualizado 2024-03-01
Autores: RizwanMunawar (5), glenn-jocher (2), AyushExel (1)

Comentarios