рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдВ

рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ Ultralytics YOLOv8

рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдХреНрдпрд╛ рд╣реИ?

рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБ рдХреА рдЧрд┐рдирддреА Ultralytics YOLOv8 рд╡реАрдбрд┐рдпреЛ рдФрд░ рдХреИрдорд░рд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдЯреАрдХ рдкрд╣рдЪрд╛рди рдФрд░ рдЧрд┐рдирддреА рд╢рд╛рдорд┐рд▓ рд╣реИред YOLOv8 рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрддреНрдХреГрд╖реНрдЯрддрд╛, рднреАрдбрд╝ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрд╢рд▓ рдФрд░ рд╕рдЯреАрдХ рд╡рд╕реНрддреБ рдЧрдгрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдЧрд╣рди рд╕реАрдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред


рд╕рддрд░реНрдХрддрд╛: рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ Ultralytics YOLOv8

рд╕рддрд░реНрдХрддрд╛: рд╡рд░реНрдЧ-рд╡рд╛рд░ рд╡рд╕реНрддреБ рдЧрдгрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ Ultralytics YOLOv8

рд╡рд╕реНрддреБ рдЧрдгрдирд╛ рдХреЗ рд▓рд╛рдн?

  • рд╕рдВрд╕рд╛рдзрди рдЕрдиреБрдХреВрд▓рди: рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рд╕рдЯреАрдХ рдЧрдгрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдФрд░ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдкреНрд░рдмрдВрдзрди рдЬреИрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдЖрд╡рдВрдЯрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдХреЗ рдХреБрд╢рд▓ рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдмрдВрдзрди рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред
  • рдмрдврд╝реА рд╣реБрдИ рд╕реБрд░рдХреНрд╖рд╛: рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЯреНрд░реИрдХ рдФрд░ рдЧрд┐рдирдиреЗ рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рдХреНрд░рд┐рдп рдЦрддрд░реЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдорд┐рд▓рддреА рд╣реИред
  • рд╕реВрдЪрд┐рдд рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛: рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ, рдЦреБрджрд░рд╛ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди, рдпрд╛рддрд╛рдпрд╛рдд рдкреНрд░рдмрдВрдзрди рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреНрдп рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпрд╡рд╛рди рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ

рд▓реЙрдЬрд┐рд╕реНрдЯрд┐рдХрд╕ рдПрдХреНрд╡рд╛рдХрд▓реНрдЪрд░
рдХрдиреНрд╡реЗрдпрд░ рдмреЗрд▓реНрдЯ рдкреИрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЧрд┐рдирддреА Ultralytics YOLOv8 рд╕рдореБрджреНрд░ рдореЗрдВ рдордЫрд▓реА рдХреА рдЧрд┐рдирддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ Ultralytics YOLOv8
рдХрдиреНрд╡реЗрдпрд░ рдмреЗрд▓реНрдЯ рдкреИрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЧрд┐рдирддреА Ultralytics YOLOv8 рд╕рдореБрджреНрд░ рдореЗрдВ рдордЫрд▓реА рдХреА рдЧрд┐рдирддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ Ultralytics YOLOv8

рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ YOLOv8 рдЙрджрд╛рд╣рд░рдг

import cv2

from ultralytics import YOLO, solutions

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

# Define region points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=region_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

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

# Define region points as a polygon with 5 points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360), (20, 400)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=region_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

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

# Define line points
line_points = [(20, 400), (1080, 400)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=line_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

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

line_points = [(20, 400), (1080, 400)]  # line or region points
classes_to_count = [0, 2]  # person and car classes for count

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=line_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False, classes=classes_to_count)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
рдХреНрд╖реЗрддреНрд░ рдЬрдВрдЧрдо рд╣реИ

рдЖрдк рдЗрд╕рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдлреНрд░реЗрдо рдореЗрдВ рдХрд╣реАрдВ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдпреБрдХреНрддрд┐ ObjectCounter

рдпрд╣рд╛рдБ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ ObjectCounter рддрд░реНрдХ:

