ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ содСрТимому

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ultralytics YOLOv8 πŸš€.

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΏΠΎΠ·Ρ‹ с Ultralytics YOLOv8 ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ ΠΎΡ†Π΅Π½ΠΊΡƒ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΉ благодаря Ρ‚ΠΎΡ‡Π½ΠΎΠΌΡƒ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡŽ основных ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ² Ρ‚Π΅Π»Π° ΠΈ суставов Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚Π° тСхнология обСспСчиваСт ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ связь ΠΎ Ρ„ΠΎΡ€ΠΌΠ΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΉ, отслСТиваСт Ρ€Π΅ΠΆΠΈΠΌ Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ измСряСт ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ эффСктивности, оптимизируя Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΠ°ΠΊ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‚Π°ΠΊ ΠΈ для Ρ‚Ρ€Π΅Π½Π΅Ρ€ΠΎΠ².



Π‘ΠΌΠΎΡ‚Ρ€ΠΈ: ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΠΊ с использованиСм Ultralytics YOLOv8 | Pushups, Pullups, Ab Workouts.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΠΊ?

  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: ΠŸΠΎΠ΄Π±ΠΈΡ€Π°ΠΉ Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° основС Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° для достиТСния Π»ΡƒΡ‡ΡˆΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ².
  • ДостиТСниС Ρ†Π΅Π»Π΅ΠΉ: ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΠΉ ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΠΉ фитнСс-Ρ†Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌΠΎΠ³ΠΎ прогрСсса.
  • ΠŸΠ΅Ρ€ΡΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ: Π˜Π½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ»Π°Π½Ρ‹ Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΠΊ, основанныС Π½Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… для эффСктивности.
  • Π˜Π½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΎ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅: Π Π°Π½Π½Π΅Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ², ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ со Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ.
  • ΠžΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: ΠŸΡ€ΠΈΠ½ΡΡ‚ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, основанных Π½Π° Π΄Π°Π½Π½Ρ‹Ρ…, для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ распорядка ΠΈ постановки рСалистичных Ρ†Π΅Π»Π΅ΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π·Π° Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π·Π° Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ
ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ ΠΎΡ‚ΠΆΠΈΠΌΠ°Π½ΠΈΠΉ ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ подтягиваний
ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ ΠΎΡ‚ΠΆΠΈΠΌΠ°Π½ΠΈΠΉ ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ подтягиваний

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΎΠΊ

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()
ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈ

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ "отТимания", "подтягивания" ΠΈ "abworkout".

ΠšΠ°Ρ€Ρ‚Π° KeyPoints

KeyPoints Order Ultralytics YOLOv8  Pose

АргумСнты 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 ΠŸΠΎΡ€ΠΎΠ³ пСрСсСчСния Π½Π°Π΄ объСдинСниСм (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 ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² отслСТивания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²


Боздано 2023-12-02, ОбновлСно 2024-04-18
Авторы: glenn-jocher (6), RizwanMunawar (1)

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