ワークアウト モニタリング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],
)
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()
サポート
「プッシュアップ」「プルアップ」「アブワークアウト」対応
キーポイント・マップ
論争 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' |
推論のデータソースを指定します。画像パス、ビデオファイル、ディレクトリ、URL、またはライブフィードのデバイスIDを指定できます。幅広いフォーマットとソースをサポートしているため、さまざまな入力タイプに柔軟に対応できます。 |
conf |
float |
0.25 |
検出の最小信頼度しきい値を設定します。この閾値以下の信頼度で検出されたオブジェクトは無視されます。この値を調整することで、誤検出を減らすことができます。 |
iou |
float |
0.7 |
Non-Maximum Suppression (NMS)のIntersection Over Union (IoU)しきい値。値が低いほど、重複するボックスが排除されるため検出数が少なくなり、重複を減らすのに便利です。 |
imgsz |
int or tuple |
640 |
推論のための画像サイズを定義する。単一の整数値 640 を使用することで、正方形のサイズ変更、または(高さ、幅)のタプルを使用することができます。適切なサイジングは、検出精度と処理速度を向上させます。 |
half |
bool |
False |
半精度(FP16)推論が可能になり、サポートされているGPUでのモデル推論を、精度への影響を最小限に抑えながら高速化することができます。 |
device |
str |
None |
推論を行うデバイスを指定する(例. cpu , cuda:0 または 0 ).CPU 、特定のGPU 、またはモデル実行のための他のコンピュート・デバイスを選択することができます。 |
max_det |
int |
300 |
画像あたりの最大検出数。1回の推論でモデルが検出できるオブジェクトの総数を制限し、密集したシーンでの過剰な出力を防ぎます。 |
vid_stride |
int |
1 |
ビデオ入力のフレームストライド。時間的な解像度を犠牲にして処理を高速化するために、ビデオのフレームをスキップできるようにする。1の値はすべてのフレームを処理し、それ以上の値はフレームをスキップする。 |
stream_buffer |
bool |
False |
ビデオストリームを処理する際に、すべてのフレームをバッファリングするかどうかを決定する (True )、あるいはモデルが最新のフレーム(False ).リアルタイムアプリケーションに便利。 |
visualize |
bool |
False |
推論中にモデルの特徴を可視化し、モデルが何を「見て」いるのかを知ることができます。デバッグやモデルの解釈に役立ちます。 |
augment |
bool |
False |
予測に対するテスト時間拡張(TTA)を可能にし、推論速度を犠牲にすることで検出のロバスト性を向上させる可能性がある。 |
agnostic_nms |
bool |
False |
異なるクラスのオーバーラップしたボックスをマージする、クラスにとらわれない非最大抑制(NMS)を有効にします。クラスの重複が一般的なマルチクラス検出シナリオで有用。 |
classes |
list[int] |
None |
クラス ID のセットに予測をフィルタリングします。指定されたクラスに属する検出のみが返されます。複数クラスの検出タスクで、関連するオブジェクトに焦点を当てるのに便利です。 |
retina_masks |
bool |
False |
モデルに高解像度のセグメンテーションマスクがあれば、それを使用する。これにより、セグメンテーションタスクのマスク品質が向上し、より細かいディテールが得られます。 |
embed |
list[int] |
None |
特徴ベクトルまたは埋め込みを抽出するレイヤを指定します。クラスタリングや類似検索のような下流のタスクに便利です。 |
論争 model.track
議論 | タイプ | デフォルト | 説明 |
---|---|---|---|
source |
str |
None |
Specifies the source directory for images or videos. Supports file paths and URLs. |
persist |
bool |
False |
Enables persistent tracking of objects between frames, maintaining IDs across video sequences. |
tracker |
str |
botsort.yaml |
Specifies the tracking algorithm to use, e.g., bytetrack.yaml または botsort.yaml . |
conf |
float |
0.3 |
Sets the confidence threshold for detections; lower values allow more objects to be tracked but may include false positives. |
iou |
float |
0.5 |
Sets the Intersection over Union (IoU) threshold for filtering overlapping detections. |
classes |
list |
None |
Filters results by class index. For example, classes=[0, 2, 3] only tracks the specified classes. |
verbose |
bool |
True |
Controls the display of tracking results, providing a visual output of tracked objects. |
よくあるご質問
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()
このセットアップでは、モニタリングした映像を出力ファイルに書き込みます。詳細については、「出力保存を使用したワークアウト監視」のセクションを参照してください。