コンテンツへスキップ

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.predict(im0, verbose=False)
    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.predict(im0, verbose=False)
    im0 = gym_object.start_counting(im0, results, frame_count)
    video_writer.write(im0)

cv2.destroyAllWindows()
video_writer.release()
サポート

「プッシュアップ」「プルアップ」「アブワークアウト」に対応

キーポイント・マップ

keyPoints OrderUltralytics YOLOv8  ポーズ

論争 set_args

名称 タイプ デフォルト 説明
kpts_to_check list None 特定のワークアウトをカウントするための3つのキーポイント・インデックスのリスト。
view_img bool False フレームにカウントを表示
line_thickness int 2 カウント値の厚みを増す
pose_type str pushup モニターが必要なポーズ、「懸垂」と「アブワークアウト」もサポート
pose_up_angle int 145 ポーズアップアングル値
pose_down_angle int 90 ポーズダウン角度値

論争 model.predict

名称 タイプ デフォルト 説明
source str 'ultralytics/assets' 画像またはビデオのソース・ディレクトリ
conf float 0.25 検出のためのオブジェクト信頼度閾値
iou float 0.7 NMSのIoU(Intersection Over Union)しきい値
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 つまり、class=0、またはclass=[0,2,3]。
retina_masks bool False 高解像度のセグメンテーション・マスクを使用する
embed list[int] None 与えられたレイヤーから特徴ベクトル/埋め込みを返す


作成日:2023-12-02 更新日:2024-01-15
著者:glenn-jocher(4),chr043416@gmail.com(2),RizwanMunawar(1)

コメント