Zum Inhalt springen

Entfernungsberechnung mit Ultralytics YOLOv8 🚀

Was ist eine Entfernungsberechnung?

Das Messen des Abstands zwischen zwei Objekten ist als Abstandsberechnung innerhalb eines bestimmten Raums bekannt. Im Fall von Ultralytics YOLOv8wird der Schwerpunkt des Begrenzungsrahmens verwendet, um den Abstand fĂŒr die vom Benutzer markierten Begrenzungsrahmen zu berechnen.



Pass auf: Entfernungsberechnung mit Ultralytics YOLOv8

Bildmaterial

Entfernungsberechnung mit Ultralytics YOLOv8
Ultralytics YOLOv8 Berechnung der Entfernung

Vorteile der Entfernungsberechnung?

  • LokalisierungsprĂ€zision: Verbessert die genaue rĂ€umliche Positionierung bei Computer-Vision-Aufgaben.
  • GrĂ¶ĂŸenabschĂ€tzung: Ermöglicht die SchĂ€tzung von physischen GrĂ¶ĂŸen fĂŒr ein besseres kontextuelles VerstĂ€ndnis.
  • Scene Understanding: TrĂ€gt zu einem 3D-VerstĂ€ndnis der Umgebung bei, um bessere Entscheidungen zu treffen.
Berechnung der Entfernung
  • Klicke mit der linken Maustaste auf zwei beliebige Bounding Boxes, um den Abstand zu berechnen

Entfernungsberechnung mit YOLOv8 Beispiel

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()
Hinweis
  • Maus-Rechtsklick löscht alle gezeichneten Punkte
  • Maus-Linksklick kann zum Zeichnen von Punkten verwendet werden

Optionale Argumente set_args

Name Typ Standard Beschreibung
names dict None Klassen Namen
view_img bool False Rahmen mit ZĂ€hlungen anzeigen
line_thickness int 2 Dicke der Begrenzungsrahmen erhöhen
line_color RGB (255, 255, 0) Linienfarbe fĂŒr Zentroide, die auf zwei Bounding Boxes abgebildet werden
centroid_color RGB (255, 0, 255) Schwerpunktfarbe fĂŒr jede Bounding Box

Argumente model.track

Name Typ Standard Beschreibung
source im0 None Quellverzeichnis fĂŒr Bilder oder Videos
persist bool False Spuren zwischen Frames beibehalten
tracker str botsort.yaml Tracking-Methode 'bytetrack' oder 'botsort'
conf float 0.3 Konfidenzschwelle
iou float 0.5 IOU-Schwelle
classes list None Ergebnisse nach Klassen filtern, d.h. classes=0, oder classes=[0,2,3]
verbose bool True Anzeige der Ergebnisse der Objektverfolgung


Erstellt am 2024-01-05, Aktualisiert am 2024-03-01
Autoren: chr043416@gmail.com (5), glenn-jocher (2), AyushExel (1)

Kommentare