¡Hola, hola, Omesitos! Ahora nos introduciremos en una nueva tarea llamada, Pose Estimation, la cual consiste en identificar puntos distribuidos en el cuerpo. Para llevarlo a cabo usaremos Ultralytics, ya que nos provee distintos modelos YOLOv11. Así que, ¡vamos a por ello!
¿Qué es la Pose Estimation o Estimación de pose?
Es una técnica de visión por computador que permite detectar la posición y orientación del cuerpo de una persona a través de puntos clave o landmarks. Estos puntos pueden representar diversas partes del cuerpo.

🔧 Instalación de Ultralytics
Para llevar a cabo esta práctica debemos instalar Ultralytics, a través de:
pip install ultralytics
Puedes verificar su instalación y versión con: pip freeze
Nota: A continuación te dejo la programación usada en el video. Si quieres ver el paso a paso explicado con más detalle, ¡no te pierdas el video completo!
🖼️Estimación de pose en imágenes con YOLOv11 de Ultralytics
from ultralytics import YOLO
# Cargamos el modelo YOLO
model = YOLO("yolo11x-pose.pt")
# Cargamos la imagen
image = "./Inputs/*.jpg"
# Realizamos la inferencia de YOLO
results = model(image, conf=0.7)
# Visualizar los resultados
for res in results:
res.show()
🖼️ Estimación de pose en imágenes leídas con OpenCV con YOLOv11 de Ultralytics
En este apartado veremos como acceder a los landmarks predichos.
from ultralytics import YOLO
import cv2
# Cargamos la imagen de entrada
image = cv2.imread("./image.jpg")
# Cargamos el modelo YOLO
model = YOLO("yolo11l-pose.pt")
# Realizamos la inferencia sobre la imagen
results = model(image, conf=0.7)
# Explorando los resultados
print(results[0])
print(results[0].keypoints)
# Acceder a un landmark
x, y, conf = results[0].keypoints.data[0][10]
#cv2.circle(image, (int(x), int(y)), 5, (0,255, 255), 2)
# Acceder a los landmarks de la persona detectada
for x, y, conf in results[0].keypoints.data[0]:
if conf > 0.5:
cv2.circle(image, (int(x), int(y)), 3, (0, 255, 0), -1)
cv2.imshow(f"image", image)
cv2.waitKey(0)
'''
# Acceder a los landmarks de cada persona detectada
for person in results[0].keypoints.data:
for i, (x, y, conf) in enumerate(person):
color = (255, 255, 255)
if conf > 0.5:
if i <= 4:
color = (0, 255, 0)
elif i == 5:
color = (0, 0, 0)
elif 6 <= i <= 11:
color = (255, 255, 0)
cv2.circle(image, (int(x), int(y)), 5, color, 2)
'''
cv2.imshow(f"image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
🎞️ Estimación de pose en videos con YOLOv11 de Ultralytics
from ultralytics import YOLO
import cv2
# Cargamos el modelo YOLO
model = YOLO("yolo11m-pose.pt")
# Cargamos el video de entrada
video_path = "./Inputs/video_001.mp4"
cap = cv2.VideoCapture(video_path)
while cap.isOpened():
# Leemos el frame del video
ret, frame = cap.read()
if not ret:
break
# Realizamos la inferencia de YOLO sobre el frame
results = model(frame)
# Extraemos los resultados
annotated_frame = results[0].plot()
# Visualizamos los resultados
cv2.imshow("YOLO Inference", annotated_frame)
# El ciclo se rompe al presionar "Esc"
if cv2.waitKey(1) & 0xFF == 27:
break
cap.release()
cv2.destroyAllWindows()
Y eso ha sido todo por este post, Omesitos.
Espero que les haya resultado útil y que se animen a probar la estimación de pose con los modelos de Ultralytics usando YOLOv11.
📌 No olviden revisar el video si desean ver todo el paso a paso en acción.
¡Nos vemos en el siguiente post!