рдирд╛рдо рдкреНрд░рдХрд╛рд░ рдЪреВрдХ рдпрд╛ рдХрд╝рд┐рд╕реНтАНрдо
names dict None рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдирд╛рдореЛрдВ рдХрд╛ рд╢рдмреНрджрдХреЛрд╢ред
reg_pts list [(20, 400), (1260, 400)] рдорддрдЧрдгрдирд╛ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕реВрдЪреАред
count_reg_color tuple (255, 0, 255) рдЧрд┐рдирддреА рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЖрд░рдЬреАрдмреА рд░рдВрдЧред
count_txt_color tuple (0, 0, 0) рдЧрд┐рдирддреА рдкрд╛рда рдХрд╛ RGB рд░рдВрдЧред
count_bg_color tuple (255, 255, 255) рдЧрд┐рдирддреА рдкрд╛рда рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЖрд░рдЬреАрдмреА рд░рдВрдЧ.
line_thickness int 2 рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рдореЛрдЯрд╛рдИред
track_thickness int 2 рдЯреНрд░реИрдХ рд▓рд╛рдЗрдиреЛрдВ рдХреА рдореЛрдЯрд╛рдИред
view_img bool False рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдирд╣реАрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬ.
view_in_counts bool True рдпрд╣ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдкрд░ рдЗрди рдЧрдгрдирд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
view_out_counts bool True рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдкрд░ рдЖрдЙрдЯ рдХрд╛рдЙрдВрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рдХрд░реЗрдВред
draw_tracks bool False рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХ рдЖрд░реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рдХрд░реЗрдВ.
track_color tuple None рдкрдЯрд░рд┐рдпреЛрдВ рдХрд╛ рдЖрд░рдЬреАрдмреА рд░рдВрдЧред
region_thickness int 5 рд╡рд╕реНрддреБ рдЧрд┐рдирддреА рдХреНрд╖реЗрддреНрд░ рдХреА рдореЛрдЯрд╛рдИред
line_dist_thresh int 15 рд▓рд╛рдЗрди рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд▓рд┐рдП рдпреВрдХреНрд▓рд┐рдбрд┐рдпрди рджреВрд░реА рджрд╣рд▓реАрдЬред
cls_txtdisplay_gap int 50 рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдЧрдгрдирд╛ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред

рддрд░реНрдХ 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 рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ

рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди

рдореИрдВ рдХрд┐рд╕реА рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХрд░реВрдВ Ultralytics YOLOv8?

рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Ultralytics YOLOv8, рдЖрдк рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  1. рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВ (cv2, ultralytics).
  2. рдПрдХ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд▓реЛрдб рдХрд░реЗрдВ YOLOv8 рдХреЛ рдЧрдврд╝рдирд╛ред
  3. рдЧрд┐рдирддреА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ (рдЬреИрд╕реЗ, рдПрдХ рдмрд╣реБрднреБрдЬ, рд░реЗрдЦрд╛, рдЖрджрд┐)ред
  4. рд╡реАрдбрд┐рдпреЛ рдХреИрдкреНрдЪрд░ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВред
  5. рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрд╖реЗрддреНрд░ рдХреЗ рднреАрддрд░ рдЧрд┐рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВред

рдХрд┐рд╕реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

import cv2

from ultralytics import YOLO, solutions


def count_objects_in_region(video_path, output_video_path, model_path):
    """Count objects in a specific region within a video."""
    model = YOLO(model_path)
    cap = cv2.VideoCapture(video_path)
    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))
    region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]
    video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
    counter = solutions.ObjectCounter(
        view_img=True, reg_pts=region_points, names=model.names, draw_tracks=True, line_thickness=2
    )

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or video processing has been successfully completed.")
            break
        tracks = model.track(im0, persist=True, show=False)
        im0 = counter.start_counting(im0, tracks)
        video_writer.write(im0)

    cap.release()
    video_writer.release()
    cv2.destroyAllWindows()


count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolov8n.pt")

рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЕрдзрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░реЗрдВред

рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХреНрдпрд╛ рдлрд╛рдпрджреЗ рд╣реИрдВ Ultralytics YOLOv8 рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП?

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Ultralytics YOLOv8 рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрдИ рдлрд╛рдпрджреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

  1. рд╕рдВрд╕рд╛рдзрди рдЕрдиреБрдХреВрд▓рди: рдпрд╣ рд╕рдЯреАрдХ рдЧрдгрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдХреБрд╢рд▓ рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдмрдВрдзрди рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдкреНрд░рдмрдВрдзрди рдЬреИрд╕реЗ рдЙрджреНрдпреЛрдЧреЛрдВ рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдЖрд╡рдВрдЯрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИред
  2. рдмрдврд╝реА рд╣реБрдИ рд╕реБрд░рдХреНрд╖рд╛: рдпрд╣ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдХреЗ рдФрд░ рдЧрд┐рдирдХрд░ рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рд╕рдХреНрд░рд┐рдп рдЦрддрд░реЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХрд░рддрд╛ рд╣реИред
  3. рд╕реВрдЪрд┐рдд рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛: рдпрд╣ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ, рдЦреБрджрд░рд╛, рдпрд╛рддрд╛рдпрд╛рдд рдкреНрд░рдмрдВрдзрди, рдФрд░ рдЕрдзрд┐рдХ рдЬреИрд╕реЗ рдбреЛрдореЗрди рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпрд╡рд╛рди рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд╛рдн рдкрд░ рдЬрд╛рдПрдВред

рдореИрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рдЧрд┐рди рд╕рдХрддрд╛ рд╣реВрдВ Ultralytics YOLOv8?

рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Ultralytics YOLOv8, рдЖрдкрдХреЛ рдЯреНрд░реИрдХрд┐рдВрдЧ рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рдЙрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рдПрдХ рд╣реИ Python рдЙрджрд╛рд╣рд░рдг:

import cv2

from ultralytics import YOLO, solutions


