자세 분석: 사진과 영상에서 자세와 관절 각도 재기

자세 분석: 사진과 영상에서 자세와 관절 각도 재기

몸을 어떻게 두는지는 과제에 대해 많은 것을 알려 줍니다. 자세를 보면 작업대가 몸에 맞는지, 세션 동안 얼마나 움직이는지, 참가자가 몸을 기울이는지 돌아서는지 알 수 있습니다. 이런 것을 재려면 보통 모션 캡처 슈트나 몇 시간의 수작업 주석이 필요했습니다. 많은 질문에서는 카메라 한 대와 자세 추정 모델이면 충분합니다. 단, 2차원 추정이 무엇을 말해 줄 수 있고 무엇은 못 하는지 알고 써야 합니다.

뉴트로픽은 pose_estimate 도구로 사진과 영상에서 신체 자세를, face_expression 도구로 머리 방향을 추정합니다. 이 글은 두 도구가 무엇을 계산하는지, 무엇을 돌려받는지, 한계는 어디인지를 다룹니다. 스크린숏은 전신 사진과 인물 사진을 측정한 새 채팅 하나에서 가져왔습니다.

무엇을 올릴 수 있나

  • 사진. PNG, JPG, WebP, BMP.
  • 영상. MP4, MOV, WebM, AVI, MKV, M4V. 앱 안의 미리 보기는 브라우저 플레이어를 쓰므로 영상을 보려면 H.264 MP4가 가장 무난합니다. 분석은 어느 형식이든 서버에서 디코딩합니다.
text
/analyze pose_yoga.jpg 의 신체 자세를 추정해 줘. 관절 각도, 자세, 랜드마크 오버레이를 구하고 수치를 짧게 정리해 줘.

측정 방식

도구는 MediaPipe PoseLandmarker(lite 모델)를 실행해 코와 귀부터 어깨, 팔꿈치, 손목, 엉덩이, 무릎, 발목, 발까지 신체 랜드마크 33개를 찾습니다. 랜드마크마다 가시성 점수가 있고, 0.3 미만인 랜드마크는 짐작하지 않고 버립니다. 나머지로 다음을 계산합니다.

  • 관절 각도 8개(도): 좌우 팔꿈치·무릎·엉덩이, 그리고 좌우 어깨 외전(위팔과 몸통 사이 각도).
  • 자세. 무릎과 엉덩이가 모두 거의 펴져 있으면(150° 이상) standing, 둘 다 뚜렷이 굽어 있으면 sitting/squatting, 그 사이면 bent/transitional, 다리가 보이지 않으면 unknown입니다.
  • 팔 위치. 어깨 외전으로 raised, extended sideways, down at sides를 판정합니다.
  • 몸통 기울기. 엉덩이 중점에서 어깨 중점으로 이은 선의 기울기(도)입니다.
  • 정면 여부. 몸통 길이에 대한 어깨 폭의 비로 frontal, oblique, sideways/turned를 판정합니다.

영상은 기본적으로 초당 5프레임을 추출합니다. 프레임별 값에 더해 자세·팔 위치별 시간 비율, 평균 관절 각도, 프레임 간 평균 랜드마크 이동량을 받습니다. 이동량은 사람이 얼마나 움직이는지를 보는 거친 지표입니다.

머리 방향은 얼굴 도구에서 나옵니다. face_expression은 얼굴이 있는 프레임마다 yaw, pitch, roll(도)을 돌려줍니다. 이 채팅의 인물 사진에서는 −5.7°, −8.5°, −1.5°로, 카메라에서 살짝만 돌아간 얼굴이었습니다. 표정 분석을 참고하세요.

돌려받는 것

  • 오버레이 이미지(*_pose_overlay.png): 사람이 검출된 첫 프레임에 랜드마크와 골격을 그린 그림입니다. 모델이 제대로 된 몸을 잡았는지 한눈에 확인할 수 있습니다.
  • 표(*_pose.csv): 이미지나 추출 프레임마다 한 행씩, 자세·팔·몸통 기울기·정면 여부와 관절 각도 8개가 들어 있습니다.
  • 요약 수치: 채팅과 보고서에 나오며, 값마다 도구 호출까지 추적할 수 있습니다.
포즈 오버레이를 연 새 채팅. 전신 사진 위에 랜드마크 33개와 골격이 그려져 있습니다.
포즈 오버레이를 연 새 채팅. 전신 사진 위에 랜드마크 33개와 골격이 그려져 있습니다.
채팅 요약은 도구의 숫자를 그대로 인용합니다. 서 있음, 팔 양옆으로 내림, 정면, 몸통 기울기 0.2°, 팔꿈치 176.4°/177.4°, 무릎 177.8°/178.1°, 엉덩이 168.7°/171.2°.
채팅 요약은 도구의 숫자를 그대로 인용합니다. 서 있음, 팔 양옆으로 내림, 정면, 몸통 기울기 0.2°, 팔꿈치 176.4°/177.4°, 무릎 177.8°/178.1°, 엉덩이 168.7°/171.2°.
한 행짜리 자세 표. 자세, 팔, 몸통 기울기, 정면 여부, 관절 각도가 열로 들어 있습니다.
한 행짜리 자세 표. 자세, 팔, 몸통 기울기, 정면 여부, 관절 각도가 열로 들어 있습니다.

