KinectProjectorToolKit 으로 데모 실행하기.

.

여태까지는 그냥 모니터로 키넥트의 인식결과를 출력하였다. 이제는 키넥트로 사람과 배경을 인식한 것을 프로젝터로 피사체에 쏘아 mapping하는 과정을 한다. 이때 쓰는 코드는 https://github.com/genekogan/KinectProjectorToolkit 을 사용한다.

여태까지 했던 kinect flow, physics 등은 사실 피사체에 프로젝터로 mapping을 하는 목적이 아니고 그냥 대형화면에 띄우는 듯한 목적이다. 하지만 위 코드는 키넥트로에서 프로젝터로 투영시킬 대상과, 배경이 될 스크린 등 상대적 거리를 키넥트의 depth(거리)센서로 같이 인식하면서 진행한다. 쉽게 말해서 키넥트와 스크린 사이의 모든 물체의 위치를 구해내고 그걸 바탕으로 프로젝터로 하여금 대상과 배경에 영상을 투영시킨다.

위 사진 처럼, 스크린과 사물을 키넥트의 depth센서로 인식하고 대상을 "감싸는", 즉 대상보다 조금 큰 테두리를 프로젝터로 투영시킨다. 결과적으로 나는 움직여도 저 테두리는 나에 투영되지 않는다. 이런 작업을 하기위해서는 다시 말해서 프로젝터로 투영시킬 스크린과 사물을 키넥트로 미리 인식하고 calibrationg하는 작업을 아래 사진 처럼해야한다.

다음과 같은 체크보드 모양 격자를 맥북의 KinectProjectorToolkit의 프로그램을 실행시켜 투영시킨다. 그리고 kinect로 투영시킨 격자가 실제 물리적으론 어디에 존재하는지 인식시키고 point들을 모은다. 우리는 사물을 다양한 depth에서 물체를 인식시키고 싶으므로 움직일 수 있는 스크린을 다양한 거리에서 체크보드를 인식시켜야한다.

Calibration 과정

사실 tutorial이 이미 github의 READEME.md에 이미 글과 심지어 영상으로 친절하게 설명되어있다.

Kinect Projector Toolkit Tutorial from Gene Kogan on Vimeo.

이를 우리말로 간략히 설명하자면,

  1. KinectProjectToolkit code를 github에서 다운받는다.
  2. 프로젝터를 연결한 상태에서, 미러링을 풀고 화면의 해상도를 CALIBRATION.pde의 code에 반영시킨다.
  • int pWidth = 1280; int pHeight = 1024;
  1. ./examples/CALIBRATION 폴더에 있는 GUI를 실행시킨다.
  • 만약 에러가 GUI.pdeguiCpos 라이브러리에서 guiCpos.arrayValue() 함수에서 에러를 발생시키면 guiCpos.getArrayValue() 으로 수정한다. 라이브러리 구버전 code의 API가 업데이트 되면서 생긴 에러이다.
  1. 체크보드를 움직이면서 Calibration을 진행한다.
  • 다음과 같은 프로그램이 실행되고 체크보드의 사이즈와 위치를 GUI로 조절할 수 있다. 체크보드를 인식하면 6개의 초록 점이 체크보다 꼭지점에 인식이 되고, ADD PAIR버튼으로 추가시켜주면 된다. 이 작업을 3번 다양한 거리에서 위 아래 2번씩, 화면의 왼쪽, 중앙, 오른쪽 3번씩, 총 18번만 해주어도 충분했다. 즉 3x2x3=18 위치에서 18x6=108 개의 점을 시킨다.
  1. CALIBRATE 버튼을 누르고 Test 해본다.
  • 이때 맥북 모니터상의 영상에 아무곳이나 마우스로 찍으면 빨간점이 생기고, 실제 프로젝터는 초록점을 동일한 물리 공간에 투영시킨다. 따라서 이상적으로 calibration이 되었다면 우리가 맥북의 화면으로 본다면 초록점은 빨간점에 가리게된다.
  1. 위 과정이 성공적으로 이루어졌다면, SAVE버튼을 눌러 ./examples/CALIBRATION/data/calibration.txt 의 결과물을 생성한다. 이 파일을 다른 예제, ./examples/TestRibons/data/ 등 에 복사해서, calibration 된 값으로 영상을 투영시키면 된다.