ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ultralytics YOLOv8
ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΡΠ΅Π½ΠΊΠΈ ΠΏΠΎΠ·Ρ Ρ Ultralytics YOLOv8 ΡΠ»ΡΡΡΠ°Π΅Ρ ΠΎΡΠ΅Π½ΠΊΡ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΉ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠΎΡΠ½ΠΎΠΌΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ² ΡΠ΅Π»Π° ΠΈ ΡΡΡΡΠ°Π²ΠΎΠ² Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠ²ΡΠ·Ρ ΠΎ ΡΠΎΡΠΌΠ΅ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΉ, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ ΡΠ΅ΠΆΠΈΠΌ ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΠΈΠ·ΠΌΠ΅ΡΡΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡ ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΊΠΈ ΠΊΠ°ΠΊ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΡΡΠ΅Π½Π΅ΡΠΎΠ².
Π‘ΠΌΠΎΡΡΠΈ: ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΎΠΊ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ultralytics YOLOv8 | Pushups, Pullups, Ab Workouts.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΎΠΊ?
- ΠΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ: ΠΠΎΠ΄Π±ΠΈΡΠ°ΠΉ ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΊΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ Π»ΡΡΡΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ².
- ΠΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅Π»Π΅ΠΉ: ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΠΉ ΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΡΠΉ ΡΠΈΡΠ½Π΅Ρ-ΡΠ΅Π»ΠΈ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠ°.
- ΠΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΡ: ΠΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ»Π°Π½Ρ ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΎΠΊ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ.
- ΠΠ½ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ ΠΎ Π·Π΄ΠΎΡΠΎΠ²ΡΠ΅: Π Π°Π½Π½Π΅Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ², ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΡ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΎ Π·Π΄ΠΎΡΠΎΠ²ΡΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠ΅Π½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ.
- ΠΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ: ΠΡΠΈΠ½ΡΡΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ Π½Π° Π΄Π°Π½Π½ΡΡ , Π΄Π»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΡΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΈ ΠΏΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΡΡ ΡΠ΅Π»Π΅ΠΉ.
ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΌΠΈΡΠ΅
ΠΠΎΠ½ΡΡΠΎΠ»Ρ Π·Π° ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ | ΠΠΎΠ½ΡΡΠΎΠ»Ρ Π·Π° ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ |
---|---|
ΠΠΎΠ΄ΡΡΠ΅Ρ ΠΎΡΠΆΠΈΠΌΠ°Π½ΠΈΠΉ | ΠΠΎΠ΄ΡΡΠ΅Ρ ΠΏΠΎΠ΄ΡΡΠ³ΠΈΠ²Π°Π½ΠΈΠΉ |
ΠΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΎΠΊ
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()
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈ
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ "ΠΎΡΠΆΠΈΠΌΠ°Π½ΠΈΡ", "ΠΏΠΎΠ΄ΡΡΠ³ΠΈΠ²Π°Π½ΠΈΡ" ΠΈ "abworkout".
ΠΠ°ΡΡΠ° KeyPoints
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ 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 |
ΠΠΎΡΠΎΠ³ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π°Π΄ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΠΌ (IoU) Π΄Π»Ρ NMS |
imgsz |
int or tuple |
640 |
Π Π°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΊΠ°Π»ΡΡΠ° ΠΈΠ»ΠΈ ΡΠΏΠΈΡΠΊΠ° (h, w), ΡΠΎ Π΅ΡΡΡ (640, 480) |
half |
bool |
False |
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π½ΡΡ ΡΠΎΡΠ½ΠΎΡΡΡ (FP16) |
device |
None or str |
None |
Π£ΡΡΡΠΎΠΉΡΡΠ²ΠΎ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, cuda device=0/1/2/3 ΠΈΠ»ΠΈ device=cpu |
max_det |
int |
300 |
ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΎΠ΄Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ |
vid_stride |
bool |
False |
ΡΠ°ΡΡΠΎΡΠ° ΠΊΠ°Π΄ΡΠΎΠ² Π²ΠΈΠ΄Π΅ΠΎ |
stream_buffer |
bool |
False |
ΠΡΡΠ΅ΡΠΈΠ·ΠΈΡΡΠΉ Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΊΠ°Π΄ΡΡ (True) ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΠΉ ΡΠ°ΠΌΡΠΉ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΊΠ°Π΄Ρ (False). |
visualize |
bool |
False |
Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΡΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ |
augment |
bool |
False |
ΠΡΠΈΠΌΠ΅Π½ΡΠΉ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈΠΉ |
agnostic_nms |
bool |
False |
ΠΊΠ»Π°ΡΡΠΎΠ²ΠΎ-Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ NMS |
classes |
list[int] |
None |
Π€ΠΈΠ»ΡΡΡΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎ ΠΊΠ»Π°ΡΡΠ°ΠΌ, ΡΠΎ Π΅ΡΡΡ classes=0, ΠΈΠ»ΠΈ classes=[0,2,3] |
retina_masks |
bool |
False |
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉ ΠΌΠ°ΡΠΊΠΈ Π΄Π»Ρ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Ρ Π²ΡΡΠΎΠΊΠΈΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ |
embed |
list[int] |
None |
ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΠΉ Π²Π΅ΠΊΡΠΎΡΡ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ²/Π²ΠΊΡΠ°ΠΏΠ»Π΅Π½ΠΈΡ ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΡΡ ΡΠ»ΠΎΠ΅Π² |
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ model.track
ΠΠΌΡ | Π’ΠΈΠΏ | ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|---|---|
source |
im0 |
None |
ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π΄Π»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π²ΠΈΠ΄Π΅ΠΎ |
persist |
bool |
False |
Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ°Π΄ΡΠ°ΠΌΠΈ |
tracker |
str |
botsort.yaml |
ΠΠ΅ΡΠΎΠ΄ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ 'bytetrack' ΠΈΠ»ΠΈ 'botsort' |
conf |
float |
0.3 |
ΠΠΎΡΠΎΠ³ Π΄ΠΎΠ²Π΅ΡΠΈΡ |
iou |
float |
0.5 |
ΠΠΎΡΠΎΠ³ IOU |
classes |
list |
None |
Π€ΠΈΠ»ΡΡΡΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎ ΠΊΠ»Π°ΡΡΠ°ΠΌ, ΡΠΎ Π΅ΡΡΡ classes=0, ΠΈΠ»ΠΈ classes=[0,2,3] |
verbose |
bool |
True |
ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² |
ΠΠΠΠ ΠΠ‘Π« Π ΠΠ’ΠΠΠ’Π«
ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΡΠ²ΠΎΠΈΠΌΠΈ ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ 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)
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
ΠΠ²ΡΠΎΡΡ: glenn-jocher (12), ambitious-octopus (1), IvorZhu331 (1), RizwanMunawar (4)