보고서는 같은 값을 정리하고, 문장마다 pose_estimate 단계를 가리키는 [n] 인용을 붙입니다.

보고서의 자세 결과. 자세 분류, 팔 위치, 정면 여부, 몸통 기울기, 관절 각도 8개가 나옵니다.
보고서의 자세 결과. 자세 분류, 팔 위치, 정면 여부, 몸통 기울기, 관절 각도 8개가 나옵니다.

어떻게 확인했나

내부 점검에서 위의 전신 사진은 서 있음, 팔 내림, 정면으로 나왔고, 사진과 일치합니다. 이전 버전은 정면 여부를 어깨 폭의 절대값으로 판단했는데, 전신이 한 화면에 들어오면 이 값이 늘 작아서 전신 사진이 돌아선 것처럼 판정됐습니다. 지금은 몸통 길이에 대한 어깨 폭의 비로 판단합니다.

정직하게 실패하는 것도 그만큼 중요합니다. 얼굴만 나오는 영상에서 도구는 몸을 지어내지 않고 "no person detected"를 보고했습니다. 카메라 구도가 잘못됐을 때 바라는 동작이 바로 이것입니다.

연구에서의 쓰임

  • 인간공학·작업대 연구. 앉아 있는 시간과 서 있는 시간, 몸통 기울기, 손을 뻗을 때의 어깨 외전을 책상 구성별로 비교합니다.
  • 움직임과 활동량. 평균 랜드마크 이동량을 과제 단계별 활동의 거친 지표로 씁니다. 예를 들어 지루한 블록과 몰입하는 블록의 꼼지락거림을 비교합니다.
  • 사회적·비언어 행동. 상대나 화면을 향한 몸의 방향과 머리 방향.
  • 재활·스포츠 예비 연구. 통제된 카메라 배치에서 무릎이나 팔꿈치 각도를 봅니다. 연구실급 장비를 쓰기 전의 첫 탐색으로 적합합니다.

참가자별 요약은 다른 표와 마찬가지로 통계 도구에 넣습니다.

text
/stats posture_by_setup.csv 에는 참가자와 책상 구성(standard, sit-stand)마다 앉아 있던 시간 비율과 평균 몸통 기울기가 한 행씩 있어. 구성 간 차이를 비교하고, 가정을 점검한 뒤 효과크기를 보고해 줘.

한계를 분명히

  • 2차원 각도. 각도는 3차원이 아니라 카메라 영상 평면에서 잽니다. 카메라 쪽을 향한 팔다리는 짧아 보이고 각도가 왜곡됩니다. 관심 있는 평면에 카메라를 수직으로 두세요(무릎 굽힘은 옆에서, 어깨 외전은 정면에서).
  • 한 사람. 모델은 한 사람만 추적합니다. 여러 사람이 나오는 장면은 먼저 잘라 주세요.
  • 거친 자세 라벨. standing, sitting 같은 라벨은 고정된 각도 기준으로 붙습니다. 라벨만 보지 말고 오버레이와 각도를 함께 확인하세요.
  • 가시성. 헐렁한 옷, 가림, 특이한 자세는 랜드마크 가시성을 떨어뜨립니다. 가시성이 낮은 랜드마크는 버리므로, 일부 각도는 틀리기보다 비어 있을 수 있습니다.
  • 추출 간격. 초당 5프레임에서는 빠른 움직임이 충분히 잡히지 않습니다. 움직임 분석에는 더 높은 비율을 요청하세요.
  • 임상 보행 분석이나 모션 캡처 시스템이 아닙니다. 값은 연구용 측정으로 다루고, 정밀도가 중요하면 일부 표본을 기준 장비와 비교하세요.

이 채팅의 보고서도 2차원 투영을 포함한 자체 한계를 적어 둡니다.

보고서의 유의사항. 관절 각도는 카메라 평면의 2차원 투영값이고, AU 값은 블렌드셰이프 근사라는 점이 적혀 있습니다.
보고서의 유의사항. 관절 각도는 카메라 평면의 2차원 투영값이고, AU 값은 블렌드셰이프 근사라는 점이 적혀 있습니다.

참가자 촬영: 동의와 개인정보

전신 영상은 얼굴이 가려져 있어도 사람을 식별할 수 있습니다. 첫 업로드 전에 뉴트로픽은 연구 데이터를 올리기 전에 안내를 보여 줍니다. 데이터 처리에 필요한 권리, 동의, 승인(IRB나 윤리위원회 등)을 갖췄는지 확인하는 단계입니다. 참가자에게 움직임이 자동으로 분석된다는 점을 알리세요. 측정은 뉴트로픽 서버에서 실행되고, 업로드는 삭제할 때까지 비공개 작업 공간에 남으며 학습에 쓰이지 않습니다(개인정보처리방침 참조). 가능하면 영상보다 파생된 자세 표를 공유하세요.

함께 읽기