Overslaan naar inhoud

Afstand berekenen met Ultralytics YOLOv8 🚀

Wat is afstand berekenen?

Het meten van de afstand tussen twee objecten staat bekend als afstandsberekening binnen een bepaalde ruimte. In het geval van Ultralytics YOLOv8wordt het middelpunt van de bounding box gebruikt om de afstand te berekenen voor bounding boxes die door de gebruiker zijn gemarkeerd.



Kijken: Afstand berekenen met Ultralytics YOLOv8

Beeldmateriaal

Afstand berekenen met Ultralytics YOLOv8
Ultralytics YOLOv8 Afstand berekenen

Voordelen van afstandsberekening?

  • Lokalisatieprecisie: Verbetert nauwkeurige ruimtelijke positionering in computervisietaken.
  • Schatting van de grootte: Maakt schatting van fysieke afmetingen mogelijk voor een beter begrip van de context.
  • Inzicht in scène: Draagt bij aan een 3D begrip van de omgeving voor verbeterde besluitvorming.
Afstand berekenen
  • Klik met de linkermuisknop op twee begrenzende vakken om de afstand te berekenen

Afstand berekenen met YOLOv8 Voorbeeld

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()
Opmerking
  • Rechts klikken met de muis verwijdert alle getekende punten
  • Klikken met de linkermuisknop kan worden gebruikt om punten te tekenen

Optionele argumenten set_args

Naam Type Standaard Beschrijving
names dict None Namen van klassen
view_img bool False Frames met tellingen weergeven
line_thickness int 2 Vergroot de dikte van bounding boxes
line_color RGB (255, 255, 0) Lijnkleur voor centroïden die op twee begrenzende vakken passen
centroid_color RGB (255, 0, 255) Kleur van het middelpunt voor elk begrenzend vak

Argumenten model.track

Naam Type Standaard Beschrijving
source im0 None bronmap voor afbeeldingen of video's
persist bool False Blijvende sporen tussen frames
tracker str botsort.yaml Volgmethode 'bytetrack' of 'botsort'
conf float 0.3 Vertrouwensdrempel
iou float 0.5 Drempel IOU
classes list None filter resultaten op klasse, d.w.z. classes=0, of classes=[0,2,3]
verbose bool True De resultaten van het volgen van objecten weergeven


Gemaakt op 2024-01-05, Bijgewerkt op 2024-03-01
Auteurs: RizwanMunawar (5), glenn-jocher (2), AyushExel (1)

Reacties