def count_specific_classes(video_path, output_video_path, model_path, classes_to_count):
    """Count specific classes of objects in a video."""
    model = YOLO(model_path)
    cap = cv2.VideoCapture(video_path)
    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))
    line_points = [(20, 400), (1080, 400)]
    video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
    counter = solutions.ObjectCounter(
        view_img=True, reg_pts=line_points, names=model.names, draw_tracks=True, line_thickness=2
    )

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or video processing has been successfully completed.")
            break
        tracks = model.track(im0, persist=True, show=False, classes=classes_to_count)
        im0 = counter.start_counting(im0, tracks)
        video_writer.write(im0)

    cap.release()
    video_writer.release()
    cv2.destroyAllWindows()


count_specific_classes("path/to/video.mp4", "output_specific_classes.avi", "yolov8n.pt", [0, 2])

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, classes_to_count=[0, 2], рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ 0 рдФрд░ 2 (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реНрдпрдХреНрддрд┐ рдФрд░ рдХрд╛рд░)ред

рдореБрдЭреЗ рдХреНрдпреЛрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП YOLOv8 рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдореЙрдбрд▓ рдкрд░?

Ultralytics YOLOv8 рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдореЙрдбрд▓ рдЬреИрд╕реЗ рддреЗрдЬрд╝ рдЖрд░-рд╕реАрдПрдирдПрди, рдПрд╕рдПрд╕рдбреА рдФрд░ рдкрд┐рдЫрд▓реЗ рдкрд░ рдХрдИ рдлрд╛рдпрджреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ YOLO рд╕рдВрд╕реНрдХрд░рдгреЛрдВ:

  1. рдЧрддрд┐ рдФрд░ рджрдХреНрд╖рддрд╛: YOLOv8 рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдЙрдЪреНрдЪ рдЧрддрд┐ рд╡рд╛рд▓реЗ рдЕрдиреБрдорд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рд╕реНрд╡рд╛рдпрддреНрдд рдбреНрд░рд╛рдЗрд╡рд┐рдВрдЧред
  2. рдпрдерд╛рд░реНрдерддрд╛: рдпрд╣ рд╡рд╕реНрддреБ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рд╕рдЯреАрдХрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдордЧреНрд░ рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред
  3. рдПрдХреАрдХрд░рдг рдореЗрдВ рдЖрд╕рд╛рдиреА: YOLOv8 рдореЛрдмрд╛рдЗрд▓ рдФрд░ рдПрдЬ рдбрд┐рд╡рд╛рдЗрд╕ рд╕рд╣рд┐рдд рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣рдЬ рдПрдХреАрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдзреБрдирд┐рдХ рдПрдЖрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
  4. рд▓рдЪреАрд▓рд╛рдкрди: рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди, рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рджреЗрдЦреЛ Ultralytics YOLOv8 рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдгред

рдХреНрдпрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ YOLOv8 рднреАрдбрд╝ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдпрд╛рддрд╛рдпрд╛рдд рдкреНрд░рдмрдВрдзрди рдЬреИрд╕реЗ рдЙрдиреНрдирдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП?

рд╣рд╛рдБ Ultralytics YOLOv8 рдЕрдкрдиреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ, рдорд╛рдкрдиреАрдпрддрд╛ рдФрд░ рдПрдХреАрдХрд░рдг рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рдХрд╛рд░рдг рднреАрдбрд╝ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдпрд╛рддрд╛рдпрд╛рдд рдкреНрд░рдмрдВрдзрди рдЬреИрд╕реЗ рдЙрдиреНрдирдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИред рдЗрд╕рдХреА рдЙрдиреНрдирдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЧрддрд┐рд╢реАрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рдЯреНрд░реИрдХрд┐рдВрдЧ, рдЧрд┐рдирддреА рдФрд░ рд╡рд░реНрдЧреАрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рднреАрдбрд╝ рд╡рд┐рд╢реНрд▓реЗрд╖рдг: рдмрдбрд╝реА рд╕рднрд╛рдУрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рдкреНрд░рдмрдВрдзрди рдХрд░реЗрдВ, рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдФрд░ рднреАрдбрд╝ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВред
  • рдпрд╛рддрд╛рдпрд╛рдд рдкреНрд░рдмрдВрдзрди: рд╡рд╛рд╣рдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдФрд░ рдЧрд┐рдиреЗрдВ, рдЯреНрд░реИрдлрд╝рд┐рдХ рдкреИрдЯрд░реНрди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рднреАрдбрд╝ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░реЗрдВред

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╢реНрд╡ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рдЧрд╛рдЗрдб рджреЗрдЦреЗрдВ YOLOv8.



рдмрдирд╛рдпрд╛ рдЧрдпрд╛ 2023-12-02, рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ 2024-07-14
рд▓реЗрдЦрдХ: рд░рд┐рдЬрд╡рд╛рди рдореБрдирд╡реНрд╡рд░ (6), рдЧреНрд▓реЗрди-рдЬреЛрдЪрд░ (15), рдЗрд╡реЛрд░рдЭреВ331 (1), рдЖрдпреБрд╖рдПрдХреНрд╕рд▓ (1)

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