728x90

또 이런 이야기를 하면 필자를 늙은이 취급할 개발자들이 많겠지만, 마우스도 없었던 시절의 컴퓨팅 환경에 비하면 매일 격세지감을 느낀다. 하지만 격세지감을 느끼고 즐길 여유는 어디에도 없다. 왜냐하면 정말 세상은 빠르게 변하고 있기 때문이다. PC가 메인프레임으로부터 컴퓨팅의 자유를 이끌어 냈을 때 세상은 퍼스널 컴퓨팅 세상으로 바뀌었던 것처럼 모바일 혁신은 PC로부터 모빌리티의 자유를 이끌어 낼 수 있었다.

김영욱 http://YoungWook.com |자신의 다양한 대형 프로젝트 경험을 바탕으로 저술 및 강연활동을 하고 있으며, 현재는 한국마이크로소프트에서 기술을 전도하는 에반젤리스트로 활동하고 있다.

인터페이스에도 다양한 혁신이 일어나도 있다. 키보드와 마우스를 넘어서 최근에는 거의 모든 디바이스에서 터치 인터페이스를 찾아볼 수 있다.

터치 인터페이스에서 주목할 점은 그 어느 인터페이스보다도 확산 속도가 빠르다는 점이다. 또 터치 인터페이스는 스마트폰을 넘어 태블릿PC 그리고 최근 영상이 공개된 윈도우의 차기 버전(통칭 윈도우8)에 이르기까지 광범위하게 사용되고 있다.

하지만 최근 마이크로소프트가 발표한 키넥트(Kinect)는 이전에 등장했던 어떤 인터페이스에서도 제시하지 못했던 새로운 차원의 인터페이스를 선보이며 또 한 번의 큰 변화를 예고하고 있다.

게임기에서 윈도우로 넘어가는 키넥트

<화면 1> 마이크로소프트 키넥트

키넥트는 원래 XBox 360에서 게임을 즐기기 위해 출시됐다. 기존 콘솔인 닌텐도나 소니에서 선보였던 손에 센서 뭉치를 들고 하는 방법 대신 키넥트는 사람을 직접 인식하는 혁신적인 방법을 채택했다.

물론 과거에도 사람을 직접 인식하는 여러 가지 기술이 있었다. 하지만 별다른 부가장치를 부착하지 않고 사람을 관절 단위로 인식하는 시도가 상용화된 것은 키넥트가 처음이다.
키넥트는 적외선, RGB, 깊이(Depth) 등 세 가지 센서로 사람의 관절을 정확하게 인식할 뿐만 아니라 마이크를 사용하면 음성도 인식할 수 있다. 추가적으로 키넥트는 사람을 잘 인식하기 위해 받침대와 목 사이 관절에 모터가 설치돼 있어, 사람을 찾아 시선을 조정하는 제법 똑똑한 모습도 보여준다.

그래서일까? 게임 시장에서 키넥트는 상당히 성공하고 있다. 최단기간에 1,000만 대가 팔리면서 기네스북에 ‘가장 짧은 시간에 가장 많이 팔린 전자기기’로 그 이름을 올렸다.

하지만 개발자들과 오덕후들은 키넥트를 게임용도로만 국한시키지 않았다 윈도우를 시작으로 매킨토시, 리눅스, 안드로이드 등 다양한 플랫폼과 키넥트를 연결시키는 ‘오픈 소스 프로젝트’가 등장하더니 로봇이나 모형 헬기를 조정하는 용도부터 장애인을 위한 다양한 프로젝트로 이어지는 등 다양한 아이디어와 키넥트를 결합시키기 시작했다.

사람들의 아이디어가 다양한 형태로 표출되면서 키넥트에 대한 좀 더 체계적이고 적극적인 지원 요구가 빗발쳤다. 이에 마이크로소프트는 키넥트를 XBox 360의 게임용도 외에 PC와 연결해 일어날 수 있는 다양한 시나리오를 직접 지원하는 ‘Kinect SDK for Windows’를 발표하게 됐다.

<화면 2> 휠체어를 인식해서 따라다니는 쇼핑 카터 프로젝트 wi-GO

