Zum Inhalt springen

Segmentierung und Verfolgung von Instanzen mit Ultralytics YOLOv8 🚀

Was ist Instanzsegmentierung?

Ultralytics YOLOv8 Bei der Instanzsegmentierung geht es darum, einzelne Objekte in einem Bild zu identifizieren und abzugrenzen, um ein detailliertes VerstĂ€ndnis der rĂ€umlichen Verteilung zu erhalten. Anders als bei der semantischen Segmentierung wird dabei jedes Objekt eindeutig gekennzeichnet und genau abgegrenzt, was fĂŒr Aufgaben wie die Objekterkennung und die medizinische Bildgebung entscheidend ist.

Es gibt zwei Arten der Instanzsegmentierung, die im Paket Ultralytics verfĂŒgbar sind:

  • Instanzsegmentierung mit Klassenobjekten: Jedem Klassenobjekt wird eine eindeutige Farbe zugewiesen, um eine klare visuelle Trennung zu ermöglichen.

  • Instanzsegmentierung mit Objektspuren: Jede Spur wird durch eine bestimmte Farbe dargestellt, was die Identifizierung und Verfolgung erleichtert.



Pass auf: Instanz-Segmentierung mit Objektverfolgung mit Ultralytics YOLOv8

Proben

Instanz-Segmentierung Instanz-Segmentierung + Objektverfolgung
Ultralytics Instanz-Segmentierung Ultralytics Instanz-Segmentierung mit Objektverfolgung
Ultralytics Instanz-Segmentierung 😍. Ultralytics Instanzsegmentierung mit Objektverfolgung đŸ”„

Segmentierung und Verfolgung von Instanzen

import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

model = YOLO("yolov8n-seg.pt")  # segmentation model
names = model.model.names
cap = cv2.VideoCapture("path/to/video/file.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

out = cv2.VideoWriter('instance-segmentation.avi', cv2.VideoWriter_fourcc(*'MJPG'), fps, (w, h))

while True:
    ret, im0 = cap.read()
    if not ret:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    results = model.predict(im0)
    annotator = Annotator(im0, line_width=2)

    if results[0].masks is not None:
        clss = results[0].boxes.cls.cpu().tolist()
        masks = results[0].masks.xy
        for mask, cls in zip(masks, clss):
            annotator.seg_bbox(mask=mask,
                               mask_color=colors(int(cls), True),
                               det_label=names[int(cls)])

    out.write(im0)
    cv2.imshow("instance-segmentation", im0)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

out.release()
cap.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

from collections import defaultdict

track_history = defaultdict(lambda: [])

model = YOLO("yolov8n-seg.pt")   # segmentation model
cap = cv2.VideoCapture("path/to/video/file.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

out = cv2.VideoWriter('instance-segmentation-object-tracking.avi', cv2.VideoWriter_fourcc(*'MJPG'), fps, (w, h))

while True:
    ret, im0 = cap.read()
    if not ret:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    annotator = Annotator(im0, line_width=2)

    results = model.track(im0, persist=True)

    if results[0].boxes.id is not None and results[0].masks is not None:
        masks = results[0].masks.xy
        track_ids = results[0].boxes.id.int().cpu().tolist()

        for mask, track_id in zip(masks, track_ids):
            annotator.seg_bbox(mask=mask,
                               mask_color=colors(track_id, True),
                               track_label=str(track_id))

    out.write(im0)
    cv2.imshow("instance-segmentation-object-tracking", im0)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

out.release()
cap.release()
cv2.destroyAllWindows()

seg_bbox Argumente

Name Typ Standard Beschreibung
mask array None Koordinaten der Segmentierungsmaske
mask_color tuple (255, 0, 255) Maskenfarbe fĂŒr jede segmentierte Box
det_label str None Etikett fĂŒr segmentiertes Objekt
track_label str None Etikett fĂŒr segmentiertes und verfolgtes Objekt

Hinweis

Wenn du Fragen hast, kannst du sie im BereichUltralytics oder im unten stehenden Diskussionsbereich stellen.



Erstellt 2023-12-18, Aktualisiert 2024-03-03
Autoren: glenn-jocher (6), RizwanMunawar (2)

Kommentare