본문 바로가기
Researcher/Unity

Unity + Human Pose Estimation (OpenPose, SMPL) + Mixamo

by 김포레버 2023. 5. 8.
728x90
반응형

Unity + Human Pose Estimation (OpenPose, SMPL) + Mixamo 

Human Pose Estimation 로 제일 널리 알려진 것은 OpenPose 이고
기술적으로는 variation이 엄청 여러가지가 있는데
그 중 상용 라이브러리로 사용할 수 있던 것이 WrnchAI 라는 애가 있었는데
이 기업을 통으로 캐나다였나 헬스기업에서 인수하는 바람에 더이상 사용을 못하게 됨
(원래도 연간 라이센스가 $500 정도라서 부담스럽긴 했음)
그럼 이제 사용할 수 있는 것이 Mediapipe가 있는데, 이건 또 특수한 경우에 사용하기 어려움
아무래도 실시간 퍼포먼스를 내기 위해 생긴 tradeoff가 좀 있음
결국 Human Pose Estimation은 실시간성이냐 정확성이냐를 놓고 그 사이 어딘가쯤에서 선택을 해야함
이번에 진행한 것은 영상에서 실시간으로 Keypoint를 추출하고, 이걸 모델에 입혀본 것 
Barracuda 라거나 기존에 있던 샘플 프로젝트들이 있기는 한데 남의 코드 가져다 사용할 수는 없고..
밑바닥부터 직접 구현해봤는데, 캐릭터 애니메이션에 대한 지식이 0에 수렴해서 접근 자체를 잘못했었음
보통 샘플로 돌아다니는 OpenPose 류의 결과물들을 보면
Keypoint 들을 2D 평면이나 3D space 에 띄워놓고 그것만 보여주거나
그 Keypoint 들을 이어서 Skeleton 구조로 보여주는데
이거를 모델에 직접 붙여서 돌린 샘플은 거의 없음
 
아래 링크에 있는 것이 가장 흡사한 결과물인데, ONNX를 이용해서 구현한 것임
https://github.com/digital-standard/ThreeDPoseUnityBarracuda

GitHub - digital-standard/ThreeDPoseUnityBarracuda: Unity sample of 3D pose estimation using Barracuda

Unity sample of 3D pose estimation using Barracuda - GitHub - digital-standard/ThreeDPoseUnityBarracuda: Unity sample of 3D pose estimation using Barracuda

github.com

 
위의 git 에서 긁어온 gif 결과물, 실제로 Unity 에서 구동시켜보면 아래처럼 잘 동작함

이걸 보고 아 쉽네~~ 그냥 이렇게 이렇게 매핑해서 하면 되겠나 하고 Mixamo 에서 캐릭터 모델을 하나 받아 내맘대로 돌려봤더니 모델이 기생수처럼 되버림
 
3D Keypoint 들은 관절의 3D 좌표값들만을 뿌려버리니 각도값들도 없을뿐더러, 모델의 관절별 크기를 고려하지 않으니 팔다리가 제멋대로 늘어나고 흐느적 흐느적..
 
암튼 그래서 오른쪽이 동영상 원본이고, 가운데 Line Renderer로 Keypoint 이어놓은게 실시간으로 추출한 Keypoint 들이고 (이게 보통 git 에서 볼 수 있는 Skeleton 결과물), 이걸 Mixamo 에서 받은 캐릭터에 입혀놓은게 좌 하단임
 
아직 Avatar configuration 에서 값들을 제대로 매칭 안해놔서 손목이랑 하체 보면 여전히 좀 이상하게 돌아가는데 이건 금방 잡을 수 있을 것 같음
 
지금 나오는 Keypoint 값들이 40갠데 그 중에 16개만 사용하고 있으니까 잘 보정하면 더 잘 나올듯
 

(영상 속 마스크 인물 저 아닙니다)

 
Mixamo 에서 FBX Binary (fbx), T-pose 로 임의의 캐릭터 다운로드
 

 
Assets 에 Models 폴더 생성 후, 해당 모델 복사
이렇게만 하면 아래의 스샷처럼 텍스쳐가 안붙음

따라서 Inspector 상에서 해당 모델의 Materials, Textures의 "Extract Textures" 수행
 

 
짜잔 Texture가 붙음
 

 
이걸 가지고 주무르면 됨!
 
아 근데 바로 뭐 하려고 하면 안되니까 Rig를 Humanoid로 바꾸고 Apply까지 해줘야됨
 

 

728x90
반응형

댓글