Kinect SDK for Windows
Kinect SDK for Windows(이하 키넥트 SDK)는 마이크로소프트 연구소에서 발표한 것으로 32 비트와 64 비트 버전 모두 지원되지만, 제공되는 샘플이 32 비트 버전에서만 지원되는 것들이어서 현재로서는 32 비트 버전을 사용할 것을 권장한다. 키넥트 SDK는 키넥트 소프트웨어를 개발하기 위해 세 가지 구성요소를 제공한다.

- 키넥트를 윈도우에 인식시키기 위한 디바이스 드라이버
- 키넥트를 제어하기 위한 API 프레임워크
- 샘플과 문서

키넥트를 이용해 소프트웨어를 개발하기 위해서는 당연히 키넥트가 필요하다. 하지만 키넥트를 받아든 순간 ‘헉’하고 놀라게 된다. 왜냐하면 당연히 USB인줄 알았던 커넥터가 USB 같기도 하고 아닌 것 같기도 한 처음 보는 형태이기 때문이다.

<화면 3> 일반적인 USB 커넥터와 키넥트 커넥터

키넥트를 사용하려면 표준 USB 포트가 제공하는 전력보다 더 많은 전력이 필요하기 때문에 특별한 형태의 커넥터 타입이 필요하게 됐다. 그래서 구형 XBox 360과 PC에서 키넥트를 사용하려면 별도로 전력을 공급할 수 있는 어댑터가 필요하다. 이 어댑터는 시중에서 바로 구입할 수 없고, 마이크로소프트 고객센터로 전화해 신청하면 구입할 수 있다.

<화면 4> 키넥트 전원 어댑터

개발을 위한 하드웨어 준비가 끝났으면 이제 개발환경을 설정할 차례다. 개발환경은 기본적으로 윈도우7과 비주얼 스튜디오가 필요하다.

- 원도우7(x86 혹은 x64)
- Kinect for Xbox 360 센서
- Microsoft Visual Studio 2010
- Microsoft .NET Framework 4.0(Visual Studio 2010과 함께 설치 됨)
- DirectX Software Development Kit June 2010(C++만 필요)
- Microsoft Speech Platform SDK
- Kinect for Windows Runtime Language Pack

