Overslaan naar inhoud

Segmenteren en volgen van instanties met behulp van Ultralytics YOLOv8 🚀

Wat is Instance Segmentatie?

Ultralytics YOLOv8 Bij segmentatie worden individuele objecten in een afbeelding geïdentificeerd en omlijnd, waardoor een gedetailleerd inzicht wordt verkregen in de ruimtelijke verdeling. In tegenstelling tot semantische segmentatie wordt elk object uniek gelabeld en nauwkeurig afgebakend, wat cruciaal is voor taken als objectdetectie en medische beeldvorming.

Er zijn twee soorten instance segmentation tracking beschikbaar in het Ultralytics pakket:

  • Segmentatie van instanties met klasseobjecten: Elk klasseobject krijgt een unieke kleur voor een duidelijke visuele scheiding.

  • Segmentatie van instanties met objectsporen: Elk spoor wordt weergegeven door een aparte kleur, waardoor identificatie en tracering eenvoudiger worden.



Kijken: Segmentatie van instanties met objecttracering met behulp van Ultralytics YOLOv8

Monsters

Instance segmentatie Segmentatie van instanties + volgen van objecten
Ultralytics Instance segmentatie Ultralytics Segmentatie van instanties met volgen van objecten
Ultralytics Instance segmentatie 😍 Ultralytics Segmentatie van instanties met volgen van objecten 🔥

Segmentatie en tracering van instanties

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 Argumenten

Naam Type Standaard Beschrijving
mask array None Coördinaten segmentatiemasker
mask_color tuple (255, 0, 255) Maskerkleur voor elk gesegmenteerd vak
det_label str None Label voor gesegmenteerd object
track_label str None Label voor gesegmenteerd en gevolgd object

Opmerking

Als je vragen hebt, voel je dan vrij om deze te stellen in de Ultralytics Issue Section of in de discussiesectie hieronder.



Gemaakt op 2023-12-18, Bijgewerkt op 2024-03-03
Auteurs: glenn-jocher (6), RizwanMunawar (2)

Reacties