한 2년 전 정도인가, 어쩌다보니 모션캡쳐를 시작하게 되었습니다.
솔직히 공부해서 구현하거나.. 뭐 이미 있는 구현체를 쓰거나... 상용 소프트웨어를 하거나... 하면 되지 않을까? 그런 생각이었습니다.
근데 찾아보니 상용 소프트웨어는 너무 비쌌고, 이미 있는 구현체들은 제가 원하는 것들이 아니었습니다.
딱 제 상황에 맞는 모션캡쳐를 하고싶었는데(모션캡쳐를 하는 방법은 꽤 다양합니다), 마땅치 않으니 내가 직접 공부해서 만들어야겠다고 생각했습니다.
결론적으로, 아마 1년 전 정도에 성공했습니다. 학교 다닐 거 다니고 직장 다닐 거 다니면서 하다보니 오래 걸렸지요.
근데 시간이 없었다거나 제가 이를 메인 프로젝트로 삼지 않았다거나 하는 것이 이유가 될 수 있는데, 이 프로젝트가 오래 걸린 데에는 관련 자료를 찾기 힘들었던 게 한 몫 했습니다.
강화학습이네 영상처리네 SLAM 하는 비슷하게 어려운 여러 학문들은 찾으면 자료가 턱턱 나오는데, 모션캡쳐는 그리 메이저한 분야가 아니라서 그런지 대번에 설명된 자료가 별로 없었습니다.
그래서 고전 원서와 유명한 논문 등을 찾아가면서 힘들게 공부했습니다.
이제는 모션캡쳐는 커녕 비전 분야를 거의 다루고 있지 않지만, 그럼에도 모션캡쳐를 공부하고자 하는 사람이 있다면 또 비슷하게 귀찮은 공부를 하겠구나 생각이 들었습니다.
그래서 만든 레포지토리가 "how-to-motion-capture"입니다.
현재 육군에서 군 복무를 하고 있기에 1~2년 전 코드가 어디 있는지 찾기도 어렵고(휴가 나가서 찾아보니 아마 증발해버린 것 같습니다...........ㅠㅠ) 하다보니 사지방에서 기억을 더듬어 처음부터 하나하나 작성했습니다.
데이터도 가장 마지막 촬영 데이터가 없어서 그런지 구글드라이브에 돌아다니는 옛날 촬영 데이터를 가져와서 테스트했습니다.
이런 이유로 아직 Reconstruction 파트, 특히 Spatial & Temporal Correspondence를 계산하는 부분이 미흡합니다.
미흡한 걸 넣을 바엔 일단 빼놓자는 생각으로 해당 부분을 지워두었습니다.
단순히 시각화용으로 간단한 spatial correspondence를 계산하고 영상을 출력하는 코드까지만 만들어두었습니다.
implementation/README.md의 사용법대로 코드를 실행했을 때 나오는 결과물에서 보이듯, 불완전한 결과가 나오고 있습니다. 데이터셋 자체가 불안정하다보니 그런 점 양해 바랍니다.
제가 휴가를 나가서 촬영을 할지, 전역을 하고나서야 작성을 할지, 혹은 모션캡쳐에 관심있는 혹자가 도와주어 같이 진행을 할지는 모르겠습니다만, 언젠가 새로운 촬영 데이터를 구하게 된다면 그 때 해당 파트를 추가할 것 같습니다.
그래도 거의 절반이라고 할 수 있는 캘리브레이션 부분은 문제 없이 작성해두었습니다.
특히 여기는 OpenCV없이 구현한 부분이라 중요하게 생각하고 있습니다. 인터넷에 캘리브레이션이라고 검색하면 Python이든 C++이든 죄다 OpenCV를 사용하는 코드가 대부분입니다. 특히 Python 구현체가 거의 없습니다. 그래서 scipy와 numpy를 이용하여 캘리브레이션을 구현했습니다. Pure Python은 아니더라도 뭐... least square optimization이나 matrix multiplication까지 Python으로 구현할 필요는 없잖아요? 아무튼, 나름 신경 써서 구현해두었습니다.
리드미에도 적어두었지만, 잘못된 사항이나 궁금한 것 있으면 언제든 메일로 연락주시면 고맙겠습니다. 저는 관련 분야 전공자는 커녕 컴퓨터공학 전공자도 아닙니다. 모션캡쳐를 공부하는 데 있어 표지판으로 잘 역할하기를 바라면서 작성한 레포지토리이니, 이에 기여해주실 수 있다면 언제나 환영입니다.
'개발 > 파이썬' 카테고리의 다른 글
파이썬의 메서드 결정 순서(Method Resolution Order)와 프로토콜에 의한 일관성 유지 (0) | 2022.12.02 |
---|---|
파이썬의 루프를 더 빠르게 하는 법? (0) | 2022.11.15 |
랜덤이 포함된 로직은 단순히 기능만 테스트해서는 안된다. (0) | 2022.07.10 |
Python 네임스페이스에 대한 이해 (0) | 2022.07.09 |
$D^{-1/2}$는 어떤 방법으로 구해야 할까? np.ndarray와 np.matrix의 차이 (0) | 2022.07.09 |