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 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.