рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХрддрд╛рд░ рдкреНрд░рдмрдВрдзрди Ultralytics YOLOv8 ЁЯЪА
рдХрддрд╛рд░ рдкреНрд░рдмрдВрдзрди рдХреНрдпрд╛ рд╣реИ?
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХрддрд╛рд░ рдкреНрд░рдмрдВрдзрди Ultralytics YOLOv8 рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рджрдХреНрд╖рддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдпрд╛ рд╡рд╛рд╣рдиреЛрдВ рдХреА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдФрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдЦреБрджрд░рд╛, рдмреИрдВрдХреЛрдВ, рд╣рд╡рд╛рдИ рдЕрдбреНрдбреЛрдВ рдФрд░ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдЬреИрд╕реА рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рдВрддреБрд╖реНрдЯрд┐ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░реЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
рдХрддрд╛рд░ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд╛рдн?
- рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдордп рдореЗрдВ рдХрдореА: рдХрддрд╛рд░ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрддрд╛рд░реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреА рд╣реИ, рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдордп рдХреЛ рдХрдо рдХрд░рддреА рд╣реИред рдЗрд╕рд╕реЗ рд╕рдВрддреБрд╖реНрдЯрд┐ рдХреЗ рд╕реНрддрд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рдХрдо рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдпрд╛ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рддреЗ рд╣реИрдВред
- рдмрдврд╝реА рд╣реБрдИ рджрдХреНрд╖рддрд╛: рдХрддрд╛рд░ рдкреНрд░рдмрдВрдзрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рд╡реНрдпрд╡рд╕рд╛рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рдХрддрд╛рд░ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдХреЗ рдФрд░ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреА рддреИрдирд╛рддреА рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдХреЗ, рд╡реНрдпрд╡рд╕рд╛рдп рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рд╛рдЧрдд рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдордЧреНрд░ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ
рд▓реЙрдЬрд┐рд╕реНрдЯрд┐рдХрд╕ | рдлреБрдЯрдХрд░ |
---|---|
рд╣рд╡рд╛рдИ рдЕрдбреНрдбреЗ рдХреЗ рдЯрд┐рдХрдЯ рдХрд╛рдЙрдВрдЯрд░ рдкрд░ рдХрддрд╛рд░ рдкреНрд░рдмрдВрдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ Ultralytics YOLOv8 | рднреАрдбрд╝ рдореЗрдВ рдХрддрд╛рд░ рдХреА рдирд┐рдЧрд░рд╛рдиреА Ultralytics YOLOv8 |
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХрддрд╛рд░ рдкреНрд░рдмрдВрдзрди YOLOv8 рдЙрджрд╛рд╣рд░рдг
import cv2
from ultralytics import YOLO
from ultralytics.solutions import queue_management
model = YOLO("yolov8n.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))
video_writer = cv2.VideoWriter("queue_management.avi",
cv2.VideoWriter_fourcc(*'mp4v'),
fps,
(w, h))
queue_region = [(20, 400), (1080, 404), (1080, 360), (20, 360)]
queue = queue_management.QueueManager()
queue.set_args(classes_names=model.names,
reg_pts=queue_region,
line_thickness=3,
fontsize=1.0,
region_color=(255, 144, 31))
while cap.isOpened():
success, im0 = cap.read()
if success:
tracks = model.track(im0, show=False, persist=True,
verbose=False)
out = queue.process_queue(im0, tracks)
video_writer.write(im0)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
continue
print("Video frame is empty or video processing has been successfully completed.")
break
cap.release()
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO
from ultralytics.solutions import queue_management
model = YOLO("yolov8n.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))
video_writer = cv2.VideoWriter("queue_management.avi",
cv2.VideoWriter_fourcc(*'mp4v'),
fps,
(w, h))
queue_region = [(20, 400), (1080, 404), (1080, 360), (20, 360)]
queue = queue_management.QueueManager()
queue.set_args(classes_names=model.names,
reg_pts=queue_region,
line_thickness=3,
fontsize=1.0,
region_color=(255, 144, 31))
while cap.isOpened():
success, im0 = cap.read()
if success:
tracks = model.track(im0, show=False, persist=True,
verbose=False, classes=0) # Only person class
out = queue.process_queue(im0, tracks)
video_writer.write(im0)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
continue
print("Video frame is empty or video processing has been successfully completed.")
break
cap.release()
cv2.destroyAllWindows()
рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ set_args
рдирд╛рдо | рдкреНрд░рдХрд╛рд░ | рдЪреВрдХ | рдпрд╛ рдХрд╝рд┐рд╕реНтАНрдо |
---|---|---|---|
view_img |
bool |
False |
рдЧрд┐рдирддреА рдХреЗ рд╕рд╛рде рдлрд╝реНрд░реЗрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ |
view_queue_counts |
bool |
True |
рдкреНрд░рджрд░реНрд╢рди рдХрддрд╛рд░ рдХреЗрд╡рд▓ рд╡реАрдбрд┐рдпреЛ рдлрд╝реНрд░реЗрдо рдкрд░ рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ |
line_thickness |
int |
2 |
рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рдХреА рдореЛрдЯрд╛рдИ рдмрдврд╝рд╛рдПрдВ |
reg_pts |
list |
[(20, 400), (1260, 400)] |
рдХреНрд╖реЗрддреНрд░ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд┐рдВрджреБ |
classes_names |
dict |
model.model.names |
рд╡рд░реНрдЧ рдирд╛рдореЛрдВ рдХрд╛ рд╢рдмреНрджрдХреЛрд╢ |
region_color |
RGB Color |
(255, 0, 255) |
рд╡рд╕реНрддреБ рдХреА рдЧрд┐рдирддреА рдХреНрд╖реЗрддреНрд░ рдпрд╛ рд░реЗрдЦрд╛ рдХрд╛ рд░рдВрдЧ |
track_thickness |
int |
2 |
рдЯреНрд░реИрдХрд┐рдВрдЧ рд▓рд╛рдЗрдиреЛрдВ рдХреА рдореЛрдЯрд╛рдИ |
draw_tracks |
bool |
False |
рдЖрд░реЗрдЦрдг рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдЯреНрд░реИрдХ рд░реЗрдЦрд╛рдПрдБ |
track_color |
RGB Color |
(0, 255, 0) |
рдкреНрд░рддреНрдпреЗрдХ рдЯреНрд░реИрдХ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рд░рдВрдЧ |
count_txt_color |
RGB Color |
(255, 255, 255) |
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдЙрдВрдЯ рдкрд╛рда рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рднреВрдорд┐ рд░рдВрдЧ |
region_thickness |
int |
5 |
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдЙрдВрдЯрд░ рдХреНрд╖реЗрддреНрд░ рдпрд╛ рд░реЗрдЦрд╛ рдХреЗ рд▓рд┐рдП рдореЛрдЯрд╛рдИ |
fontsize |
float |
0.6 |
рдкрд╛рда рдЧрд┐рдирдиреЗ рдХрд╛ рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░ |
рддрд░реНрдХ 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 |
рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ |
2024-04-02 рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ 2024-04-02
рд▓реЗрдЦрдХ: рдмреБрд░рд╣рд╛рди-рдХреНрдпреВ (1), рд░рд┐рдЬрд╡рд╛рди рдореБрдирд╡реНрд╡рд░ (1)