Skip to content

Calcul de la distance à l'aide de Ultralytics YOLOv8 🚀

Qu'est-ce que le calcul de la distance ?

La mesure de l'écart entre deux objets est connue sous le nom de calcul de la distance dans un espace déterminé. Dans le cas de Ultralytics YOLOv8le centroïde de la boîte englobante est utilisé pour calculer la distance pour les boîtes englobantes mises en évidence par l'utilisateur.



Regarde : Calcul de la distance à l'aide de Ultralytics YOLOv8

Visuels

Calcul de la distance à l'aide de Ultralytics YOLOv8
Ultralytics YOLOv8 Calcul de la distance

Avantages du calcul de la distance ?

  • Précision de la localisation : Améliore la précision du positionnement spatial dans les tâches de vision par ordinateur.
  • Estimation de la taille : Permet d'estimer les tailles physiques pour une meilleure compréhension du contexte.
  • Compréhension de la scène : Contribue à une compréhension en 3D de l'environnement pour une meilleure prise de décision.
Calcul de la distance
  • Clique sur deux boîtes délimitées avec le bouton gauche de la souris pour calculer la distance.

Calcul de la distance à l'aide de YOLOv8 Exemple

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()
Note
  • Le clic droit de la souris supprime tous les points dessinés
  • Le clic gauche de la souris peut être utilisé pour dessiner des points.

Arguments facultatifs set_args

Nom Type Défaut Description
names dict None Noms des classes
view_img bool False Afficher les cadres avec les décomptes
line_thickness int 2 Augmente l'épaisseur des boîtes de délimitation
line_color RGB (255, 255, 0) Couleur des lignes pour la cartographie des centroïdes sur deux boîtes de délimitation
centroid_color RGB (255, 0, 255) Couleur du centroïde pour chaque boîte de délimitation

Arguments model.track

Nom Type Défaut Description
source im0 None répertoire source pour les images ou les vidéos
persist bool False persistance des pistes entre les images
tracker str botsort.yaml Méthode de suivi 'bytetrack' ou 'botsort'
conf float 0.3 Seuil de confiance
iou float 0.5 Seuil de reconnaissance de dette
classes list None filtre les résultats par classe, c'est-à-dire classes=0, ou classes=[0,2,3]
verbose bool True Affiche les résultats du suivi des objets


Créé le 2024-01-05, Mis à jour le 2024-03-01
Auteurs : RizwanMunawar (5), glenn-jocher (2), AyushExel (1)

Commentaires