コンテンツへスキップ

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],
)

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()
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],
)

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()
サポート

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

キーポイント・マップ

keyPoints OrderUltralytics YOLOv8  ポーズ

論争 AIGym

名称 タイプ デフォルト 説明
kpts_to_check list None 特定のワークアウトをカウントするための3つのキーポイント・インデックスのリスト。
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 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 与えられたレイヤーから特徴ベクトル/埋め込みを返す

論争 model.track

名称 タイプ デフォルト 説明
source im0 None 画像またはビデオのソース・ディレクトリ
persist bool False フレーム間のトラックの持続
tracker str botsort.yaml トラッキングメソッド「bytetrack」または「botsort
conf float 0.3 信頼閾値
iou float 0.5 借用書のしきい値
classes list None つまり、class=0、またはclass=[0,2,3]。
verbose bool True 物体追跡結果を表示する


Created 2023-12-02, Updated 2024-06-10
Authors: glenn-jocher (10), IvorZhu331 (1), RizwanMunawar (4)

コメント