여기에 제일 중요한 것이 키넥트 SDK다. 키넥트 SDK는 홈페이지(http://research.microsoft.com/en-us/um/redmond/ projects/kinectsdk/)에서 다운로드 할 수 있으며, 관련 문서들도 추가로 볼 수 있다.

키넥트 SDK를 설치하면 인체를 뼈대로 인식하는 것을 볼 수 있는 Skeletal Viewer와 음성인식 및 간단한 게임을 보여주는 Sample Shape game 그리고 두 가지 완성된 샘플을 볼 수 있다.
특히 Sample Shape game은 인체를 인식하기도 하지만 음성 인식도 가능해서 예를 들어 “Super Big”, “Start”, “Stop” 같은 명령들을 음성으로 직접 내릴 수 있다.

<화면 5> Skeletal Viewer

<화면 6> Sample Shape Game

기본적으로 키넥트를 이용한 애플리케이션 개발을 위해서는 VC++ 혹은 C#, VB 같은 개발 언어를 알아야 한다. 키넥트 SDK를 통해 제공되는 라이브러리에서 인체 구조를 인식하고 몸짓을 분석하는 등의 기능은 NUI Library가 담당한다.

<그림 1> NUI Library

NUILibrary는 키넥트에서 전송되는 이미지와 깊이 그리고 오디오 정보를 취합해서 애플리케이션에서 활용할 수 있는 정보로 전환하는 기능을 가지고 있다. 좀 더 세부적으로 살펴보면 <그림 2>와 같은 아키텍처로 구성돼 있음을 알 수 있다.

<그림 2> 키넥트 아키텍처

키넥트 하드웨어는 USB 기반 기술로 PC와 연결되며, 커널 모드 드라이버로 작성된 키넥트 드라이버가 하단에 자리잡고 있다. 그 위에 카메라와 오디오 스텍이 있고 그 위에 최상위 추상화 레벨에서의 NUI API와 오디오/비디오 컴포넌트가 자리 잡고 있다.

사실 개발자 입장에서는 아키텍처 자체는 그렇게 중요하지 않을 수 있다 하지만 전체적인 그림을 이해하고 넘어가는 것이 좀 더 개발에 탄력을 줄 수 있을 것이다.

NUI Skeleton Tracking
NUI Library에서 제공되는 API 중 NUI Skeleton API가 있다. 이 API는 키넥트 앞에 있는 사람을 최대 두 명까지 뼈대로 인식해 내는 것이다. 단순히 ‘인식한다’고 하면 사람의 형체만 인식하는 것으로 느껴질 수 있지만, 좀 더 정확히 이야기하면 ‘사람의 각 부분을 정확하게 인식해 내는 것’이다.

<그림 3> NUI Skelton API의 인식 부분

NUI Skeleton API는 사람의 주요 부위를 스무 개로 인식하고, 각 부분별로 명칭을 정해놓고 있다. 여기서 나오는 정보를 기반으로 애플리케이션에서의 다양한 반응을 만들어낸다.
뼈대에 관한 정보를 찾아내기 위해 C++에서는 NuiSkeleton GetNext Frame을 사용할 수 있고, C# 등에서는 Skeleton Engine.GetNextFrame을 사용해 각 부분의 상태를 확인할 수 있다.

<화면 7> Active tracking

Kinect SDK for Windows 개발키넥트 SDK는 VC++, C#, VB.NET 등 네이티브 언어와 매니지드 언어를 모두 지원한다. 여기서는 C#을 기준으로 설명해보겠다. 키넥트 SDK를 사용하기 위해서는 Microsoft.Research. Kinect.dll을 참조한다.

<화면 8> Microsoft.Research.Kinect.dll

키넥트 관련 라이브러리에서 Microsoft.Research.Kinect.Nui는 사람을 직접 인식하는 것과 관련된 클래스들이 포함돼 있으며, Microsoft.Research.Kinect.Audio에는 음성 인식과 관련된 클래스들이 포함돼 있다.

<리스트 1> 네임스페이스 설정
using Microsoft.Research.Kinect.Nui;
using Microsoft.Research.Kinect.Audio;
kinectRuntime = new Runtime(); kinectRuntime.Initialize(RuntimeOptions.UseDepthAndPlayerIndex | RuntimeOptions.UseSkeletalTracking | RuntimeOptions.UseColor);


<리스트 1>에서 보면 개발에 필요한 두 개의 네임스페이스를 포함시키며, 키넥트를 사용하기 위해 키넥트 런타임을 생성하고 초기화 시키는 과정을 볼 수 있다.

키넥트 SDK를 설치하고 난 뒤 같이 설치되는 도움말을 보면 생각보다 많은 객체와 내용들로 질릴지 모른다. 좀더 쉽게 접근하려면 Coding4Fun Kinect Toolkit (http://channel9.msdn. com/coding4fun/projects/Coding4Fun-Kinect-Toolkit)을 사용하면 된다. Kinect Took에서는 WPF Extension, WPF Controls, WinForm Extensions, skeletal Extensions 등이 포함돼 있어 개발을 한결 수월하게 진행할 수 있다.

<화면 9> Coding4Fun에 올라온 키넥트 관련 프로젝트들

다른 오픈소스 프로젝트(http://channel9.msdn.com/ coding4fun)에서 진행되는 프로젝트들을 참고하는 것도 흥미로울 것이다. 그 외에도 Kinect Paint, Kinect Mouse 등 다양한 프로젝트가 주는 흥미로운 요소들이 개발 의욕을 부추길지도 모른다.

정리하며
키넥트는 바라보는 사람에 따라서 서로 다른 기대치를 가지고 볼 수 있다. 하지만 필자는 개발자의 눈으로 바라봤을 때 ‘개발자들이 정말 재미있게 가지고 놀 수 있는 장난감’이라고 생각한다. 즐겁고 재미있게 만들려고 고민하면 키넥트와 관련한 다양하고 재미있는 애플리케이션을 만들어 낼 수 있을 것같다.

728x90

+ Recent posts