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

рдорд▓реНрдЯреА-рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рд╕рд╛рде Ultralytics YOLO

рдорд▓реНрдЯреА-рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг

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

рдХреНрдпреЛрдВ рдЪреБрдиреЗрдВ Ultralytics YOLO рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП?

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

  • рджрдХреНрд╖рддрд╛: рд╕рдЯреАрдХрддрд╛ рд╕реЗ рд╕рдордЭреМрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВред
  • рд▓рдЪреАрд▓рд╛рдкрди: рдХрдИ рдЯреНрд░реИрдХрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
  • рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА: рд╕рд░рд▓ Python API рдФрд░ CLI рддреНрд╡рд░рд┐рдд рдПрдХреАрдХрд░рдг рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкред
  • рдЕрдиреБрдХреВрд▓рдирд╢реАрд▓рддрд╛: рдХрд╕реНрдЯрдо рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди YOLO рдореЙрдбрд▓, рдбреЛрдореЗрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдХреАрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



рд╕рддрд░реНрдХрддрд╛: рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рд╕рд╛рде Ultralytics YOLOv8.

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

рдкрд░рд┐рд╡рд╣рди рдлреБрдЯрдХрд░ рдПрдХреНрд╡рд╛рдХрд▓реНрдЪрд░
рд╡рд╛рд╣рди рдЯреНрд░реИрдХрд┐рдВрдЧ рд▓реЛрдЧ рдЯреНрд░реИрдХрд┐рдВрдЧ рдордЫрд▓реА рдЯреНрд░реИрдХрд┐рдВрдЧ
рд╡рд╛рд╣рди рдЯреНрд░реИрдХрд┐рдВрдЧ рд▓реЛрдЧ рдЯреНрд░реИрдХрд┐рдВрдЧ рдордЫрд▓реА рдЯреНрд░реИрдХрд┐рдВрдЧ

рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдПрдХ рдирдЬрд╝рд░ рдореЗрдВ

Ultralytics YOLO рдордЬрдмреВрдд рдФрд░ рдмрд╣реБрдореБрдЦреА рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ:

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

рдЙрдкрд▓рдмреНрдз рдЯреНрд░реИрдХрд░реНрд╕

Ultralytics YOLO рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреНрд░реИрдХрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ YAML рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдкрд╛рд╕ рдХрд░рдХреЗ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ tracker=tracker_type.yaml:

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреНрд░реИрдХрд░ BoT-SORT рд╣реИред

рдиреЫрд░ рд░рдЦрдирд╛

рдЯреНрд░реИрдХрд░ рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рдЬрд╛рдирдХрд╛рд░реА

рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд┐рдбреЗрдВрд╕ рд╕реНрдХреЛрд░ рдХрдо рд╣реЛрдЧрд╛, рдпрд╛рдиреА рдЗрд╕рд╕реЗ рдХрдо track_high_thresh, рдлрд┐рд░ рдХреЛрдИ рдЯреНрд░реИрдХ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡рд╛рдкрд╕ рдФрд░ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЯреНрд░реИрдХрд░ рдХреЛ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдбрд┐рдЯреЗрдХреНрдЯ, рд╕реЗрдЧрдореЗрдВрдЯ рдпрд╛ рдкреЛрдЬрд╝ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреИрд╕реЗ рдХрд┐ YOLOv8n, YOLOv8n-seg рдФрд░ YOLOv8n-рднрдВрдЧрд┐рдорд╛ред

рдЙрджрд╛рд╣рд░рдг

from ultralytics import YOLO

# Load an official or custom model
model = YOLO('yolov8n.pt')  # Load an official Detect model
model = YOLO('yolov8n-seg.pt')  # Load an official Segment model
model = YOLO('yolov8n-pose.pt')  # Load an official Pose model
model = YOLO('path/to/best.pt')  # Load a custom trained model

# Perform tracking with the model
results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True)  # Tracking with default tracker
results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True, tracker="bytetrack.yaml")  # Tracking with ByteTrack tracker
# Perform tracking with various models using the command line interface
yolo track model=yolov8n.pt source="https://youtu.be/LNwODJXcvt4"  # Official Detect model
yolo track model=yolov8n-seg.pt source="https://youtu.be/LNwODJXcvt4"  # Official Segment model
yolo track model=yolov8n-pose.pt source="https://youtu.be/LNwODJXcvt4"  # Official Pose model
yolo track model=path/to/best.pt source="https://youtu.be/LNwODJXcvt4"  # Custom trained model

