Monitorização dos 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
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()
Apoia
Suporta "pushup", "pullup" e "abworkout"
Mapa de pontos-chave
Argumentos AIGym
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 |
line_thickness |
int |
2 |
Espessura das linhas desenhadas. |
view_img |
bool |
False |
Marca para apresentar a imagem. |
pose_up_angle |
float |
145.0 |
Limite de ângulo para a pose "para cima". |
pose_down_angle |
float |
90.0 |
Limite de ângulo para a pose "para baixo". |
pose_type |
str |
pullup |
Tipo de pose a detetar ('pullup ', pushup , abworkout , squat ). |
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 a ser executado, ou seja, cuda device=0/1/2/3 ou device=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 |
FAQ
Como é que monitorizo os meus treinos utilizando Ultralytics YOLOv8 ?
Para monitorizar os teus treinos utilizando Ultralytics YOLOv8 , podes utilizar as capacidades de estimativa de pose para seguir e analisar os principais pontos de referência do corpo e as articulações em tempo real. Isto permite-te receber feedback instantâneo sobre a tua forma de exercício, contar repetições e medir métricas de desempenho. Podes começar por utilizar o código de exemplo fornecido para flexões, pullups ou exercícios abdominais, conforme ilustrado:
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()
Para mais personalizações e definições, podes consultar a secção AIGym na documentação.
Quais são as vantagens de utilizar Ultralytics YOLOv8 para monitorizar o treino?
A utilização de Ultralytics YOLOv8 para monitorizar o treino proporciona várias vantagens importantes:
- Desempenho optimizado: Ao adaptar os treinos com base nos dados de monitorização, podes obter melhores resultados.
- Alcança os teus objectivos: Acompanha e ajusta facilmente os objectivos de fitness para um progresso mensurável.
- Personalização: Obtém planos de treino personalizados com base nos teus dados individuais para uma eficácia óptima.
- Sensibilização para a saúde: Deteção precoce de padrões que indicam potenciais problemas de saúde ou excesso de treino.
- Toma decisões informadas: Toma decisões baseadas em dados para ajustar as rotinas e definir objectivos realistas.
Podes ver um vídeo de demonstração no YouTube para veres estas vantagens em ação.
Qual é a precisão do Ultralytics YOLOv8 na deteção e acompanhamento de exercícios?
Ultralytics YOLOv8 é altamente preciso na deteção e seguimento de exercícios devido às suas capacidades de estimação de pose de última geração. Consegue seguir com precisão os principais pontos de referência e articulações do corpo, fornecendo feedback em tempo real sobre a forma do exercício e as métricas de desempenho. Os pesos pré-treinados e a arquitetura robusta do modelo garantem uma elevada precisão e fiabilidade. Para exemplos do mundo real, consulta a secção de aplicações do mundo real na documentação, que apresenta a contagem de flexões e pullups.
Posso utilizar Ultralytics YOLOv8 para rotinas de treino personalizadas?
Sim, Ultralytics YOLOv8 pode ser adaptado para rotinas de treino personalizadas. O AIGym
A classe suporta diferentes tipos de pose, como "pushup", "pullup" e "abworkout". Podes especificar pontos-chave e ângulos para detetar exercícios específicos. Aqui tens um exemplo de configuração:
from ultralytics import solutions
gym_object = solutions.AIGym(
line_thickness=2,
view_img=True,
pose_type="squat",
kpts_to_check=[6, 8, 10],
)
Para mais pormenores sobre a definição de argumentos, consulta a secção Argumentos AIGym
secção. Esta flexibilidade permite-te monitorizar vários exercícios e personalizar as rotinas com base nas tuas necessidades.
Como é que posso guardar a saída de monitorização do treino utilizando Ultralytics YOLOv8 ?
Para guardar o resultado da monitorização do exercício, podes modificar o código para incluir um gravador de vídeo que guarde os fotogramas processados. Vê um exemplo:
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()
Esta configuração grava o vídeo monitorado em um arquivo de saída. Para obter mais detalhes, consulta a secção Monitorização de Workouts com Gravação de Saída.
Criado em 2023-12-02, Atualizado em 2024-07-05
Autores: glenn-jocher (12), ambitious-octopus (1), IvorZhu331 (1), RizwanMunawar (4)