티스토리 뷰

이번 포스트에서는 간단하게 어떤 개념들이 KinectInteraction이라고 정의되는지를 잠깐 살펴보려고 한다.


이전 포스트에서 잠깐 소개했던 것을 잠깐 다시 되짚어 보면 InteractionStream은 다음과 같이 구성된다고 했었다.

InteractionStream = DepthStream + SkeletonStream + Sophisticated Algorithm


자, 우선 Kinect는 일반적인 웹캠과는 다르게 RGB Cam과 Depth Cam이 같이 붙어있는 기기다. 하지만 이것도 일단 기기인 이상 우리 손을 보고, 사람 손이라고 인식하지 못한다. 물론 그 역할은 우리가 키넥트를 컴퓨터에 연결했을때 인식되는 Device Driver와 SDK에서 해주는 것이다. 그 SDK내에 있는 내용 중에서 Skeleton Data를 활용해서 손을 먼저 인지한다. 아마 Kinect Section을 많이 본 사람이라면 사람 손을 추적하기 위해서 다음과 같은 코드를 사용했을 것이다.



기본적으로 KinectSDK에서는 Skeleton이라는 Array를 제공하고, 여기서 18개 관절에 대한 정보를 뽑아올 수 있게 해준다. 그래서 보통 Joint 라는 변수에 담고, 여기에 대한 Property인 Position을 활용해서 3차원 점을 뽑아낸다. Interaction의 주체는 Hand가 될 것이므로 여기서 RightHand와 Left Hand에 주목한다. 

 그런데 Skeleton 만 가지고는 단순히 3차원 좌표만 알뿐, 실제로 RGB로 손을 바라 본 것은 2D 정보다. 그냥 손을 보는 그대로 인식하는 것이다. 물론 이걸 활용하면 외관적으로 구별할 수 있는 제스처에 대해서는 구분을 할 수 있을 것이다. 하지만 사람 손은 키넥트에 대해서 상대적인 개념이 아니다. 상황에 따라서 손의 제스처를 취하는 위치며, 취하는 모양, 혹은 같은 제스처라도 사람마다 취하는 행동이 다를 것이다. 이때문에 사람 손을 인지하기 위해서는 보통 기계학습 개념을 도입하기도 한다. 아무튼 그렇게 광범위한 제스쳐인식을 추구하는게 아니라 SDK에서 바라보는 인식의 첫번째 관점은 Hand Tracking에 있다. 물론 앞에서 지정했던 약점을 Depth Sensor가 보완해주기는 하지만 실질적으로 MS에서 언급하는 가장 Best performance를 가지는 제스처 인식의 범위는 사람의 제스쳐가 Physical Interaction zone (PhIz) 내에서 키넥트에 대해 손바닥이 보이게 동작될 때라고 소개하고 있다. 아마 내가 생각하는 PhIz 이라고 하는건 아마 Kinect Sensor의 Field Of View가 아닐까 생각되는데 참고로 Kinect FoV는 다음과 같다.



물론 Skeleton Tracking의 한계상 두명까지만 제스쳐 인식이 가능하고, Kinect for Windows 의 세부 기능인 Near mode를 활용하면 0.4m 이상에 있는 제스쳐들은 인식이 된다고 한다. 유념할 것은 두명의 제스쳐가 인식된다는 개념이 동시에 인식되는게 아니라는 것이다. 내가 이해한게 맞다면 먼저 인식된 Skeleton의 제스쳐를 Primary Interaction이라고 해서 먼저 추적하고, 그게 없을때만 두번째 Skeleton의 제스처를 받아들이는 개념인 듯 하다. 이에 따라서 손의 State도 크게 두가지로 나눠진다. 먼저 그냥 손만 추적하는 Tracked와 추적된 손에서 Interaction이 수행되는지 여부를 확인하는 Interactive 로 나눠진다. 

 자 그다음 가장 중요한 어떤 제스처가 인식되는지의 여부일텐데, 일단 공식적으로 나온 제스쳐 가이드는 크게 

- Grip and Release

- Press

- Scroll 

이다. 그런데 API단에서 확인해보면 InteractionHandEventType이라는 Enumulator가 있는데 여기에는 딱 Grip , Grip released 로만 정의되어 있다. 아마 Press나 Scroll 같은 제스쳐는 내부 코드에서 구현한 듯 싶다. 여기서 말하는 Grip의 정의는 사용자가 손을 키넥트를 향해서 뻗은 자세에서 주먹을 쥐는 자세를 말한다. 반대로 Release는 쥔 주먹을 피는 형태의 제스처를 나타내는데, 아마 이걸 잘 활용하면 키넥트 마우스같은걸 구현하는데 조금 응용할 수 있지 않을까 생각된다. 


Reference : Kinect Interaction Concepts (http://msdn.microsoft.com/en-us/library/dn188673.aspx)

댓글