# Track using ByteTrack tracker
yolo track model=path/to/best.pt tracker="bytetrack.yaml"

рдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдЙрдкрдпреЛрдЧ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡реАрдбрд┐рдпреЛ рдпрд╛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕реНрд░реЛрддреЛрдВ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдбрд┐рдЯреЗрдХреНрдЯ, рд╕реЗрдЧрдореЗрдВрдЯ рдФрд░ рдкреЛрдЬрд╝ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рдЙрдкрд▓рдмреНрдз рд╣реИред

рд╕рдВрд░реВрдкрдг

рдЯреНрд░реИрдХрд░ рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рдЬрд╛рдирдХрд╛рд░реА

рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд┐рдбреЗрдВрд╕ рд╕реНрдХреЛрд░ рдХрдо рд╣реЛрдЧрд╛, рдпрд╛рдиреА рдЗрд╕рд╕реЗ рдХрдо track_high_thresh, рдлрд┐рд░ рдХреЛрдИ рдЯреНрд░реИрдХ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡рд╛рдкрд╕ рдФрд░ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЯреНрд░реИрдХрд┐рдВрдЧ рддрд░реНрдХ

рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдореЛрдб рдХреЗ рд╕рд╛рде рдЧреБрдг рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ conf, iouрдФрд░ show. рдЖрдЧреЗ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ рднрд╡рд┐рд╖реНтАНрдпрд╡рд╛рдгреА рдХрд░рдирд╛ рдореЙрдбрд▓ рдкреЗрдЬред

рдЙрджрд╛рд╣рд░рдг

from ultralytics import YOLO

# Configure the tracking parameters and run the tracker
model = YOLO('yolov8n.pt')
results = model.track(source="https://youtu.be/LNwODJXcvt4", conf=0.3, iou=0.5, show=True)
# Configure tracking parameters and run the tracker using the command line interface
yolo track model=yolov8n.pt source="https://youtu.be/LNwODJXcvt4" conf=0.3, iou=0.5 show

рдЯреНрд░реИрдХрд░ рдЪрдпрди

Ultralytics рдЖрдкрдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдЯреНрд░реИрдХрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдПрдХ рдЯреНрд░реИрдХрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рдПрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, custom_tracker.yaml) рд╕реЗ ultralytics/рд╕реАрдПрдлрдЬреА/рдЯреНрд░реИрдХрд░реНрд╕ рдФрд░ рдХрд┐рд╕реА рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ (рд╕рд┐рд╡рд╛рдп tracker_type) рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ред

рдЙрджрд╛рд╣рд░рдг

from ultralytics import YOLO

# Load the model and run the tracker with a custom configuration file
model = YOLO('yolov8n.pt')
results = model.track(source="https://youtu.be/LNwODJXcvt4", tracker='custom_tracker.yaml')
# Load the model and run the tracker with a custom configuration file using the command line interface
yolo track model=yolov8n.pt source="https://youtu.be/LNwODJXcvt4" tracker='custom_tracker.yaml'

рдЯреНрд░реИрдХрд┐рдВрдЧ рддрд░реНрдХреЛрдВ рдХреА рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП, ultralytics/cfg/trackers рдкреГрд╖реНрдаред

Python рдЙрджрд╛рд╣рд░рдг

рд▓рдЧрд╛рддрд╛рд░ рдЯреНрд░реИрдХ рд▓реВрдк

рдпрд╣рд╛рдБ рдПрдХ рд╣реИ Python рдУрдкрдирд╕реАрд╡реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ (cv2) рдФрд░ YOLOv8 рд╡реАрдбрд┐рдпреЛ рдлреНрд░реЗрдо рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрднреА рднреА рдорд╛рдирддреА рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд▓рд┐рдП рд╣реИрдВ (opencv-python рдФрд░ ultralytics). рд╡рд╣реА persist=True рддрд░реНрдХ рдЯреНрд░реИрдХрд░ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдЫрд╡рд┐ рдпрд╛ рдлреНрд░реЗрдо рдПрдХ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдЕрдЧрд▓рд╛ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рдЫрд╡рд┐ рдореЗрдВ рдкрд┐рдЫрд▓реА рдЫрд╡рд┐ рд╕реЗ рдкрдЯрд░рд┐рдпреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд▓реВрдк рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ

