> ## Content Index
> Fetch the complete content index at: https://sudormrf.run/llms.txt
> Use this file to discover other available public pages before exploring further.

# KinectProjectorToolKit 으로 데모 실행하기.
- URL: https://sudormrf.run/2016/03/14/kpc-demo/
- Published: 2016-03-14T17:01:15.000Z
- Updated: 2018-04-02T17:09:16.000Z
- Author: Junho Cho
- Tags: kinect, media art, Computer Vision, #Import 2026-10-24 03:36

.

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

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

![](https://lh3.googleusercontent.com/9gum8qKiw0JiRiFG9MHsiIraC34-64ZiQVTtb1AeGVATC6xwaeA8ZUYWgT-Ewda0wcVUzu5tbBeRecNX5RHDcCATuKcefKlV2oTC1VcbYa6eil4qVspEqhsQkUx9i6ED3LbY-DmwA3Qtuho0qBtH9_icmckHZEV2iRjqPyAsHk3WxMVZiSZQB6f0bvPGqLngGIGJqG_Hjv-UTgBKu7EEYT7wOPZfKTOk2y5fPHL43uO4VhVJ8ZzUORItsda_SgHkqfcNJRVa-aqMnMnTxbG0Y1veSBJQqzSEb06XPPaPCZ3jx-bCpi-oDtsLrmJlGTrXllBc2x4OJH8clqzMf5oaDwkEhzBARwqT5I-X0PU-PvcaQFEbVGX9Inp7PlrBRpMawc3ZUfsq0i4rxEyBFvTYF7LqUYJlOjaDQLEClD-ZFh6Z7FR1jDjthGnzNkSW3Mb7OBnMCWl7jNKyjldM9qg0Molqnb-wrzMqy8biMy99R-15ik3kwZbegg-bQmQLJxXqdYSfA8P2Sv5F9Lz9NdYniFXEtH5IvYNWC8cNiMsQ5vQ9eCHupXPEnSfCMMqUwKbnhFh44g=w1326-h500-no)

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

![](https://lh3.googleusercontent.com/OirqLHAXzeBiPRQ0iZReVozorsG1ObayMo5HDcRZZC2-AzSB2OU9a802VuzNmigJZEtIA8vsK9Q1aOtcLLt6EfdZnV3aYCiGjsvWTgXbEhj84INHDRI0TiSb18vSe5_GCER-XRqwg1ZeZdTqEjc4jvxUNtvGFHzRBLbksQR7hym4m7eI0TJ4ry46GDCcGMFjOhpjH8dPoqmEQuxsdl7uLjtFQuGlu3T25ERWLPpRcCU64G4wMeGNWifKko1-eU_vAEsv9lBv5GoQW7kkRjFqRxw8jJwaLFcuRwliDWe5sNLc1qZ7U7zwo8etre1JZUIpPNJ3_RcracGSATCDvmoQ-gfv4tmUMdBPHyHwbuSQ-R70I4idp9M9RsDz-sVibeHsWy_-TelYzFZ-A3EMmzLIRulGsoOq87SiHbArbY_EoVwkx6zWN7SquWyb9acWVKNRWS_EY6jpfMtr6OHjnImac-kuq_MK3oOeCBAwceX07i1-AELZvd8ZVTK7moQST2OJcSS8y_p0M6vMd_0CDkZEhTlDyH51Txdw5RWZtyyG8hecNyimOCgGyAdEog_C8SlJ7M2WyA=w2356-h700-no)

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

![](https://lh3.googleusercontent.com/sWLekHwgkO_wafNwW32NwLzhDse5KHV_5Zio1rLpUFI0vzeD1Na6AhIibVzljQ8T8XRdJ_FiPpKT3KO_TUATj-r2nvJWYJ3jclph25DcC-_Baja4ubzVkP2y0mdzLrUeJ6nFcUwfwnrTzLJ7uW0XkzZncGTxeVi0-aCBzm-1ggxcNTbSjmCbSHkL3BVHosqUrcHe2B65km-6oMvd499FiAw_cKn11Q43f08-dfkgqwDkj85i3gmIBXHUV04wtBdV5E3Ba1AszET1Y9bhB2QL4MWXID2_jERIvCxtY_2QNLWcNnP2_6Fn3ImxbUsYRd-CYTfuYGjyB6b66qNsgmEejOfDpdADZ8ruxP3XWC3M-StaBerBrsQINUx6sWKiNUIbced1SIDNNJPXXGp2krZzNpgeEJ8OHVneWgAojVB4r82COkcuuG1HAsAEFU5fWel-rUq76wZYusyZJI9b-_xTYBgvTZI0XaiSi-Hm2XFRm1orEMwXaEIcoVXldDmfq7QQCbwmszjzo6SADQC3prCkoJMwxvJIn0NY7ymld2YvHgjJvfl4ZdyaDXpkenDxzexq7-X3yw=w2356-h1766-no)

# Calibration 과정

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

[Kinect Projector Toolkit Tutorial](https://vimeo.com/84658886?ref=sudormrf.run) from [Gene Kogan](https://vimeo.com/genekogan?ref=sudormrf.run) on [Vimeo](https://vimeo.com/?ref=sudormrf.run).

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

1. [KinectProjectToolkit](https://github.com/genekogan/KinectProjectorToolkit?ref=sudormrf.run) code를 github에서 다운받는다.
2. 프로젝터를 연결한 상태에서, 미러링을 풀고 화면의 해상도를 `CALIBRATION.pde`의 code에 반영시킨다.
- `int pWidth = 1280; int pHeight = 1024;` ![](https://lh3.googleusercontent.com/TwBVOY3ljY9rCqbd_6T-w6ZwT7kZMGSg2PGL4L_R-0vX2_vousfxIGu0wTGrP4xi4abUHtchFVaHoIUgRTkG3cmvlyXfhbX2y9lj_W2QTULqnhp1pCOH2_AaJ1YDIa2CQk8GVXAEkOAgj0IXxdAQbq6zRDM8db52uSkpIYpZl7-vgMgEnUIfs8HIStTf7zrDjZt2xT-o5PrIkKLat4APcXPqT4jRy9ja2EwD6keez-Phlgl32TjwN7mdpPmj6G5hO-mWaBwQvX5pVcdwIvV9PLwBLQ6biOtoq1mjMM3Pil_l39bcEz9FJQbR5X-uKe87xypsoSvH92ZczbrrlGs32HjKS2jPvZ2gKZJmmE84ob235ptx7fpBG4FCfN6BtDoltlbrxPCQDxnXGmuarpYVMYQsEr9PjojCK4kfZYtLKNW5453GR-GxWZ_4hB5ZjYSn9A5pSLLqaAt7LIVZ4rwQ3tNn0LJwLCBRw8YkN96C_oFYUPDFz7TmmNPJZB_Cg7ywSABqGgm0WuisTGwlTzphomHY94quZEqj7iGLk5OnVGUNxmt7gQ09BAd8gByBCz5_AoveCg=w2356-h400-no)
1. `./examples/CALIBRATION` 폴더에 있는 `GUI`를 실행시킨다.
- 만약 에러가 `GUI.pde`의 `guiCpos` 라이브러리에서 `guiCpos.arrayValue()` 함수에서 에러를 발생시키면 `guiCpos.getArrayValue()` 으로 수정한다. 라이브러리 구버전 code의 API가 업데이트 되면서 생긴 에러이다.
1. 체크보드를 움직이면서 Calibration을 진행한다. ![](https://camo.githubusercontent.com/5225fde8e035dc30d90af81019da58a795a043e3/687474703a2f2f7777772e67656e656b6f67616e2e636f6d2f696d616765732f6b696e6563742d70726f6a6563746f722d746f6f6c6b69742f6b70745f73637265656e5f332e6a7067)
- 다음과 같은 프로그램이 실행되고 체크보드의 사이즈와 위치를 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 된 값으로 영상을 투영시키면 된다.