Update workouts_monitoring solution (#16706)
Co-authored-by: UltralyticsAssistant <web@ultralytics.com> Co-authored-by: Glenn Jocher <glenn.jocher@ultralytics.com>
This commit is contained in:
parent
c17ddcdf70
commit
73e6861d95
7 changed files with 162 additions and 245 deletions
|
|
@ -286,7 +286,7 @@ def count_objects_in_region(video_path, output_video_path, model_path):
|
|||
if not success:
|
||||
print("Video frame is empty or video processing has been successfully completed.")
|
||||
break
|
||||
im0 = counter.start_counting(im0)
|
||||
im0 = counter.count(im0)
|
||||
video_writer.write(im0)
|
||||
|
||||
cap.release()
|
||||
|
|
@ -334,7 +334,7 @@ def count_specific_classes(video_path, output_video_path, model_path, classes_to
|
|||
if not success:
|
||||
print("Video frame is empty or video processing has been successfully completed.")
|
||||
break
|
||||
im0 = counter.start_counting(im0)
|
||||
im0 = counter.count(im0)
|
||||
video_writer.write(im0)
|
||||
|
||||
cap.release()
|
||||
|
|
|
|||
|
|
@ -41,18 +41,16 @@ Monitoring workouts through pose estimation with [Ultralytics YOLO11](https://gi
|
|||
```python
|
||||
import cv2
|
||||
|
||||
from ultralytics import YOLO, solutions
|
||||
from ultralytics import solutions
|
||||
|
||||
model = YOLO("yolo11n-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],
|
||||
gym = solutions.AIGym(
|
||||
model="yolo11n-pose.pt",
|
||||
show=True,
|
||||
kpts=[6, 8, 10],
|
||||
)
|
||||
|
||||
while cap.isOpened():
|
||||
|
|
@ -60,9 +58,7 @@ Monitoring workouts through pose estimation with [Ultralytics YOLO11](https://gi
|
|||
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)
|
||||
im0 = gym.monitor(im0)
|
||||
|
||||
cv2.destroyAllWindows()
|
||||
```
|
||||
|
|
@ -72,20 +68,17 @@ Monitoring workouts through pose estimation with [Ultralytics YOLO11](https://gi
|
|||
```python
|
||||
import cv2
|
||||
|
||||
from ultralytics import YOLO, solutions
|
||||
from ultralytics import solutions
|
||||
|
||||
model = YOLO("yolo11n-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],
|
||||
gym = solutions.AIGym(
|
||||
show=True,
|
||||
kpts=[6, 8, 10],
|
||||
)
|
||||
|
||||
while cap.isOpened():
|
||||
|
|
@ -93,33 +86,26 @@ Monitoring workouts through pose estimation with [Ultralytics YOLO11](https://gi
|
|||
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)
|
||||
im0 = gym.monitor(im0)
|
||||
video_writer.write(im0)
|
||||
|
||||
cv2.destroyAllWindows()
|
||||
video_writer.release()
|
||||
```
|
||||
|
||||
???+ tip "Support"
|
||||
|
||||
"pushup", "pullup" and "abworkout" supported
|
||||
|
||||
### KeyPoints Map
|
||||
|
||||

|
||||
|
||||
### Arguments `AIGym`
|
||||
|
||||
| Name | Type | Default | Description |
|
||||
| ----------------- | ------- | -------- | -------------------------------------------------------------------------------------- |
|
||||
| `kpts_to_check` | `list` | `None` | List of three keypoints index, for counting specific workout, followed by keypoint Map |
|
||||
| `line_thickness` | `int` | `2` | Thickness of the lines drawn. |
|
||||
| `view_img` | `bool` | `False` | Flag to display the image. |
|
||||
| `pose_up_angle` | `float` | `145.0` | Angle threshold for the 'up' pose. |
|
||||
| `pose_down_angle` | `float` | `90.0` | Angle threshold for the 'down' pose. |
|
||||
| `pose_type` | `str` | `pullup` | Type of pose to detect (`'pullup`', `pushup`, `abworkout`, `squat`). |
|
||||
| Name | Type | Default | Description |
|
||||
| ------------ | ------- | ------- | -------------------------------------------------------------------------------------- |
|
||||
| `kpts` | `list` | `None` | List of three keypoints index, for counting specific workout, followed by keypoint Map |
|
||||
| `line_width` | `int` | `2` | Thickness of the lines drawn. |
|
||||
| `show` | `bool` | `False` | Flag to display the image. |
|
||||
| `up_angle` | `float` | `145.0` | Angle threshold for the 'up' pose. |
|
||||
| `down_angle` | `float` | `90.0` | Angle threshold for the 'down' pose. |
|
||||
|
||||
### Arguments `model.predict`
|
||||
|
||||
|
|
@ -138,18 +124,16 @@ To monitor your workouts using Ultralytics YOLO11, you can utilize the pose esti
|
|||
```python
|
||||
import cv2
|
||||
|
||||
from ultralytics import YOLO, solutions
|
||||
from ultralytics import solutions
|
||||
|
||||
model = YOLO("yolo11n-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],
|
||||
gym = solutions.AIGym(
|
||||
line_width=2,
|
||||
show=True,
|
||||
kpts=[6, 8, 10],
|
||||
)
|
||||
|
||||
while cap.isOpened():
|
||||
|
|
@ -157,8 +141,7 @@ while cap.isOpened():
|
|||
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)
|
||||
im0 = gym.monitor(im0)
|
||||
|
||||
cv2.destroyAllWindows()
|
||||
```
|
||||
|
|
@ -188,11 +171,10 @@ Yes, Ultralytics YOLO11 can be adapted for custom workout routines. The `AIGym`
|
|||
```python
|
||||
from ultralytics import solutions
|
||||
|
||||
gym_object = solutions.AIGym(
|
||||
line_thickness=2,
|
||||
view_img=True,
|
||||
pose_type="squat",
|
||||
kpts_to_check=[6, 8, 10],
|
||||
gym = solutions.AIGym(
|
||||
line_width=2,
|
||||
show=True,
|
||||
kpts=[6, 8, 10],
|
||||
)
|
||||
```
|
||||
|
||||
|
|
@ -205,20 +187,18 @@ To save the workout monitoring output, you can modify the code to include a vide
|
|||
```python
|
||||
import cv2
|
||||
|
||||
from ultralytics import YOLO, solutions
|
||||
from ultralytics import solutions
|
||||
|
||||
model = YOLO("yolo11n-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],
|
||||
gym = solutions.AIGym(
|
||||
line_width=2,
|
||||
show=True,
|
||||
kpts=[6, 8, 10],
|
||||
)
|
||||
|
||||
while cap.isOpened():
|
||||
|
|
@ -226,8 +206,7 @@ while cap.isOpened():
|
|||
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)
|
||||
im0 = gym.monitor(im0)
|
||||
video_writer.write(im0)
|
||||
|
||||
cv2.destroyAllWindows()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue