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

рд╡рд░реНрдХрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдЧрд░рд╛рдиреА Ultralytics YOLOv8 ЁЯЪА

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



рд╕рддрд░реНрдХрддрд╛: рд╡рд░реНрдХрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдЧрд░рд╛рдиреА Ultralytics YOLOv8 | рдкреБрд╢рдЕрдкреНрд╕, рдкреБрд▓рдЕрдк, рдПрдм рд╡рд░реНрдХрдЖрдЙрдЯреНрд╕

рд╡рд░реНрдХрдЖрдЙрдЯ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдХреЗ рдлрд╛рдпрджреЗ?

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

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

рд╡рд░реНрдХрдЖрдЙрдЯ рдХреА рдирд┐рдЧрд░рд╛рдиреА рд╡рд░реНрдХрдЖрдЙрдЯ рдХреА рдирд┐рдЧрд░рд╛рдиреА
рдкреБрд╢рдЕрдкреНрд╕ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдкреБрд▓рдЕрдк рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ
рдкреБрд╢рдЕрдкреНрд╕ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдкреБрд▓рдЕрдк рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ

рд╡рд░реНрдХрдЖрдЙрдЯ рдирд┐рдЧрд░рд╛рдиреА рдЙрджрд╛рд╣рд░рдг

from ultralytics import YOLO
from ultralytics.solutions import ai_gym
import cv2

