рд╡рд┐рд╢реНрд▓реЗрд╖рд┐рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ Ultralytics YOLOv8 ЁЯУК
рдкрд░рд┐рдЪрдп
рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рддреАрди рдореВрд▓рднреВрдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдЕрд╡рд▓реЛрдХрди рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ: рд▓рд╛рдЗрди рдЧреНрд░рд╛рдлрд╝, рдмрд╛рд░ рдкреНрд▓реЙрдЯ рдФрд░ рдкрд╛рдИ рдЪрд╛рд░реНрдЯред рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдХрд┐ рдЗрди рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП Python.
рджреГрд╢реНрдп рдирдореВрдиреЗ
рд▓рд╛рдЗрди рдЧреНрд░рд╛рдл | рдмрд╛рд░ рдкреНрд▓реЙрдЯ | рдкрд╛рдЗ рдЪрд╛рд░реНрдЯ |
---|---|---|
рд░реЗрдЦрд╛рдВрдХрди рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ
- рд░реЗрдЦрд╛ рдЧреНрд░рд╛рдлрд╝ рдЫреЛрдЯреА рдФрд░ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдФрд░ рдПрдХ рд╣реА рдЕрд╡рдзрд┐ рдореЗрдВ рдХрдИ рд╕рдореВрд╣реЛрдВ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИрдВред
- рджреВрд╕рд░реА рдУрд░, рдмрд╛рд░ рдкреНрд▓реЙрдЯ, рд╡рд┐рднрд┐рдиреНрди рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рдорд╛рддреНрд░рд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдФрд░ рдПрдХ рд╢реНрд░реЗрдгреА рдФрд░ рдЙрд╕рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдореВрд▓реНрдп рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред
- рдЕрдВрдд рдореЗрдВ, рдкрд╛рдИ рдЪрд╛рд░реНрдЯ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдиреБрдкрд╛рдд рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдФрд░ рдкреВрд░реЗ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рднрд╛рд╡реА рд╣реИрдВред
рд╡рд┐рд╢реНрд▓реЗрд╖рд┐рдХреА рдЙрджрд╛рд╣рд░рдг
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8s.pt")
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))
out = cv2.VideoWriter("line_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
analytics = solutions.Analytics(
type="line",
writer=out,
im0_shape=(w, h),
view_img=True,
)
total_counts = 0
frame_count = 0
while cap.isOpened():
success, frame = cap.read()
if success:
frame_count += 1
results = model.track(frame, persist=True, verbose=True)
if results[0].boxes.id is not None:
boxes = results[0].boxes.xyxy.cpu()
for box in boxes:
total_counts += 1
analytics.update_line(frame_count, total_counts)
total_counts = 0
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8s.pt")
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))
out = cv2.VideoWriter("multiple_line_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
analytics = solutions.Analytics(
type="line",
writer=out,
im0_shape=(w, h),
view_img=True,
max_points=200,
)
frame_count = 0
data = {}
labels = []
while cap.isOpened():
success, frame = cap.read()
if success:
frame_count += 1
results = model.track(frame, persist=True)
if results[0].boxes.id is not None:
boxes = results[0].boxes.xyxy.cpu()
track_ids = results[0].boxes.id.int().cpu().tolist()
clss = results[0].boxes.cls.cpu().tolist()
for box, track_id, cls in zip(boxes, track_ids, clss):
# Store each class label
if model.names[int(cls)] not in labels:
labels.append(model.names[int(cls)])
# Store each class count
if model.names[int(cls)] in data:
data[model.names[int(cls)]] += 1
else:
data[model.names[int(cls)]] = 0
# update lines every frame
analytics.update_multiple_lines(data, labels, frame_count)
data = {} # clear the data list for next frame
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8s.pt")
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))
out = cv2.VideoWriter("pie_chart.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
analytics = solutions.Analytics(
type="pie",
writer=out,
im0_shape=(w, h),
view_img=True,
)
clswise_count = {}
while cap.isOpened():
success, frame = cap.read()
if success:
results = model.track(frame, persist=True, verbose=True)
if results[0].boxes.id is not None:
boxes = results[0].boxes.xyxy.cpu()
clss = results[0].boxes.cls.cpu().tolist()
for box, cls in zip(boxes, clss):
if model.names[int(cls)] in clswise_count:
clswise_count[model.names[int(cls)]] += 1
else:
clswise_count[model.names[int(cls)]] = 1
analytics.update_pie(clswise_count)
clswise_count = {}
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8s.pt")
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))
out = cv2.VideoWriter("bar_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
analytics = solutions.Analytics(
type="bar",
writer=out,
im0_shape=(w, h),
view_img=True,
)
clswise_count = {}
while cap.isOpened():
success, frame = cap.read()
if success:
results = model.track(frame, persist=True, verbose=True)
if results[0].boxes.id is not None:
boxes = results[0].boxes.xyxy.cpu()
clss = results[0].boxes.cls.cpu().tolist()
for box, cls in zip(boxes, clss):
if model.names[int(cls)] in clswise_count:
clswise_count[model.names[int(cls)]] += 1
else:
clswise_count[model.names[int(cls)]] = 1
analytics.update_bar(clswise_count)
clswise_count = {}
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO, solutions
model = YOLO("yolov8s.pt")
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))
out = cv2.VideoWriter("area_plot.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
analytics = solutions.Analytics(
type="area",
writer=out,
im0_shape=(w, h),
view_img=True,
)
clswise_count = {}
frame_count = 0
while cap.isOpened():
success, frame = cap.read()
if success:
frame_count += 1
results = model.track(frame, persist=True, verbose=True)
if results[0].boxes.id is not None:
boxes = results[0].boxes.xyxy.cpu()
clss = results[0].boxes.cls.cpu().tolist()
for box, cls in zip(boxes, clss):
if model.names[int(cls)] in clswise_count:
clswise_count[model.names[int(cls)]] += 1
else:
clswise_count[model.names[int(cls)]] = 1
analytics.update_area(frame_count, clswise_count)
clswise_count = {}
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
рдпреБрдХреНрддрд┐ Analytics
рдпрд╣рд╛рдБ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ Analytics
рддрд░реНрдХ:
рдирд╛рдо | рдкреНрд░рдХрд╛рд░ | рдЪреВрдХ | рдпрд╛ рдХрд╝рд┐рд╕реНтАНрдо |
---|---|---|---|
type |
str |
None |
рдбреЗрдЯрд╛ рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░рдХрд╛рд░. |
im0_shape |
tuple |
None |
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ред |
writer |
cv2.VideoWriter |
None |
рд╡реАрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯред |
title |
str |
ultralytics |
рджреГрд╢реНрдпрд╛рд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖рдХ. |
x_label |
str |
x |
x-рдЕрдХреНрд╖ рдХреЗ рд▓рд┐рдП рд▓реЗрдмрд▓. |
y_label |
str |
y |
y-рдЕрдХреНрд╖ рдХреЗ рд▓рд┐рдП рд▓реЗрдмрд▓ред |
bg_color |
str |
white |
рдкреГрд╖реНрдарднреВрдорд┐ рд░рдВрдЧред |
fg_color |
str |
black |
рдЕрдЧреНрд░рднреВрдорд┐ рд░рдВрдЧред |
line_color |
str |
yellow |
рд░реЗрдЦрд╛рдУрдВ рдХрд╛ рд░рдВрдЧред |
line_width |
int |
2 |
рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЪреМрдбрд╝рд╛рдИред |
fontsize |
int |
13 |
рдкрд╛рда рдХреЗ рд▓рд┐рдП рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░. |
view_img |
bool |
False |
рдЫрд╡рд┐ рдпрд╛ рд╡реАрдбрд┐рдпреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рдХрд░реЗрдВ. |
save_img |
bool |
True |
рдЫрд╡рд┐ рдпрд╛ рд╡реАрдбрд┐рдпреЛ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рдХрд░реЗрдВред |
max_points |
int |
50 |
For multiple lines, total points drawn on frame, before deleting initial points. |
points_width |
int |
15 |
Width of line points highlighter. |
рддрд░реНрдХ model.track
рдирд╛рдо | рдкреНрд░рдХрд╛рд░ | рдЪреВрдХ | рдпрд╛ рдХрд╝рд┐рд╕реНтАНрдо |
---|---|---|---|
source |
im0 |
None |
рдЫрд╡рд┐рдпреЛрдВ рдпрд╛ рд╡реАрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ |
persist |
bool |
False |
рдлрд╝реНрд░реЗрдо рдХреЗ рдмреАрдЪ рд▓рдЧрд╛рддрд╛рд░ рдЯреНрд░реИрдХ |
tracker |
str |
botsort.yaml |
рдЯреНрд░реИрдХрд┐рдВрдЧ рд╡рд┐рдзрд┐ 'рдмрд╛рдЗрдЯрдЯреНрд░реИрдХ' рдпрд╛ 'рдмреЙрдЯрд╕реЙрд░реНрдЯ' |
conf |
float |
0.3 |
рдХреЙрдиреНрдлрд┐рдбреЗрдВрд╕ рдереНрд░реЗрд╢реЛрд▓реНрдб |
iou |
float |
0.5 |
IOU рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб |
classes |
list |
None |
рдХрдХреНрд╖рд╛ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдкрд░рд┐рдгрд╛рдо, рдпрд╛рдиреА рдХрдХреНрд╖рд╛рдПрдВ = 0, рдпрд╛ рдХрдХреНрд╖рд╛рдПрдВ = [0,2,3] |
verbose |
bool |
True |
рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ |
рд╕рдорд╛рдкреНрддрд┐
рдкреНрд░рднрд╛рд╡реА рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдФрд░ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд▓рд╛рдЗрди рдЧреНрд░рд╛рдлрд╝, рдмрд╛рд░ рдкреНрд▓реЙрдЯ рдФрд░ рдкрд╛рдИ рдЪрд╛рд░реНрдЯ рдореМрд▓рд┐рдХ рдЙрдкрдХрд░рдг рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдХреА рдХрд╣рд╛рдиреА рдХреЛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред