2017년 9월 10일 일요일

3D 가족 앨범 만들기 - 1편 (XBox360 에서 Kinect 를 분리 하다)

3D 프린터로 한달 넘게 출력하다 보니 thingiverse 에서 다운받을 것도 바닥이 난것 같다.
다운받아서 출력하는 것 말고 내가 만든 무언가를 나만을 위해 출력 하면 좋겠다는 생각이 든건 그때문이다.

그래서 생각 난 것이 우리 가족 사진을 3D 프린터로 찍으면 어떨까 였다.

항상 그래왔듯이 생각이 나면 바로 행동으로 옮겨야 직성이 풀리니, 우리 가족을 3D 모델링 하는 방법을 찾아 봤다. 

내가 원하는 것을 얻으려면 XYZ 3차원 좌표를 갖는 모델을 얻을 수 있어야 하는데, 이것을 하는 가장 쉬운 방법은 XBox360 에 연결된 Kinect 를 사용하는 것이었다. 운이 좋았던 것인지 2년 전 쯤에 감시 카메라를 만들어 볼까 하고 구매해 뒀던 xbox 개발 키트가 빛을 발할 때가 온 것이다.
Kinect 에 USB 개발 키트를 연결한 모습
우선 Linux 에서 Kinect 를 사용해서 3차원 스캔을 할 수 있는 것을 찾아보니 pcl 이라는 Point Cloud Library 중에 Kinfu (Kinect Fusion) 이라는 것을 찾을 수 있었다.

구글에서 kinfu 를 찾아 보면 아래 사진처럼 3D 모델을 스캔 할 수 있다는 것을 알 수 있다.
http://codewelt.com/kinect3dscan
허허.. 멋진데???

우선 PCL 을 제공하는 홈페이지를 살펴보고 소스코드를 github 에서 다운로드 했다.

$ cd pcl
$ mkdir build
$ cd build
$ ccmake ..

로 해서 이것저것 옵션을 정해 줬다.

BUILD_CUDA
BUILD_GPU
BUILD_apps
WITH_CUDA
WITH_OPENGL
WITH_OPENNI
WITH_VTK

위 항목들이 Kinfu 를 사용하기 위한 필수 항목 들이다.
cmake 로 빌드를 하고 실행을 하는데 까지는 그리 어렵지 않았다.

그런데!!!! 아뿔싸 Kinfu 가 사용하는 CUDA 라는 것이 Nvidia 그래픽 카드에 특화된 기능이었던 것이다. 허허... 난 5년전에 큰맘먹고 고사양의 PC를 사면서 AMD Radeon 카드를 선택했었는데, 그것이 복병이 될 줄은 상상도 못했다.

해결 방법이 없을까 아무리 찾아봐도 솟아날 구멍이 없었다. 눈물을 머금고 중고 GTX-750Ti 카드를 구매했다. 맘 같아서는 오버워치도 가능한 최신 그래픽 카드를 갖고 싶었지만 집사람한테 등짝 스매싱을 당하지 않으려면 이것이 최선이다.

그래픽 카드를 설치하고 pcl_kinfu_app 을 실행했더니! 대박. 한방에 내 얼굴을 찍었다.
PLY 파일로 저장이 되는데 meshlab 에서 STL 로 변환을 해서 Cura 로 열었다.
Kinfu 로 스캔한 모델을 cura 로 열기
 우와. 대박. 이렇게 쉽게 나를 3D 프린터로 찍을 줄을 몰랐다. 바로 슬라이싱을 하고 프린팅을 걸었다.
Kinect 스캔하고 3D 프린터로 출력한 나
 짜잔. support 를 바닥에 세우고 찍어서 아래는 저렇지만 무척 만족 스럽다. 출력 시간도 15분 밖에 걸리지 않았으니.. 내친김에 딸도 스캔을 하고 바로 출력했다.
Kinect 로 딸도 스캔
이런식이라면 이번 취미생활은 1편으로 모두 마감을 시킬 수 있지 않겠나 싶었는데...

너무 기쁜 나머지 신경을 쓰지 않았던 '디테일' 이 문제가 됐다. 맘을 다잡고 좀 더 선명한 눈코입을 출력해 보고 싶어서 아무리 시도를 해봐도 실패했다. 소스 코드를 수정하며 튜닝을 해 봐도 마찬가지 였다.

한참을 공부를 하고서야 Kinect 의 하드웨어적인 한계를 라는 것을 알았다.
하긴... xbox360 을 산지가 언젠데... 이런 구닥다리로 이정도 하는 것이 얼마인가.. 싶으면서 kinect 는 은퇴를 시켜 주기로 맘 먹었다.

kinect 류의 카메라를 depth 카메라라고 하는데 일전에 OTIS 로봇을 만들기 위해 구매한 Intel Euclid 에도 ZR-300 이라는 depth 카메라가 장착 되어 있다. 이것을 사용해 보려고 하니 Euclid 에 독립적으로 제어되는 카메라를 PC 에서 사용할 방법이 없었다. 그리고 ZR-300 은 Kinect 처럼 원거리 스캔이 주 용도라서 다른 모델을 찾아야 했다.

Realsense 중에 SR-300 이 내 입맛에 가장 맛는 것 같았다. 먹잇감을 찾았으니 다시 한번 중고나라를 뒤지기 시작했다. 오홋.. 뜻이 있는 곳에 길이 있을 지니 .. 딱 저렴한 가격에 SR-300 이 올라와 있었다. 지역이 대전이었는데 마침 집사람 회사 사람 결혼식 때문에 대전 내려갈 일이 있었는데 후다닥 약속을 잡고 다녀왔다.
Intel Realsense
개봉도 하지 않은 SR-300 을 12만원에 업어왔다.

칼이 생겼으니 무를 썰어야지~ 타다닥 타다닥.. 실행을 시켜 봤더니.... 흠. 이번엔 Kinect 가 아니라서 카메라를 열 수 없다는 에러를 뱉어낸다. 산넘어 산이군.

하지만 항상 산을 넘어 카타르시스를 얻는게 일상이니 이번에도 구글링으로 방법을 찾았다.
하하핫!!! 역시 세상은 넓고 능력자들은 넘처난다. 'Add Intel LibRealSense grabber and viewer' 라는 patch 를 적용하면 SR-300 을 PCL 과 같이 사용할 수 있다.

이렇게 하여~~  눈코입이 선명한 내 모델을 얻어 내는데 성공했다.
realsense SR-300 으로 진화한 내 모습
저 위에 kinect 로 스캔한 첫 모델을 보라. window 95 와 win10 의 차이 처럼 느껴지지 않는가.
ㅋㅋㅋㅋㅋ. 흐믓하고 뿌듯하다. 역시 고생뒤에 오는 카타르시스란..


이제 '3D 가족 앨범 만들기' 의 도구가 모두 준비 되었으니 새로운 시리즈를 시작해 볼까 한다.

댓글 없음: