Skip to main content

포즈 추정 — 인체 키포인트 탐지

포즈 추정(Pose Estimation)은 이미지나 영상에서 인체의 관절 위치(키포인트)를 탐지하는 태스크입니다. 동작 분석, 스포츠 코칭, 재활 모니터링, 모션 캡처 등에 활용됩니다.

핵심 아이디어

인체의 주요 관절(어깨, 팔꿈치, 손목, 엉덩이, 무릎, 발목 등)을 키포인트(Keypoint)로 정의하고, 각 키포인트의 2D 좌표를 예측합니다. COCO 데이터셋 기준 17개 키포인트를 사용합니다.

동작 방식

접근 방식설명속도정확도
Top-down사람 탐지 후 개별 포즈 추정느림 (사람 수 비례)높음
Bottom-up모든 키포인트 탐지 후 그룹화빠름 (사람 수 무관)보통

구현

YOLO-Pose (Ultralytics)

from ultralytics import YOLO

# 포즈 추정 모델 로드
model = YOLO('yolo11m-pose.pt')

# 추론
results = model('image.jpg')

for result in results:
    keypoints = result.keypoints  # 키포인트 결과
    if keypoints is not None:
        xy = keypoints.xy           # [N, 17, 2] 키포인트 좌표
        conf = keypoints.conf       # [N, 17] 키포인트 신뢰도

        for person_idx in range(xy.shape[0]):
            print(f"\n사람 {person_idx + 1}:")
            kp_names = ['코', '왼눈', '오른눈', '왼귀', '오른귀',
                       '왼어깨', '오른어깨', '왼팔꿈치', '오른팔꿈치',
                       '왼손목', '오른손목', '왼엉덩이', '오른엉덩이',
                       '왼무릎', '오른무릎', '왼발목', '오른발목']
            for i, name in enumerate(kp_names):
                x, y = xy[person_idx, i].tolist()
                c = conf[person_idx, i].item()
                if c > 0.5:
                    print(f"  {name}: ({x:.0f}, {y:.0f}) conf={c:.2f}")

MediaPipe (Google)

import mediapipe as mp
import cv2

mp_pose = mp.solutions.pose
mp_drawing = mp.solutions.drawing_utils

# 포즈 추정
with mp_pose.Pose(min_detection_confidence=0.5) as pose:
    image = cv2.imread('image.jpg')
    rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    results = pose.process(rgb)

    if results.pose_landmarks:
        # 시각화
        mp_drawing.draw_landmarks(
            image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS
        )
        cv2.imwrite('pose_result.jpg', image)

        # 랜드마크 접근
        for idx, lm in enumerate(results.pose_landmarks.landmark):
            print(f"관절 {idx}: x={lm.x:.3f}, y={lm.y:.3f}, visibility={lm.visibility:.2f}")

관련 기술 비교

비교 항목YOLO-PoseMediaPipeOpenPose
속도빠름매우 빠름느림
정확도높음보통높음
다중 인물지원단일 인물 중심지원
GPU 필요권장불필요 (CPU OK)필수
추천 용도서버/연구모바일/엣지연구
MediaPipe의 Pose 모듈은 33개의 3D 랜드마크를 제공합니다. 보다 정밀한 3D 포즈가 필요하면 MotionBERT나 WHAM 같은 전문 3D 포즈 모델을 검토하세요.

참고 논문

논문학회/연도링크
OpenPoseIEEE T-PAMI 2019arXiv:1812.08008
ViTPoseNeurIPS 2022arXiv:2204.12484