import cv2
from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO('yolov8n.pt')

# Open the video file
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLOv8 tracking on the frame, persisting tracks between frames
        results = model.track(frame, persist=True)

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Display the annotated frame
        cv2.imshow("YOLOv8 Tracking", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

рдХреГрдкрдпрд╛ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ model(frame) рддрдХ model.track(frame), рдЬреЛ рд╕рд░рд▓ рдкрд╣рдЪрд╛рди рдХреЗ рдмрдЬрд╛рдп рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрд╢реЛрдзрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡реАрдбрд┐рдпреЛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдкрд░ рдЯреНрд░реИрдХрд░ рдЪрд▓рд╛рдПрдЧреА, рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдЧреА рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧреАред рд▓реВрдк рдХреЛ 'q' рджрдмрд╛рдХрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдордп рдХреЗ рд╕рд╛рде рдкрдЯрд░рд┐рдпреЛрдВ рдХреА рд╕рд╛рдЬрд┐рд╢ рд░рдЪрдирд╛

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

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

рдХрдИ рд╡реАрдбрд┐рдпреЛ рдлреНрд░реЗрдо рдкрд░ рдкреНрд▓реЙрдЯрд┐рдВрдЧ рдЯреНрд░реИрдХ

from collections import defaultdict

import cv2
import numpy as np

from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO('yolov8n.pt')

# Open the video file
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)

