рдЖрд╡реГрддреНрддрд┐ рд╡рд┐рднрд╛рдЬрди рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ Ultralytics YOLOv8 ЁЯЪА
рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рдХреНрдпрд╛ рд╣реИ?
Ultralytics YOLOv8 рдЙрджрд╛рд╣рд░рдг рд╡рд┐рднрд╛рдЬрди рдореЗрдВ рдПрдХ рдЫрд╡рд┐ рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд╕реНрддреБрдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рдФрд░ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рд╕реНрдерд╛рдирд┐рдХ рд╡рд┐рддрд░рдг рдХреА рд╡рд┐рд╕реНрддреГрдд рд╕рдордЭ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕рд┐рдореЗрдВрдЯрд┐рдХ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓реЗрдмрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдФрд░ рдореЗрдбрд┐рдХрд▓ рдЗрдореЗрдЬрд┐рдВрдЧ рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдореЗрдВ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рдЯреНрд░реИрдХрд┐рдВрдЧ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ Ultralytics рдкреИрдХреЗрдЬ:
-
рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди: рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рд╡рд╕реНрддреБ рдХреЛ рд╕реНрдкрд╖реНрдЯ рджреГрд╢реНрдп рдкреГрдердХреНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд░рдВрдЧ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред
-
рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди: рдкреНрд░рддреНрдпреЗрдХ рдЯреНрд░реИрдХ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд░рдВрдЧ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрд╕рд╛рди рдкрд╣рдЪрд╛рди рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдорд┐рд▓рддреА рд╣реИред
рд╕рддрд░реНрдХрддрд╛: рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди Ultralytics YOLOv8
рдирдореВрдиреЗ
рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди | рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди + рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ |
---|---|
Ultralytics рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди ЁЯШН | Ultralytics рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ ЁЯФе рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди |
рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ
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
рддрд░реНрдХ
рдирд╛рдо | рдкреНрд░рдХрд╛рд░ | рдЪреВрдХ | рдпрд╛ рдХрд╝рд┐рд╕реНтАНрдо |
---|---|---|---|
mask |
array |
None |
рд╡рд┐рднрд╛рдЬрди рдореБрдЦреМрдЯрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ |
mask_color |
tuple |
(255, 0, 255) |
рд╣рд░ рдЦрдВрдбрд┐рдд рдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдХ рд░рдВрдЧ |
det_label |
str |
None |
рдЦрдВрдбрд┐рдд рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рд▓реЗрдмрд▓ |
track_label |
str |
None |
рдЦрдВрдбрд┐рдд рдФрд░ рдЯреНрд░реИрдХ рдХрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд▓реЗрдмрд▓ |
рдиреЛрдЯ
рдХрд┐рд╕реА рднреА рдкреВрдЫрддрд╛рдЫ рдХреЗ рд▓рд┐рдП, рдореЗрдВ рдЕрдкрдиреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ Ultralytics рдореБрджреНрджрд╛ рдЕрдиреБрднрд╛рдЧ рдпрд╛ рдиреАрдЪреЗ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЪрд░реНрдЪрд╛ рдЕрдиреБрднрд╛рдЧред
2023-12-18 рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ 2024-03-03
рд▓реЗрдЦрдХ: рдЧреНрд▓реЗрди-рдЬреЛрдЪрд░ (6), рд░рд┐рдЬрд╝рд╡рд╛рдирдореБрдирд╡реНрд╡рд░ (2)