model = YOLO("yolov8n-pose.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))

gym_object = ai_gym.AIGym()  # init AI GYM module
gym_object.set_args(line_thickness=2,
                    view_img=True,
                    pose_type="pushup",
                    kpts_to_check=[6, 8, 10])

frame_count = 0
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
      print("Video frame is empty or video processing has been successfully completed.")
      break
    frame_count += 1
    results = model.track(im0, verbose=False)  # Tracking recommended
    #results = model.predict(im0)  # Prediction also supported
    im0 = gym_object.start_counting(im0, results, frame_count)

cv2.destroyAllWindows()
from ultralytics import YOLO
from ultralytics.solutions import ai_gym
import cv2

model = YOLO("yolov8n-pose.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("workouts.avi",
                                cv2.VideoWriter_fourcc(*'mp4v'),
                                fps,
                                (w, h))

gym_object = ai_gym.AIGym()  # init AI GYM module
gym_object.set_args(line_thickness=2,
                    view_img=True,
                    pose_type="pushup",
                    kpts_to_check=[6, 8, 10])

frame_count = 0
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
      print("Video frame is empty or video processing has been successfully completed.")
      break
    frame_count += 1
    results = model.track(im0, verbose=False)  # Tracking recommended
    #results = model.predict(im0)  # Prediction also supported
    im0 = gym_object.start_counting(im0, results, frame_count)
    video_writer.write(im0)

cv2.destroyAllWindows()
video_writer.release()
рдЬреАрд╡рд┐рдХрд╛

"рдкреБрд╢рдЕрдк", "рдкреБрд▓рдЕрдк" рдФрд░ "рдПрдмреНрд╕рд╡рд░реНрдХ" рд╕рдорд░реНрдерд┐рдд

рдХреАрдкреЙрдЗрдВрдЯреНрд╕ рдореИрдк

рдХреАрдкреЙрдЗрдВрдЯреНрд╕ рдСрд░реНрдбрд░ Ultralytics YOLOv8 рднрдВрдЧрд┐рдорд╛

рддрд░реНрдХ set_args

рдирд╛рдо рдкреНрд░рдХрд╛рд░ рдЪреВрдХ рдпрд╛ рдХрд╝рд┐рд╕реНтАНрдо
kpts_to_check list None рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╕рд░рдд рдХреА рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП рддреАрди рдХреАрдкреЙрдЗрдВрдЯ рдЗрдВрдбреЗрдХреНрд╕ рдХреА рд╕реВрдЪреА, рдЙрд╕рдХреЗ рдмрд╛рдж рдХреАрдкреЙрдЗрдВрдЯ рдореИрдк
view_img bool False рдлрд╝реНрд░реЗрдо рдХреЛ рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ
line_thickness int 2 рдЧрд┐рдирддреА рдореВрд▓реНрдп рдХреА рдореЛрдЯрд╛рдИ рдмрдврд╝рд╛рдПрдБ
pose_type str pushup рдкреЛрдЬ рдЬрд┐рд╕реЗ рдореЙрдирд┐рдЯрд░ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, pullup рдФрд░ abworkout рднреА рд╕рдорд░реНрдерди рдХрд┐рдпрд╛
pose_up_angle int 145 рдкреЛрдЬ рдЕрдк рдПрдВрдЧрд▓ рд╡реИрд▓реНрдпреВ
pose_down_angle int 90 рдкреЛрдЬ рдбрд╛рдЙрди рдПрдВрдЧрд▓ рд╡реИрд▓реНрдпреВ

рддрд░реНрдХ model.predict

рдирд╛рдо рдкреНрд░рдХрд╛рд░ рдЪреВрдХ рдпрд╛ рдХрд╝рд┐рд╕реНтАНрдо
source str 'ultralytics/assets' рдЫрд╡рд┐рдпреЛрдВ рдпрд╛ рд╡реАрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛
conf float 0.25 рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд┐рдбреЗрдВрд╕ рдереНрд░реЗрд╢реЛрд▓реНрдб
iou float 0.7 рдПрдирдПрдордПрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрдШ (рдЖрдИрдУрдпреВ) рд╕реАрдорд╛ рдкрд░ рдЪреМрд░рд╛рд╣рд╛
imgsz int or tuple 640 рд╕реНрдХреЗрд▓рд░ рдпрд╛ (рдПрдЪ, рдбрдмреНрд▓реНрдпреВ) рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░, рдпрд╛рдиреА (640, 480)
half bool False рдЖрдзреА рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ (FP16) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
device None or str None рдЪрд╛рд▓реВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рд╡рд╛рдЗрд╕, рдпрд╛рдиреА рдХреНрдпреВрдбрд╛ рдбрд┐рд╡рд╛рдЗрд╕ = 0/1/2/3 рдпрд╛ рдбрд┐рд╡рд╛рдЗрд╕ = рд╕реАрдкреАрдпреВ
max_det int 300 рдкреНрд░рддрд┐ рдЫрд╡рд┐ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛
vid_stride bool False рд╡реАрдбрд┐рдпреЛ рдлреНрд░реЗрдо-рджрд░ рд╕реНрдЯреНрд░рд╛рдЗрдб
stream_buffer bool False рд╕рднреА рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдлрд╝реНрд░реЗрдо (рд╕рд╣реА) рдХреЛ рдмрдлрд╝рд░ рдХрд░реЗрдВ рдпрд╛ рдирд╡реАрдирддрдо рдлрд╝реНрд░реЗрдо (рдЧрд▓рдд) рд▓реМрдЯрд╛рдПрдВ
visualize bool False рдореЙрдбрд▓ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ
augment bool False рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╕реНрд░реЛрддреЛрдВ рдкрд░ рдЫрд╡рд┐ рд╡реГрджреНрдзрд┐ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
agnostic_nms bool False рд╡рд░реНрдЧ-рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА рдПрдирдПрдордПрд╕
classes list[int] None рдХрдХреНрд╖рд╛ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдкрд░рд┐рдгрд╛рдо, рдпрд╛рдиреА рдХрдХреНрд╖рд╛рдПрдВ = 0, рдпрд╛ рдХрдХреНрд╖рд╛рдПрдВ = [0,2,3]
retina_masks bool False рдЙрдЪреНрдЪ-рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рдорд╛рд╕реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
embed list[int] None рджреА рдЧрдИ рдкрд░рддреЛрдВ рд╕реЗ рд╕реБрд╡рд┐рдзрд╛ рд╡реИрдХреНрдЯрд░/рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реМрдЯрд╛рдПрдВ

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


2023-12-02 рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ 2024-04-18
рд▓реЗрдЦрдХ: рдЧреНрд▓реЗрди-рдЬреЛрдЪрд░ (6), рд░рд┐рдЬрд╡рд╛рдирдореБрдирд╡реНрд╡рд░ (1)

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