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
Argumenta | Tipo | Predefinição | Descrição |
---|---|---|---|
source |
str |
'ultralytics/assets' |
Especifica a fonte de dados para inferência. Pode ser um caminho de imagem, ficheiro de vídeo, diretório, URL ou ID de dispositivo para feeds em direto. Suporta uma vasta gama de formatos e fontes, permitindo uma aplicação flexível em diferentes tipos de entrada. |
conf |
float |
0.25 |
Define o limite mínimo de confiança para as detecções. Os objectos detectados com confiança abaixo deste limite serão ignorados. Ajustar este valor pode ajudar a reduzir os falsos positivos. |
iou |
float |
0.7 |
Limiar de Intersecção sobre União (IoU) para Supressão Não Máxima (NMS). Valores mais baixos resultam em menos detecções, eliminando caixas sobrepostas, o que é útil para reduzir duplicados. |
imgsz |
int or tuple |
640 |
Define o tamanho da imagem para inferência. Pode ser um único número inteiro 640 para redimensionamento quadrado ou uma tupla (altura, largura). O dimensionamento correto pode melhorar a precisão da deteção e a velocidade de processamento. |
half |
bool |
False |
Permite a inferência de meia-precisão (FP16), que pode acelerar a inferência de modelos em GPUs compatíveis com um impacto mínimo na precisão. |
device |
str |
None |
Especifica o dispositivo para inferência (por exemplo, cpu , cuda:0 ou 0 ). Permite que os utilizadores seleccionem entre CPU, um GPU específico, ou outros dispositivos de computação para a execução do modelo. |
max_det |
int |
300 |
Número máximo de detecções permitidas por imagem. Limita o número total de objectos que o modelo pode detetar numa única inferência, evitando saídas excessivas em cenas densas. |
vid_stride |
int |
1 |
Avanço de fotogramas para entradas de vídeo. Permite saltar fotogramas em vídeos para acelerar o processamento à custa da resolução temporal. Um valor de 1 processa cada fotograma, valores mais altos saltam fotogramas. |
stream_buffer |
bool |
False |
Determina se todos os quadros devem ser armazenados em buffer ao processar fluxos de vídeo (True ), ou se o modelo deve retornar o quadro mais recente (False ). Útil para aplicações em tempo real. |
visualize |
bool |
False |
Ativa a visualização dos recursos do modelo durante a inferência, fornecendo informações sobre o que o modelo está "vendo". Útil para depuração e interpretação do modelo. |
augment |
bool |
False |
Permite o aumento do tempo de teste (TTA) para previsões, melhorando potencialmente a robustez da deteção à custa da velocidade de inferência. |
agnostic_nms |
bool |
False |
Permite a supressão não máxima (NMS) independente de classe, que mescla caixas sobrepostas de classes diferentes. Útil em cenários de deteção de várias classes em que a sobreposição de classes é comum. |
classes |
list[int] |
None |
Filtra as previsões para um conjunto de IDs de classe. Apenas as detecções pertencentes às classes especificadas serão retornadas. Útil para se concentrar em objetos relevantes em tarefas de deteção de várias classes. |
retina_masks |
bool |
False |
Usa máscaras de segmentação de alta resolução, se disponíveis no modelo. Isso pode melhorar a qualidade da máscara para tarefas de segmentação, fornecendo detalhes mais finos. |
embed |
list[int] |
None |
Especifica as camadas a partir das quais se extraem vectores de características ou incorporações. Útil para tarefas a jusante como o agrupamento ou a pesquisa de semelhanças. |
Argumentos model.track
Argumenta | Tipo | Predefinição | Descrição |
---|---|---|---|
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 ou 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. |
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.