티스토리 뷰

Kinect

[kinect 프로젝트] SetupDevelopment Environment

생각많은 소심남 2012. 2. 2. 18:55



원본: http://channel9.msdn.com/Series/KinectQuickstart/Setting-up-your-Development-Environment

우선 키넥트의 기능을 쓰기 위해서는 그 개발할 수 있는 환경에 대해서 설정해줘야 합니다. QuickStart의 두번째 강좌였고, 동영상에서 다루는 내용을 직접 따라해보고자 합니다.

우선 VS2010을 열고 WPF 어플리케이션으로 KinectSetupDev이라고 짓습니다.


참 그전에 Kinect관련 툴킷을 깔아야 합니다.


지금 당장은 필요없는데 일단 프로젝트를 만들기전에 압축을 풀어놓는게 좋습니다.
우선 만들면 가운데에는 큰 창이 하나 떠 있습니다. 바로 디버깅시 우리가 한 결과가 뜨는 창이라고 보시면 됩니다.
일단 지금 만든건 WPF이기 때문에 이를 kinect에도 적용시키려면 Kinect Reference를 집어넣어야 합니다.


위와 같이 Reference에 마우스 우클릭후 Add를 선택하면 VS에서 자체적으로 제공하는 Reference가 보입니다. 당연히 Kinect SDK를 깔았다면  중간에 


라는 것이 떠 있을겁니다. 이를 추가해줘야 Kinect에서 제공하는 다양한 메서드를 이용할 수 있습니다.
마찬가지로 아까 받은 툴킷의 reference도 넣어줘야 합니다.


공식 reference가 아니기 때문에 파일의 위치를 직접 정해줘야합니다. 아까 툴킷의 압축을 푼 곳을 선택하면 위와 같은 파일이 있을겁니다.

그리고 한가지 더해줘야 할게 있습니다.


원문에도 있지만 이 압축파일을 풀어서보면 안에 dependency 폴더가 있습니다. 이안에 KinectWpfViewer가 있는데 이안에 있는 프로젝트를 지금 하고 있는 곳에 포함시켜야 합니다.


위와 같이 들어간후에


다음 파일을 삽입해줘야 한다는 거지요. 물론 이렇게 하면 지금 솔루션에는 두개의 프로젝트가 있는 셈입니다.


여기까지가 기본 설정이었고, 이제는 직접 쳐야 합니다.
우선 디자인뷰상의 Main Window를 선택하면 Properties 창이 변합니다. 그안의 박스가 아닌 MainWindow입니다. 거기를 선택하고 Properties의 Events를 들어가면 이벤트가 많이 뜨는데, 여기서 Loaded란 항목과 Closing 항목을 더블 클릭합니다. 이게 바로 코드가 형성되는 과정입니다. 정상적으로 이뤄졌다면


와 같이 이벤트 핸들러가 형성되는 것을 확인할 수 있습니다.먼저해야 할 것은 using 지시자를 이용해서 Kinect namespace를 첨가해줘야 하는 겁니다.


이제 이 네임스페이스내의 변수들을 사용할 수 있게됩니다.
(그리고 하나 더 추가해야 합니다. 이전에 Coding4Fun 툴킷을 깔았기 때문에 이에 대한 네임스페이스도 삽입해야 합니다.
using Coding4Fun.Kinect.Wpf;
를 추가하시면 됩니다.)


여기까지 코딩을 합니다. 지금 한것은 기본적인 Sensor의 동작을 지정해주고 있는 겁니다. 키넥트가 연결되어 있는 갯수와 연결되어 있는지를 확인한 후 각각의 Color와 Depth, Skeletonstream을 담당하는 것을 활성화시킵니다.이제 여기까지 마친후 이미지가 들어오기 시작했으면 동작해야지요. 여기까지 왔다면 Tab키를 딱 두번 누르시면 됩니다. 그럼 어떤 변화가 나타날까요?


위와 같이 새로운 이벤트 핸들러가 자동으로 생성되었습니다. 일단 이번 프로젝트에선 개발 환경 조성이기 때문에 allFrameReady내의 내용은 비활성화 시킵니다.


자 이제 프레임까지 받아오므로 이제 Kinect를 동작시켜야 하겠지요.


다음으로 해야 할 일은 키넥트 동작을 멈출 때를 지정해야 한다는 겁니다.


