티스토리 뷰

Kinect

[Kinect 프로젝트] Kinect Joints and Mimicking Movement

생각많은 소심남 2012. 8. 7. 22:55

이번 포스트에서는 Coding4Fun에서 제공되는 툴킷을 활용해서 사람을 따라하는 유령을 만들어보고자합니다. 아마 제 키넥트 섹션 제일 처음에서 다뤘던 내용인 듯하고요. 이번에는 그걸 직접 만들어보는 것이 목적입니다. 이전 포스트에서 만들었던 프로젝트를 그대로 활용할 예정이니 사전에 복사하시면 좋을 거 같네요. 우선 받아야 할 것이 있습니다.

http://c4fkinect.codeplex.com/


위 사이트에 들어가면 창이 뜨는데 Download 버튼을 누르면 됩니다. 그안에 Winform용 dll 파일과 wpf용 dll 파일이 있는데 이번 프로젝트에서 사용할 것은 wpf용 dll 파일입니다. 우선 기존 프로젝트를 여신 후 Microsoft.Kinect.dll파일을 추가했던 것처럼 이 dll 파일도 추가시켜줍니다.그러고 나서 using 지시자를 통해서 다음과 같이 작성해줍니다.



이 파일은 colorStream이나 DepthStream, SkeletonStream을 쉽게 뽑을 수 있는 툴킷입니다. wpf 프로젝트로 작성하면 단순히 해당 요소를 창에 드래그하는 것만으로 기능이 활성화되는 툴입니다. 그다음에 창 크기를 사전에 정의해놓습니다. 우선은 VGA(640x480) 규격으로 하기 위해서 정의 부분에 다음과 같이 작성해줍니다.



그리고 몇가지 변수를 추가시켜줘야 합니다. 우선은 역시 외부 이미지를 호출해야 되기 때문에 그걸 담을 그릇들을 선언합니다.  그리고 그 위치에 대한 정보 ( x , y ) 값도 알아서 이미지를 움직이게끔 해야 됩니다. 그럼 다음과 같이 추가적으로 정의될 겁니다.



이전 프로젝트에서 추가시켜 준건 이미지를 넣을 그릇 (Texture2D)와 각각의 포인트를 정수형으로 선언, 그리고 창을 띄울 크기를 선언한 겁니다. 이제 지난번에 폰트를 삽입한 것처럼 이번 이미지도 삽입해봅시다. 일단 다음 파일들을 받습니다.


image.zip


그러면 이미지가 세개 들어있는데 그걸 지금 프로젝트의 Content부분에 삽입해줍니다. 



정상적으로 되었다면 위와같이 Content 프로젝트안에 이미지가 세장 들어가게 될겁니다. 이걸 어제 폰트를 호출했던 것처럼 똑같은 식으로 적어주면 됩니다.



이렇게 하면 그릇안에 내용물을 넣은 셈이 되는 겁니다. 


이전 포스트에서 Skeleton의 수를 집어넣는 부분 기억하시나요? 바로 SkeletonFrameReady 부분의 Track되었을때 howmanySkels가 증가하는 구문이 있었습니다. 그 부분으로 들어가봅시다. 거기서 howmanySkels는 지워주고 다음과 같이 골격을 정의하는 코드를 삽입하면 됩니다.



이 Joint라는 자료형은 3차원(x,y,z)에 대한 정보를 가지고 있습니다. 그래서 자신이 원하는 정보에서 따로 각 축에 대한 정보를 뽑아올 수 있다는게 특징입니다. 이와같은 방식으로 나머지 관절에 대해서도 삽입해주면 다음과 같습니다.



이렇게만 하면 기존의 SDK가 제공하는 것과 같습니다. Coding4Fun에서 제공하는 툴킷은 이걸 쉽게 늘려주는 역할을 합니다. 그래서 캐릭터마다 크기를 다르게 하고 싶다 하면 다음과 같이 작성해주면 되겠지요.



이제 각점에 대한 정보가 Joint형 자료에 들어갔으니가 각각의 위치 정보를 뽑아내야 할 겁니다. 앞에서 정의했던 hx,hy 등에 집어넣어주면 되겠지요. 



참고로 Joint에 포함된 위치정보는 float형 변수이기 때문에 int형으로 형변환을 해줘서 넣어줘야 합니다.

거의 끝났습니다.이제 해야 될건 그려주는 건데요. 기존의 HowManySkels 조건문을 넣었던 걸 빼주고 다음과 같이 작성해줍니다.



보다시피 Draw상에서 아이콘은 네모를 채우는 형식으로 이뤄집니다. 그래서 그 위치와 폭 높이에 대한 정보를 넣어주면 이미지가 그 네모틀에 맞게 들어가게 됩니다. 여기다가 앞에서 받은 위치값을 삽입하면 되겠지요. 참고로 머리 이미지의 크기는 150x150이고 손이미지는 75x75입니다. 이값들을 다 넣어줍시다.



혹시 배경색을 바꾸고 싶다 하시는 분도 계신가요? 그러면 위의 색상을 바꿔주면 됩니다. 저는 빨간색으로



바꿔줍니다. 결과를 확인해보겠습니다.



간단하게 Skeleton 정보를 따오는 프로그램을 구현해보았습니다.



댓글