티스토리 뷰

계속해서 DepthStream을 활용한 내용을 다루고 있습니다. 물론 지난 시간에는 Winform을 이용해서 chart에 히스토그램을 표현해봤습니다. 

하지만 이런 것보다 키넥트를 활용한 작업에서는 무엇보다도 사람을 인지하는 것이 필요합니다. 어떤 원리로 사람을 인지할 수 있을까요? 지금까지 배워온 것을 토대로 한다면 ColorStream과 DepthStream간의 연산을 통해서 사람의 형상만 따올 수 있다면 어떨까요? 이번 포스팅에서는 그런 내용에 대해서 다뤄보겠습니다.

우선 프로젝트를 연후 MainWindow를 가로로 길게 확장시킵니다. 그 후에 Image 컨트롤를을 3개 삽입해야 합니다. 물론 첫번째에는 Colorstream, 두번째에는 DepthStream 마지막으로는 그것을 논리연산을 취한게 들어가야겠지요.

 


이제는 코드를 처리해야 되는데..ColorStream과 DepthStream을 뽑는 과정은 거의 동일합니다. 이전 게시물에서 그대로 인용해오시면 됩니다. 차이가 있다면 이번에는 SkeletonStream도 뽑아와야 한다는 겁니다.
 


물론 첫번째 이미지에는 ColorStream이 들어가야 하겠지요?
 


물론 여기까지는 제대로 실행해보면 제대로 나올겁니다.
 


DepthImageFrame에 대한 이벤트도 정의해줍니다.


 역시 이에 대한 결과값은 image2에 나올 것이고 지금까지 해온걸로면 별다른 차이가 없을겁니다.


 이제 Player를 처리해야 하는데 사전에 DepthImageFrame에서 처리해야 될 것이 있습니다.

우선 해야 될것은 플레이어를 그릴 비트맵을 미리 생성한 후에 거기에 해당 사람의 골격을 그려야 한다는 겁니다. Bitmap을 생성하는 것은 다음과 같이 처리하고 Player를 인식하는 것은 따로 Player라는 메서드를 만들어야 합니다.
 


라고 처리해줍니다. 참고로 int32Rect 구조체는 정해진 사각형의 크기와 넓이 위치를 반환해주는 변수입니다.
이제는 Player를 설명해줘야 합니다.


사실 DepthImageFrame속에는 Player를 인지할 수 있는 마스크가 들어있습니다. 이름은 PlayerIndexBitmask입니다. 이와 기존에 받아들인 depthFrame과의 and연산을 통해서 사람을 인지할 수 있는겁니다. 우선은 byte형 배열로 미리 칸을 만들어놓고 4씩 탐색하면서 사람이 있는 영역만 255로 표현되고 그 외 부분은 그대로 정의가 되는 겁니다. 이러면 이걸 RGB로 따졌을때는 사람만 흰색으로 뜨고 나머지는 검정색 또는 어두운 색으로 표현되겠지요. 결과는 다음과 같습니다.


 마지막으로 껐을때의 이벤트도 삽입하면 이번 프로젝트도 마무리되겠지요.
 


물론 원리만 안다면 얼마든지 고치는게 가능하지요. 물론 이를 응용해서 다인용을 인식하는 것도 가능하겠구요.

 
여기까지가 사용자 인식이었습니다. 

댓글