물론 센서의 내용이 없으면 받아들이는 오디오 데이터나 동작이 멈춰져야 하겠지요. 그래서 창이 닫힐때는 키넥트도 같이 꺼지겠끔 지정해줍니다. 그 후에 아까 Start() 메서드다음에 중지점을 걸고 f5를 눌러서 돌려봅니다.

(여기서도 한가지 추가해야 됩니다. Sensor가 있을때의 조건을 삽입하고 그안에 또다른 조건이 있어야 합니다.
바로 키넥트가 동작하고 있는지에 대한 조건입니다. 그래서 위 구문은 

if(sensor != null)
{
       if(sensor.IsRunning)
       {
              sensor.Stop();
              sensor.AudioSource.Stop();
       }
}


으로 바뀌어야 정상입니다.)


그럼 위와 같이 연결되어 있는 모습이 뜰겁니다. 흰 화면이 나와도 지금은 연결되어 있는 상태만을 지정했기때문에 정상입니다.

자 이제 Xaml상으로 돌아와서 kinect의 동작을 확인할 수 있는 Item이 있습니다. 


바로 Chooser입니다. 사실 이 부분은 엑박용 키넥트로 다루기 힘든 부분인 것 같습니다. 정상적으로 동작하는지를 확인할 수가 없습니다. 왠지 보면 윈도우용 키넥트에서만 되는 것 같아서... 일단 확인후 이부분은 다시 전달해드리겠습니다.
이걸 드래그해서 아까 만들었던 MainWindow상에 놓습니다.


이번 키넥트의 새로운 UI랍니다. 동작이 되면 required란 부분이 바뀌게 됩니다. 이제 Chooser를 사용했으니
기존에 삽입했던 내용중 color,Depth,Skeleton 그리고 AllframeReady 를 활성화 시켰던 부분을 chooser안에 삽입해야 합니다. 활성화시키는 부분을 잘라내기 한후 나머지 Loaded에 들어 있던 내용을 다 지웁니다.


아까 썼던 chooser에서 Sensor값이 변하는지를 인지하는 역할을 합니다. 역시 +=를 한후 tab키를 두번 누르면 이벤트 핸들러가 자동으로 형성됩니다. 아까 지웠던 내용을 여기다가 복사합니다.

그리고 한가지 고민해야 할 건 이전에 받아놓은 값이 있다면 어떻게 하느냐는 겁니다.그래서 다음과 같이 처리해줍니다.


이전값이 있으면 Kinect를 멈추고 새값을 받으면 그 값에 대해서 각각의 정보를 활성화시키는 겁니다.
다음으로 해야할 부분은


와 같이 _sensor로 되어 있던 부분을 위와 같이 바꿔주는겁니다. 
마지막으로는 시작시 일어날 수 있는 허위정보에 대한 처리를 try catch 구문을 통해서 잡아주는 겁니다. VS에서는 이 부분또한 쉽게 만들 수 있습니다. 


와 같이 Start 메서드에 마우스 우클릭을 하면 Surround with를 선택하고 중간쯤에 있는 try를 선택하면 됩니다.
  


그 후에 입출력값을 이상한값이 들어왔을 때를 위한 IOException을 잡아주면 됩니다. 
여기까지가 개발 환경 조성이었습니다.
사실 동영상을 보시면 알겠지만 이 후에 컴파일을 하면 아까 디자인뷰에 나왔던 화면에서 Required라고 되어 있는 부분이


Initializing 되면서 제대로 변하는 것이 정상입니다. 이 와중에 중간에 거치는 과정이 키넥트의 usb를 뺐다가 끼는 동작이 있는데 이 때 엑박용 키넥트는 전원이 꺼집니다. 그러면서 오류가 출력되지요. 좀 이해가 되지 않는게 키넥트 연결시 원래는 어뎁터도 같이 연결하게끔 되어 있는데 어뎁터 전원을 뽑아도 키넥트는 동작합니다( 물론 물체 인지를 못합니다.) 그런데 PC와 연결되어 있는 케이블을 뽑으면 바로 전원이 나가네요. usb를 통한 전원 공급이 main인 걸까요?

뭐 아무튼 강의부터가 본격적인 카메라 api를 사용하는 부분입니다. 그때 부터는 재미있어지겠지요.

*괄호처져 있는 부분은 SampleCode를 통한 수정이니 이상하다 싶으신 분은 첨부된 파일의 SampleCode로 실행시켜보시길 권합니다. 
댓글