Monitorização de treinos utilizando Ultralytics YOLOv8 🚀
Monitoriza os treinos através da estimativa de pose com o Ultralytics YOLOv8 melhora a avaliação do exercício ao seguir com precisão os principais pontos de referência do corpo e as articulações em tempo real. Esta tecnologia fornece feedback instantâneo sobre a forma do exercício, acompanha as rotinas de treino e mede as métricas de desempenho, optimizando as sessões de treino tanto para os utilizadores como para os treinadores.
Observa: Monitorização de exercícios utilizando Ultralytics YOLOv8 | Flexões, Pullups, Ab Workouts
Vantagens da monitorização dos treinos?
- Desempenho optimizado: Adapta os treinos com base nos dados de monitorização para obteres melhores resultados.
- Alcança os objectivos: Acompanha e ajusta os objectivos de fitness para um progresso mensurável.
- Personalização: Planos de treino personalizados com base em dados individuais para uma maior eficácia.
- Sensibilização para a saúde: Deteção precoce de padrões que indicam problemas de saúde ou excesso de treino.
- Decisões informadas: Decisões baseadas em dados para ajustar as rotinas e estabelecer objectivos realistas.
Aplicações no mundo real
Monitorização dos treinos | Monitorização dos treinos |
---|---|
Flexões Contando | Contagem de PullUps |
Exemplo de monitorização de treinos
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()
Apoia
Suporta "pushup", "pullup" e "abworkout"
Mapa de pontos-chave
Argumentos set_args
Nome | Tipo | Predefinição | Descrição |
---|---|---|---|
kpts_to_check |
list |
None |
Lista de três índices de pontos-chave, para contar um treino específico, seguido do mapa de pontos-chave |
view_img |
bool |
False |
Mostra o quadro com as contagens |
line_thickness |
int |
2 |
Aumenta a espessura do valor de contagem |
pose_type |
str |
pushup |
Pose que precisa de ser monitorizada, pullup e abworkout também apoiou |
pose_up_angle |
int |
145 |
Valor do ângulo de pose para cima |
pose_down_angle |
int |
90 |
Valor do ângulo de descida da pose |
Argumentos model.predict
Nome | Tipo | Predefinição | Descrição |
---|---|---|---|
source |
str |
'ultralytics/assets' |
diretório de origem para imagens ou vídeos |
conf |
float |
0.25 |
limiar de confiança do objeto para deteção |
iou |
float |
0.7 |
limiar de intersecção sobre a união (IoU) para os NMS |
imgsz |
int or tuple |
640 |
tamanho da imagem como escalar ou lista (h, w), ou seja, (640, 480) |
half |
bool |
False |
utiliza meia precisão (FP16) |
device |
None or str |
None |
dispositivo para execução, ou seja, dispositivo cuda=0/1/2/3 ou dispositivo=cpu |
max_det |
int |
300 |
número máximo de detecções por imagem |
vid_stride |
bool |
False |
taxa de fotogramas do vídeo |
stream_buffer |
bool |
False |
guarda todos os fotogramas de transmissão (True) ou devolve o fotograma mais recente (False) |
visualize |
bool |
False |
visualiza as características do modelo |
augment |
bool |
False |
aplica o aumento de imagem a fontes de previsão |
agnostic_nms |
bool |
False |
NMS com diagnóstico de classe |
classes |
list[int] |
None |
filtra os resultados por classe, ou seja, classes=0, ou classes=[0,2,3] |
retina_masks |
bool |
False |
utiliza máscaras de segmentação de alta resolução |
embed |
list[int] |
None |
devolve vectores de características/embeddings de determinadas camadas |
Argumentos model.track
Nome | Tipo | Predefinição | Descrição |
---|---|---|---|
source |
im0 |
None |
diretório de origem para imagens ou vídeos |
persist |
bool |
False |
persistência de faixas entre fotogramas |
tracker |
str |
botsort.yaml |
Método de rastreio 'bytetrack' ou 'botsort' |
conf |
float |
0.3 |
Limiar de confiança |
iou |
float |
0.5 |
Limiar IOU |
classes |
list |
None |
filtra os resultados por classe, ou seja, classes=0, ou classes=[0,2,3] |
verbose |
bool |
True |
Apresenta os resultados do rastreio de objectos |