рд╡рд░реНрдХрдЖрдЙрдЯ рдирд┐рдЧрд░рд╛рдиреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ Ultralytics YOLOv8
рдореБрджреНрд░рд╛ рдЕрдиреБрдорд╛рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрдХрдЖрдЙрдЯ рдХреА рдирд┐рдЧрд░рд╛рдиреА Ultralytics YOLOv8 рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рд╢рд░реАрд░ рдХреЗ рдкреНрд░рдореБрдЦ рд╕реНрдерд▓реЛрдВ рдФрд░ рдЬреЛрдбрд╝реЛрдВ рдХреЛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдХреЗ рд╡реНрдпрд╛рдпрд╛рдо рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдпрд╣ рддрдХрдиреАрдХ рд╡реНрдпрд╛рдпрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рддрддреНрдХрд╛рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдХрд╕рд░рдд рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддреА рд╣реИ, рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдорд╛рдкрддреА рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕рддреНрд░реЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддреА рд╣реИред
рд╕рддрд░реНрдХрддрд╛: рд╡рд░реНрдХрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдЧрд░рд╛рдиреА Ultralytics YOLOv8 | рдкреБрд╢рдЕрдкреНрд╕, рдкреБрд▓рдЕрдк, рдПрдм рд╡рд░реНрдХрдЖрдЙрдЯреНрд╕
рд╡рд░реНрдХрдЖрдЙрдЯ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдХреЗ рдлрд╛рдпрджреЗ?
- рдЕрдиреБрдХреВрд▓рд┐рдд рдкреНрд░рджрд░реНрд╢рди: рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд░реНрдХрдЖрдЙрдЯ рдХреА рддреИрдпрд╛рд░реАред
- рд▓рдХреНрд╖реНрдп рдЙрдкрд▓рдмреНрдзрд┐: рдорд╛рдкрдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдлрд┐рдЯрдиреЗрд╕ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдФрд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВред
- рд╡реИрдпрдХреНрддрд┐рдХрд░рдг: рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд╕рд░рдд рдпреЛрдЬрдирд╛рдПрдВред
- рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдЧрд░реВрдХрддрд╛: рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рдореБрджреНрджреЛрдВ рдпрд╛ рдЕрддрд┐-рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдкреИрдЯрд░реНрди рдХрд╛ рд╢реАрдШреНрд░ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ред
- рд╕реВрдЪрд┐рдд рдирд┐рд░реНрдгрдп: рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛-рд╕рдВрдЪрд╛рд▓рд┐рдд рдирд┐рд░реНрдгрдпред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ
рд╡рд░реНрдХрдЖрдЙрдЯ рдХреА рдирд┐рдЧрд░рд╛рдиреА | рд╡рд░реНрдХрдЖрдЙрдЯ рдХреА рдирд┐рдЧрд░рд╛рдиреА |
---|---|
рдкреБрд╢рдЕрдкреНрд╕ рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ | рдкреБрд▓рдЕрдк рдХрд╛рдЙрдВрдЯрд┐рдВрдЧ |
рд╡рд░реНрдХрдЖрдЙрдЯ рдирд┐рдЧрд░рд╛рдиреА рдЙрджрд╛рд╣рд░рдг
import cv2
from ultralytics import YOLO, solutions
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 = solutions.AIGym(
line_thickness=2,
view_img=True,
pose_type="pushup",
kpts_to_check=[6, 8, 10],
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
results = model.track(im0, verbose=False) # Tracking recommended
# results = model.predict(im0) # Prediction also supported
im0 = gym_object.start_counting(im0, results)
cv2.destroyAllWindows()
import cv2
from ultralytics import YOLO, solutions
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 = solutions.AIGym(
line_thickness=2,
view_img=True,
pose_type="pushup",
kpts_to_check=[6, 8, 10],
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
results = model.track(im0, verbose=False) # Tracking recommended
# results = model.predict(im0) # Prediction also supported
im0 = gym_object.start_counting(im0, results)
video_writer.write(im0)
cv2.destroyAllWindows()
video_writer.release()
рдЬреАрд╡рд┐рдХрд╛
"рдкреБрд╢рдЕрдк", "рдкреБрд▓рдЕрдк" рдФрд░ "рдПрдмреНрд╕рд╡рд░реНрдХ" рд╕рдорд░реНрдерд┐рдд
рдХреАрдкреЙрдЗрдВрдЯреНрд╕ рдореИрдк
рддрд░реНрдХ AIGym
рдирд╛рдо | рдкреНрд░рдХрд╛рд░ | рдЪреВрдХ | рдпрд╛ рдХрд╝рд┐рд╕реНтАНрдо |
---|---|---|---|
kpts_to_check |
list |
None |
рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╕рд░рдд рдХреА рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП рддреАрди рдХреАрдкреЙрдЗрдВрдЯ рдЗрдВрдбреЗрдХреНрд╕ рдХреА рд╕реВрдЪреА, рдЙрд╕рдХреЗ рдмрд╛рдж рдХреАрдкреЙрдЗрдВрдЯ рдореИрдк |
line_thickness |
int |
2 |
рдЦреАрдВрдЪреА рдЧрдИ рд░реЗрдЦрд╛рдУрдВ рдХреА рдореЛрдЯрд╛рдИред |
view_img |
bool |
False |
рдЫрд╡рд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рдХрд░реЗрдВ. |
pose_up_angle |
float |
145.0 |
'рдЕрдк' рдореБрджреНрд░рд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдг рджрд╣рд▓реАрдЬред |
pose_down_angle |
float |
90.0 |
'рдбрд╛рдЙрди' рдкреЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдВрдЧрд▓ рдереНрд░реЗрд╕рд╣реЛрд▓реНрдбред |
pose_type |
str |
pullup |
рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрджреНрд░рд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ ('pullup ', pushup , abworkout , squat ). |
рддрд░реНрдХ 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 |
рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрд░реНрдерд╛рддред cuda рдбрд┐рд╡рд╛рдЗрд╕ = 0/1/2/3 рдпрд╛ рдбрд┐рд╡рд╛рдЗрд╕ =cpu |
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 |
рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ |
рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди
рдореИрдВ рдЕрдкрдиреЗ рд╡рд░реНрдХрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рдирд┐рдЧрд░рд╛рдиреА рдХрд░реВрдВ Ultralytics YOLOv8?
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЕрдкрдиреЗ workouts рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Ultralytics YOLOv8, рдЖрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдкреНрд░рдореБрдЦ рд╢рд░реАрд░ рдХреЗ рд╕реНрдерд▓реЛрдВ рдФрд░ рдЬреЛрдбрд╝реЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрджреНрд░рд╛ рдЕрдиреБрдорд╛рди рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╡реНрдпрд╛рдпрд╛рдо рдлреЙрд░реНрдо рдкрд░ рддрддреНрдХрд╛рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ, рджреЛрд╣рд░рд╛рд╡ рдЧрд┐рдирдиреЗ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдореАрдЯреНрд░рд┐рдХ рдХреЛ рдорд╛рдкрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рджрд┐рдЦрд╛рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ рдкреБрд╢рдЕрдк, рдкреБрд▓рдЕрдк рдпрд╛ рдПрдм рд╡рд░реНрдХрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
import cv2
from ultralytics import YOLO, solutions
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 = solutions.AIGym(
line_thickness=2,
view_img=True,
pose_type="pushup",
kpts_to_check=[6, 8, 10],
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
results = model.track(im0, verbose=False)
im0 = gym_object.start_counting(im0, results)
cv2.destroyAllWindows()
рдЖрдЧреЗ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП, рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ AIGym рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХреНрдпрд╛ рд▓рд╛рдн рд╣реИрдВ Ultralytics YOLOv8 рдХрд╕рд░рдд рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП?
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Ultralytics YOLOv8 рдХрд╕рд░рдд рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- рдЕрдиреБрдХреВрд▓рд┐рдд рдкреНрд░рджрд░реНрд╢рди: рдирд┐рдЧрд░рд╛рдиреА рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд░реНрдХрдЖрдЙрдЯ рдХреЛ рд╕рд┐рд▓рд╛рдИ рдХрд░рдХреЗ, рдЖрдк рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рд▓рдХреНрд╖реНрдп рдЙрдкрд▓рдмреНрдзрд┐: рдорд╛рдкрдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдлрд┐рдЯрдиреЗрд╕ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЯреНрд░реИрдХ рдФрд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВред
- рд╡реИрдпрдХреНрддрд┐рдХрд░рдг: рдЗрд╖реНрдЯрддрдо рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд╕рд░рдд рдпреЛрдЬрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
- рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдЧрд░реВрдХрддрд╛: рдкреИрдЯрд░реНрди рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрд╡рд╛рд╕реНрдереНрдп рдореБрджреНрджреЛрдВ рдпрд╛ рдЕрддрд┐-рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред
- рд╕реВрдЪрд┐рдд рдирд┐рд░реНрдгрдп: рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛-рд╕рдВрдЪрд╛рд▓рд┐рдд рдирд┐рд░реНрдгрдп рд▓реЗрдВред
рдЗрди рд▓рд╛рднреЛрдВ рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк YouTube рд╡реАрдбрд┐рдпреЛ рдкреНрд░рджрд░реНрд╢рди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд┐рддрдирд╛ рд╕рд╣реА рд╣реИ Ultralytics YOLOv8 рдЕрднреНрдпрд╛рд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдореЗрдВ?
Ultralytics YOLOv8 рдЕрдкрдиреА рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рдореБрджреНрд░рд╛ рдЕрдиреБрдорд╛рди рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдЕрднреНрдпрд╛рд╕реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдореЗрдВ рдЕрддреНрдпрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реИред рдпрд╣ рдкреНрд░рдореБрдЦ рд╢рд░реАрд░ рдХреЗ рд╕реНрдерд▓реЛрдВ рдФрд░ рдЬреЛрдбрд╝реЛрдВ рдХреЛ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╡реНрдпрд╛рдпрд╛рдо рдлреЙрд░реНрдо рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореЙрдбрд▓ рдХреЗ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╡рдЬрди рдФрд░ рдордЬрдмреВрдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЙрдЪреНрдЪ рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВ, рдЬреЛ рдкреБрд╢рдЕрдк рдФрд░ рдкреБрд▓рдЕрдк рдЧрд┐рдирддреА рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ Ultralytics YOLOv8 рдХрд╕реНрдЯрдо рдХрд╕рд░рдд рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЗ рд▓рд┐рдП?
рд╣рд╛рдБ Ultralytics YOLOv8 рдХрд╕реНрдЯрдо рдХрд╕рд░рдд рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╣реА AIGym
рдХреНрд▓рд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рдореБрджреНрд░рд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдЬреИрд╕реЗ "рдкреБрд╢рдЕрдк", "рдкреБрд▓рдЕрдк" рдФрд░ "рдПрдмрд╡рд░реНрдХрдЖрдЙрдЯ" рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЖрдк рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрднреНрдпрд╛рд╕реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреАрдкреЙрдЗрдВрдЯ рдФрд░ рдХреЛрдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗрдЯрдЕрдк рд╣реИ:
from ultralytics import solutions
gym_object = solutions.AIGym(
line_thickness=2,
view_img=True,
pose_type="squat",
kpts_to_check=[6, 8, 10],
)
рддрд░реНрдХ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рддрд░реНрдХ AIGym
рдХрд░реНрддрдиред рдпрд╣ рд▓рдЪреАрд▓рд╛рдкрди рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЕрднреНрдпрд╛рд╕реЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдореИрдВ рдХрд╕рд░рдд рдирд┐рдЧрд░рд╛рдиреА рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реВрдВ Ultralytics YOLOv8?
рд╡рд░реНрдХрдЖрдЙрдЯ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╡реАрдбрд┐рдпреЛ рд░рд╛рдЗрдЯрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдлрд╝реНрд░реЗрдо рдХреЛ рд╕рд╣реЗрдЬрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
import cv2
from ultralytics import YOLO, solutions
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 = solutions.AIGym(
line_thickness=2,
view_img=True,
pose_type="pushup",
kpts_to_check=[6, 8, 10],
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
results = model.track(im0, verbose=False)
im0 = gym_object.start_counting(im0, results)
video_writer.write(im0)
cv2.destroyAllWindows()
video_writer.release()
рдпрд╣ рд╕реЗрдЯрдЕрдк рдореЙрдирд┐рдЯрд░ рдХрд┐рдП рдЧрдП рд╡реАрдбрд┐рдпреЛ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдЖрдЙрдЯрдкреБрдЯ рд╕рд╣реЗрдЬреЗрдВ рдЕрдиреБрднрд╛рдЧ рдХреЗ рд╕рд╛рде рд╡рд░реНрдХрдЖрдЙрдЯ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рджреЗрдЦреЗрдВред
рдмрдирд╛рдпрд╛ рдЧрдпрд╛ 2023-12-02, рдЕрджреНрдпрддрдиреНрдп: 2024-07-05
рд▓реЗрдЦрдХ: рдЧреНрд▓реЗрди-рдЬреЛрдЪрд░ (12), рдорд╣рддреНрд╡рд╛рдХрд╛рдВрдХреНрд╖реА-рдСрдХреНрдЯреЛрдкрд╕ (1), рдЗрд╡реЛрд░рдЭреВ331 (1), рд░рд┐рдЬрд╡рд╛рди рдореБрдирд╡реНрд╡рд░ (4)