Mediapipe Pose와 Unity를 이용한 포즈 트래킹(pose tracking) 프로그램 만들기

하나둘셋·2024년 2월 27일
post-thumbnail

교내 프로젝트로 진행했던 개발 경험들을 기억하고자 기록하는 게시물입니다.

1. MediaPipe Pose란?

MediaPipe Pose는 Google이 제공하는 AI 프레임워크 중에서 하나이고, BlazePose 모델을 통하여 고정밀 포즈 추적(Human pose estimation)이 가능하다.

MediaPipe Pose는 33개의 포즈 랜드마크를 통해 관절 위치를 실시간으로 추론할 수 있어 자세를 분석하는데 도움이 된다.

나는 모델의 아웃풋으로 pose_world_landmarks 를 사용했다.
pose_world_landmarks 를 통해 각 랜드마크의 x, y, z 값과 visibility 값을 얻을 수 있다.
x, y, z : 엉덩이 사이의 중심(24번과 23번의 중심값)을 원점으로 하는 실제 3D 좌표
visibility : 0.0과 1.0 사이의 정규화된 값으로 랜드마크가 이미지에 표시될 가능성(랜드마크가 다른 것에 가려지지 않았는지)을 나타내는 값




자세한 설명과 가이드는 아래의 사이트를 참고하시길 바랍니다.



2. 프로젝트 설명

  • 구현 목표 : 노트북 웹캠으로 사용자의 동작을 감지하면 유니티의 3D 캐릭터가 실시간으로 사용자의 동작을 똑같이 따라하도록 만드는 것

  • 구현 계획
    크게 세가지의 과정이 있다.

  1. 유니티 3D 캐릭터의 관절을 움직이는 코드를 만들고, 캐릭터가 특정한 동작을 수행할 수 있는지 확인한다.
  2. MediaPipe 모듈로 사용자의 관절 위치를 감지하여, 소켓통신으로 관절 위치를 유니티에 보낸다.
  3. 통신으로 받은 관절의 3차원 좌표값을 3D 캐릭터에 적용하여 캐릭터를 실시간으로 움직인다.



3. 어려웠던 부분

  • 포즈 추정 모델을 이용하여 3차원 좌표값만 얻을 수 있기 때문에 관절의 위치값만으로 관절의 회전을 구현하는 것이 어려웠다.
  • MediaPipe 모델이 사람의 목과 척추 부분을 감지하지 못해 캐릭터의 자연스러운 움직임을 구현하는데 어려움이 많았다.
  • 실시간으로 달라지는 관절의 좌표값을 전달 받기 때문에 통신에 어려움이 많았다. 수많은 오류 해결...

자세한 애로사항은 뒤의 게시물에서 구체적으로 설명하겠다.

profile
하나씩 뚝딱뚝딱

0개의 댓글