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 |
---|
¿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)