Ultralytics YOLOv8 🚀を使ったワークアウトのモニタリング
ポーズ推定によるトレーニングのモニタリング 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.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()
サポート
「プッシュアップ」「プルアップ」「アブワークアウト」対応
キーポイント・マップ
論争 set_args
名称 | タイプ | デフォルト | 説明 |
---|---|---|---|
kpts_to_check |
list |
None |
特定のワークアウトをカウントするための3つのキーポイント・インデックスのリスト。 |
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 |
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 |
物体追跡結果を表示する |