티스토리 뷰

OpenCV

[Kinect with OpenCV] C++로 개발하는 Kinect 준비과정

생각많은 소심남 2012. 8. 2. 00:17

여러분 키넥트 개발 열심히 하고 계신가요?

저도 요새 한창 키넥트 개발 공부를 하면서 제 자신이 부족한 걸 알고 열심히 공부하고 있습니다. 

한가지 질문드려보겠습니다. 여러분은 키넥트를 뭘로 개발하시나요?


키넥트 SDK는 C++ / C# / VB에서의 개발을 지원합니다. 그 중 MS에서 중점적으로 자료를 내놓고 있는 부분은 C# / VB 파트입니다. 당연히 C# / VB은 MS에서 만든 .net Framework을 기반으로 돌아가기 때문에 MS에서도 이에 대한 지원을 강화하고 교육 자료도 많이 내놓고 있습니다. 

 그런데 개발을 어느정도 해보신 분은 아시겠지만 이 C#에서도 한계가 있는 걸 느끼실 겁니다. 지금 소개해드리는 OpenCV나 Point Cloud 같은 Open source 라이브러리들이 보통은 C#을 지원하지 않기 때문입니다. 오픈소스 개발사 자체에서도 특정 플렛폼에 초점을 맞춘 프로그램은 따로 개발하지 않습니다. 범용성을 고려한다면야 당연히 C++ 이나 python 같은게 더 좋은 도구이겠지요.

저는 요새 C++로 개발합니다. 그래서 최종적으로는 손가락을 구분하는 것을 구현하는 것을 목표로 하고 있습니다. 물론 초보 개발자이긴 하지만 인터넷에서 하나하나씩 찾은 자료를 토대로 함수도 고쳐보고 나름대로 자료를 정리하고 있습니다. 그래서 간단하게 이번 포스트에서는 OpenCV 자료를 활용해서 Kinect를 개발하는 준비과정을 언급하고자 합니다.

참 들어가기에 앞서서 제가 개발하는데 있어서 활용하고 있는 자료는 바로 아래 것입니다.


SkeletalViewer_Walkthrough.pdf


어 지금은 Kinect SDK v1.5가 나오는데 Beta꺼가 나오니 잘 못올린 거 아니냐 하실 분이 있는데 제가 사용하는 자료는 바로 이겁니다. 놀랍게도 C++상에서 전체적인 구조는 지금의 샘플과 거의 유사합니다. 차이가 있다면 몇가지 새로운 SDK에서 제공하는 Flag가 추가 된 거, 그리고 헤더 이름이 기존에는 MSR_NuiApi.h였었는데 이제는 그냥 NuiApi.h로 바뀌었다는 겁니다.

그리고 두번째로 활용하는 자료는 바로 MSDN( http://msdn.microsoft.com/en-us/library/hh855347.aspx )입니다.

샘플쪽을 보면 조금 실망하실 겁니다. 거의 모든 내용이 그냥 실행시키면 된다고 나와있습니다. 주로 봐야 할 것은 Reference와 Programming Guide 입니다. 잘 보시면 중간중간 C++ 코드 부가 삽입되어 있습니다. 물론 중간의 내용을 조금 수정해야 되기도 하지만 C++ 개발하시는 분이라면 얼마든지 잘 이해가 가실 겁니다.

물어볼게 있다 하시는 분이라면 Kinect Fourm(http://social.msdn.microsoft.com/Forums/en-US/kinectsdknuiapi/threads)이 있습니다. 궁금한 사항을 영어로 올리시면 MS K4W dev 팀의 인원이 도와줄겁니다. 저도 가끔 보면서 도와드릴수도 있겠구요.


무슨일을 함에 있어서 준비과정이 당연히 필요합니다. 키넥트와 OpenCV를 C++로 함께 개발하는데 있어서는 알다시피 include 폴더와 lib 폴더를 추가시키는 과정이 필요합니다.자 다같이 따라해봅시다.

우선은 C++ 빈 프로젝트로 하나 생성해봅시다. 

맨먼저 지정해줘야 하는 것은 자신이 어떤 모드로 개발할 거냐는 겁니다. Debug 모드가 필요하신 분이라면 초기 세팅을 Debug로, 아니라면 Release로 지정해주세요. 저는 개인적으로 Release 모드를 추천합니다. 어차피 별 차이는 없습니다. 이게 중요한건 딱 두가지입니다. 첫번째는 이 모드 선택에 따라서 OpenCV에서 포함되는 dll 파일이 다릅니다. 디버그 dll 파일은 끝에 d가 붙고 아닌건 없지요. 두번째는 한번 잘 못 선택을 하면 모드를 수정시 설정이 초기화 됩니다. 사전에 뻘짓을 막기 위한 방안으로 모드를 지정하는 것이 필요합니다. 그러고 나서 properties 창으로 들어갑니다. 

VC++ Directories에 들어 있는 Include Directories입니다. 여기에 다음과 같이 추가해봅시다.



지금 위와 같이 한건 OpenCV에 들어있는 include 폴더를 연동시키고 추가적으로 Kinect SDK의 inc 폴더를 추가시킨겁니다.저는 OPENCVROOT에 환경변수를 사전에 정의를 했기 때문에 경로가 저렇게 지정되어 있습니다. 일단 이정도하고 적용을 누릅니다. 다음은 libraries Directories입니다. 역시 창을 열고 다음과 같이 적어줍니다.





역시 여기서도 모드설정의 중요성이 나옵니다. 모드 선택을 어떻게 했느냐에 따라서 당연히 폴더 경로가 바뀌겠지요.

적용을 누르시고 다음은 Linker의 Input으로 들어갑니다. 우리가 수정할 부분은 Additional Dependencies 입니다. 여기다가 dll 파일들을 추가해야 합니다. 당연히 OpenCV용 dll 파일은 다 추가시켜야 겠지요. 키넥트 부분은 마지막에 살짝 붙습니다.


세팅이 끝났습니다. 한번 적용을 누르고 보면 프로젝트에서 헤더파일을 막 포함시키는 시간이 들겁니다.



Opencv가 제대로 포함된건 헤더 파일로 불러올 수 있느냐에서 확인할 수 있습니다. 그리고 Kinect Api는 다음이 추가되면 됩니다.



여러가지 헤더 파일이 있는데 여기서 쓰는 헤더 파일은 딱하나 NuiApi입니다. 나머지는 NuiApi를 통해서 호출되는 형태를 취하기 때문에 코드상에서 불러올 일이 없습니다. 이제 본격적으로 하면 되는데 이 부분은 조금 기니까 다음 포스트를 통해서 설명하도록 하겠습니다. 여러분들도 밑과 같이 Depth와 Color를 같이 뽑을 수 있습니다. 즉 이말은 각 Frame을 활용해서 OpenCV를 적용할 수 있다는 의미지요.



댓글