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

import cv2
from ultralytics import YOLO, solutions

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 = solutions.DistanceCalculation(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 DistanceCalculation()

Name Type Default Descripción
names dict None Diccionario que asigna índices de clase a nombres de clase.
pixels_per_meter int 10 Factor de conversión de píxeles a metros.
view_img bool False Bandera para indicar si se debe mostrar el flujo de vídeo.
line_thickness int 2 Grosor de las líneas dibujadas en la imagen.
line_color tuple (255, 255, 0) Color de las líneas dibujadas en la imagen (formato BGR).
centroid_color tuple (255, 0, 255) Color de los centroides dibujados (formato BGR).

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-05-18
Autores: glenn-jocher (4), RizwanMunawar (5), AyushExel (1)

Comentarios