Saltar al contenido

Cálculo de la distancia 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 de nombres de clases.
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

PREGUNTAS FRECUENTES

¿Cómo calculo distancias entre objetos utilizando Ultralytics YOLOv8 ?

Para calcular distancias entre objetos utilizando Ultralytics YOLOv8tienes que identificar los centroides de los recuadros delimitadores de los objetos detectados. Este proceso implica inicializar el DistanceCalculation clase de Ultralytics' solutions y utilizando las salidas de seguimiento del modelo para calcular las distancias. Puedes consultar la implementación en el ejemplo de cálculo de distancia.

¿Cuáles son las ventajas de utilizar el cálculo de distancias con Ultralytics YOLOv8 ?

Utilizar el cálculo de distancias con Ultralytics YOLOv8 ofrece varias ventajas:

  • Precisión de localización: Proporciona un posicionamiento espacial preciso de los objetos.
  • Estimación del tamaño: Ayuda a estimar los tamaños físicos, contribuyendo a una mejor comprensión contextual.
  • Comprensión de escenas: Mejora la comprensión de escenas 3D, contribuyendo a mejorar la toma de decisiones en aplicaciones como la conducción autónoma y la vigilancia.

¿Puedo realizar cálculos de distancia en secuencias de vídeo en tiempo real con Ultralytics YOLOv8 ?

Sí, puedes realizar el cálculo de distancias en secuencias de vídeo en tiempo real con Ultralytics YOLOv8 . El proceso consiste en capturar fotogramas de vídeo utilizando OpenCV, ejecutar la detección de objetos YOLOv8 y utilizar la función DistanceCalculation para calcular las distancias entre objetos en fotogramas sucesivos. Para una implementación detallada, consulta el ejemplo de flujo de vídeo.

¿Cómo borro los puntos dibujados durante el cálculo de la distancia utilizando Ultralytics YOLOv8 ?

Para borrar los puntos dibujados durante el cálculo de la distancia con Ultralytics YOLOv8 , puedes utilizar el botón derecho del ratón. Esta acción borrará todos los puntos que hayas dibujado. Para más detalles, consulta la sección de notas bajo el ejemplo de cálculo de distancia.

¿Cuáles son los argumentos clave para inicializar la clase CálculoDistancia en Ultralytics YOLOv8 ?

Los argumentos clave para inicializar la DistanceCalculation clase en Ultralytics YOLOv8 incluyen:

  • names: Diccionario que asigna índices de clase a nombres de clase.
  • pixels_per_meter: Factor de conversión de píxeles a metros.
  • view_img: Bandera para indicar si se debe mostrar el flujo de vídeo.
  • line_thickness: Grosor de las líneas dibujadas en la imagen.
  • line_color: Color de las líneas dibujadas en la imagen (formato BGR).
  • centroid_color: Color de los centroides (formato BGR).

Para obtener una lista exhaustiva y los valores por defecto, consulta los argumentos de CálculoDistancia.



Creado 2024-01-05, Actualizado 2024-07-14
Autores: RizwanMunawar (5), glenn-jocher (7), IvorZhu331 (1), AyushExel (1)

Comentarios