티스토리 뷰

그냥 뭐랄까.. 키넥트를 할 시간이 없다. 연구실에서 하는 주제가 완전 다르다보니 관심이 있는 걸 해보지 못한다. 뭔가 아쉽긴 한데, 그래도 조금씩 꾸준히 하는게 의미가 있을거 같아서 msdn에 있는 내용을 바탕으로 Kinect Interation에 대한 내용을 조금 훑어보고자 한다. 여러번에 나눠서 분석할 것이고, 아마 최종 목적은 Kinect Interaction Example에 있는 Grab이나 Press 같은 gesture를 구현해보는거다.


 본래 kinect가 출시되면서 개발자들이 생각한건 여기서 어떻게 제스처를 찾냐는 것이었다. 당연히 일반 웹캠으로 했던 Computer Vision 쪽 기술을 응용했었고, 많은 사람들이 OpenCV 같은 라이브러리를 활용해서 finger나 body tracking을 했다. 그런 라이브러리는 Vision 쪽을 공부하는 사람이나 쉽게 응용할 수 있었지 대중적인 어플리케이션을 개발하고자 했던 사람들이 접근하기는 조금 힘들었다. 그런데 MS에서도 SDK내에 이런 제스처를 인식할 수 있는 기능들을 V1.7부터 삽입하기 시작했다. 물론 finger와 같은 작은 부분에 대한 구현은 안됬지만 적어도 grab이나 press 같은 아주 간단한 제스처에 대한 프레임워크를 만들었고, 이를 API 형식으로 뽑았다. 아무튼 구조는 다음과 같다.


아마 내부 Assembly 파일을 본 사람은 알겠지만 SDK의 기본 base는 v1.0에서 시작해 kinect.Toolkit이라는게 더해지면서 새로운 기능이 추가되는 형식으로 구성되어 있었는데 1.7로 넘어오면서 하단부에 있는 KinectInteraction170 이라는 라이브러리 파일이 덧붙여졌다. 그래서 앞에서 언급한 제스처들을(MS에서 제공하는 제스처 인식기능) 사용하려면 위의 라이브러리들을 namespace로 추가해주는게 필요하겠다.


당연한 이야기겠지만 이 제스처 인식을 하는데 뭐가 필요할까 생각을 해본다. 당연히 손이라고 인식해야 되기에 기존에 제공되는 Data 중에 SkeletonStream을 사용할 것이고, 또 그 손이라고 인지된 부분의 형태를 파악하기 위한 DepthStream 이 필요할 것이다. MS의 설명에서는 이런 Interation을 가능케 해주는 Data를 따로 InteractionStream이라고 정의하고 다음과 같은 구성으로 소개하고 있다.

InteractionStream = DepthStream + SkeletonStream + Sophisticated Algorithm


앞에서 언급한 바와 같이 해당 라이브러리에서 API들을 제공하는데 크게 Native API와 Managed API 단으로 나눠서 구분한다. 당연히 키넥트 하드웨어에서 제공하는 기능을 활용하기 위해서는 Native API를 활용해야 하는데 보통 C/C++ 로 개발하려는 사람들이 보면 좋을 듯 하고, C#/WPF 환경에서 개발하려는 사람은 Managed API를 활용하면 좋을 듯 하다.


Reference: MSDN - Kinect Interaction http://msdn.microsoft.com/en-us/library/dn188671.aspx

댓글