# Store the track history
track_history = defaultdict(lambda: [])

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLOv8 tracking on the frame, persisting tracks between frames
        results = model.track(frame, persist=True)

        # Get the boxes and track IDs
        boxes = results[0].boxes.xywh.cpu()
        track_ids = results[0].boxes.id.int().cpu().tolist()

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Plot the tracks
        for box, track_id in zip(boxes, track_ids):
            x, y, w, h = box
            track = track_history[track_id]
            track.append((float(x), float(y)))  # x, y center point
            if len(track) > 30:  # retain 90 tracks for 90 frames
                track.pop(0)

            # Draw the tracking lines
            points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2))
            cv2.polylines(annotated_frame, [points], isClosed=False, color=(230, 230, 230), thickness=10)

        # Display the annotated frame
        cv2.imshow("YOLOv8 Tracking", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдЯреНрд░реИрдХрд┐рдВрдЧ

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

рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдореЗрдВ Python рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд╣рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ PythonрдХреЗ рдПрд╕ threading рдЯреНрд░реИрдХрд░ рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕рдорд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ред рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдПрдХ рд╡реАрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЯреНрд░реИрдХрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рд╕рднреА рдереНрд░реЗрдб рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдПрдХ рд╕рд╛рде рдЪрд▓рддреЗ рд╣реИрдВред

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЛ рд╕рд╣реА рдкреИрд░рд╛рдореАрдЯрд░ (рд╡реАрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓, рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдЗрдВрдбреЗрдХреНрд╕) рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ run_tracker_in_thread рдЬреЛ рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдореБрдЦреНрдп рдЯреНрд░реИрдХрд┐рдВрдЧ рд▓реВрдк рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╡реАрдбрд┐рдпреЛ рдлреНрд░реЗрдо рджрд░ рдлреНрд░реЗрдо рдкрдврд╝рддрд╛ рд╣реИ, рдЯреНрд░реИрдХрд░ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: yolov8n.pt рдФрд░ yolov8n-seg.pt, рдкреНрд░рддреНрдпреЗрдХ рдЯреНрд░реИрдХрд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдПрдХ рдЕрд▓рдЧ рд╡реАрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВред рд╡реАрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓реЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВ video_file1 рдФрд░ video_file2.

рд╡рд╣реА daemon=True рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ threading.Thread рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реА рдЗрди рдзрд╛рдЧреЗ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдлрд┐рд░ рд╣рдо рдереНрд░реЗрдбреНрд╕ рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ start() рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ join() рдореБрдЦреНрдп рдзрд╛рдЧрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдЯреНрд░реИрдХрд░ рдзрд╛рдЧреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред

рдЕрдВрдд рдореЗрдВ, рд╕рднреА рдереНрд░реЗрдбреНрд╕ рдиреЗ рдЕрдкрдирд╛ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдВрдбреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ cv2.destroyAllWindows().

рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд▓реВрдк рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ

import threading
import cv2
from ultralytics import YOLO


def run_tracker_in_thread(filename, model, file_index):
    """
    Runs a video file or webcam stream concurrently with the YOLOv8 model using threading.

    This function captures video frames from a given file or camera source and utilizes the YOLOv8 model for object
    tracking. The function runs in its own thread for concurrent processing.

    Args:
        filename (str): The path to the video file or the identifier for the webcam/external camera source.
        model (obj): The YOLOv8 model object.
        file_index (int): An index to uniquely identify the file being processed, used for display purposes.

    Note:
        Press 'q' to quit the video display window.
    """
    video = cv2.VideoCapture(filename)  # Read the video file

    while True:
        ret, frame = video.read()  # Read the video frames

        # Exit the loop if no more frames in either video
        if not ret:
            break

        # Track objects in frames if available
        results = model.track(frame, persist=True)
        res_plotted = results[0].plot()
        cv2.imshow(f"Tracking_Stream_{file_index}", res_plotted)

        key = cv2.waitKey(1)
        if key == ord('q'):
            break

    # Release video sources
    video.release()


# Load the models
model1 = YOLO('yolov8n.pt')
model2 = YOLO('yolov8n-seg.pt')

# Define the video files for the trackers
video_file1 = "path/to/video1.mp4"  # Path to video file, 0 for webcam
video_file2 = 0  # Path to video file, 0 for webcam, 1 for external camera

# Create the tracker threads
tracker_thread1 = threading.Thread(target=run_tracker_in_thread, args=(video_file1, model1, 1), daemon=True)
tracker_thread2 = threading.Thread(target=run_tracker_in_thread, args=(video_file2, model2, 2), daemon=True)

# Start the tracker threads
tracker_thread1.start()
tracker_thread2.start()

# Wait for the tracker threads to finish
tracker_thread1.join()
tracker_thread2.join()

# Clean up and close windows
cv2.destroyAllWindows()

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЕрдзрд┐рдХ рдереНрд░реЗрдб рдмрдирд╛рдХрд░ рдФрд░ рдЙрд╕реА рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рд╡реАрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдореЙрдбрд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдирдП рдЯреНрд░реИрдХрд░реНрд╕ рдХрд╛ рдпреЛрдЧрджрд╛рди рдХрд░реЗрдВ

рдХреНрдпрд╛ рдЖрдк рдорд▓реНрдЯреА-рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ рдореЗрдВ рдХреБрд╢рд▓ рд╣реИрдВ рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд╛рдЧреВ рдпрд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ Ultralytics YOLO? рд╣рдо рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рдЯреНрд░реИрдХрд░реНрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ ultralytics/cfg/рдЯреНрд░реИрдХрд░реНрд╕! рдЯреНрд░реИрдХрд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд╕рдорд╛рдзрд╛рди рдЕрдореВрд▓реНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

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

рдЕрдкрдирд╛ рдпреЛрдЧрджрд╛рди рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз (рдкреАрдЖрд░) ЁЯЫая╕П рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд╡реНрдпрд╛рдкрдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рджреЗрдЦреЗрдВред рд╣рдо рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реИрдВ рдХрд┐ рдЖрдк рдореЗрдЬ рдкрд░ рдХреНрдпрд╛ рд▓рд╛рддреЗ рд╣реИрдВ!

рд╕рд╛рде рдореЗрдВ, рдЖрдЗрдП рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдмрдврд╝рд╛рдПрдВ Ultralytics YOLO ЁЯЩП рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ !



2023-11-12 рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ 2024-04-26
рд▓реЗрдЦрдХ: рдЧреНрд▓реЗрди-рдЬреЛрдЪрд░ (11)

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