임베디드디바이스의혁신적인사용자인터페이스구현을위한 Kinect for Windows 1 김현준대리 / MDS테크놀로지 hyunjoon@mdstec.com MDS 테크놀로지에서마이크로소프트윈도우임베디드 OS 기술지원을맡고있다. 마이크로소프트임베디드세미나와교육을통해 윈도우임베디드기술전도사 로서활약하고있다. MDS 테크놀로지홈페이지 : www.mdstec.com 윈도우임베디드솔루션 : www.embedsolution.com 윈도우임베디드개발자커뮤니티 : www.iwecom.co.kr 몇해전영화 마이너리티리포트 에서톰크루즈가손으로영상을환상적으로편집하는장면을보고필자는신선한충격을받은바있다. 그런데이런영화에서나보던일들이현실이되는날이머지않았다. [ 그림 1] 톰크루즈주연영화 마이너리티리포트 54
이제 IT 기술은새로운인터페이스를갖추고혁신적이면서도탁월한경험을우리에게선사한다. 음성인식, 모션인식과같은다양한휴먼인터페이스들이이미사용되고있으며다양한분야에응용되고있다. 이러한추세와함께인간과 IT 기술의새로운교감을가능케하는 Kinect for Windows 에대해서소개해볼까한다. Kinect for Windows 소개 2010년 11 월마이크로소프트는 XBOX-360 게임디바이스의새로운입력장치로 Kinect 센서를출시하였다. 키넥트 (Kinect) 는 키네틱 (Kinetic) 과 커넥트 (Connect) 의합성어로사람의동작을인지하여컴퓨터시스템에연결하는장치를의미한다. 키보드, 마우스, 조이스틱같은입력장치를떠나서사람의움직임을실시간으로감지하고게임컨텐츠에연결하여지금껏경험하지못했던획기적인게임환경을제공하였다. 이러한새로운인터페이스는전세계적으로관심을받아 XBOX-360 Kinect 은가장짧은시간에가장많이팔린디바이스로기네스북에기록되었다. Kinect 센서를다양한분야에적용하려는시도로마이크로소프트는 2012년 2월, 게임용도가아닌임베디드기기에서사용될수있는상업용버전인 Kinect for Windows 를 출시하였고동시에 Windows 기반임베디드기기에 Kinect 센서디바이스를쉽게사용할수있도록 Kinect for Windows SDK 도출시하였다. 이로써 Kinect for Windows는디지털사이니지, 키오스크, 스마트TV, 의료기기등최신 IT 기기의차세대인터페이스로주목받고있다. Kinect 센서의구성과원리 Kinect 센서는 [ 그림 3] 와같이 Color(RGB) 카메라, Depth(3D) 센서, 4개의마이크로폰어레이그리고센서를상하로움직일수있도록틸트모터등으로구성되어있다. [ 그림 3] Kinect 센서의구성 [ 그림 4] 은주요기능인모션인식을위해서사용되는영상센서들이다. [ 그림 2] : Kinect 센서를이용한프리젠테이션 [ 그림 4] Kinect 센서의주요영상센서 55
Kinect 센서의핵심기능인뎁스 (Depth) 센서는단색 CMOS 센서와적외선레이저빔프로젝터로구성된다. [ 그림 5] 와같이적외선레이저빔이조사되면, 반사된레이저빔포인트를 CMOS 센서가받아서각픽셀당거리가측정되고이들데이터를이미지프로세서가처리하여 [ 그림 7] 은 Kinect 센서가출력한일반 RGB 영상과뎁스 (Depth) 영상을나타낸다. 또한 [ 그림 8] 과같이 4개의마이크로폰을이용하여음성인식을위한 Echo Cancellation, Sound Position Tracking 등의기능도제공한다. Kinect 센서앞의사용자를인식한다. [ 그림 8] Kinect 센서의마이크로폰어레이 [ 그림 5] Kinect 센서의적외선레이저빔조사 Kinect 센서 Viewing angle Mechanized Tilt range (vertical) Frame rate (depth & color stream) Default resolution, depth stream Default resolution, color stream Audio format Audio input characteristics 설명수직 43, 수평 57 ±27 30 Frames Per Second VGA (640x480) VGA (640x480) 16-kHz, 16-bit Mono PCM 24-bit analog-to-digital converter (ADC) [ 표 1] Kinect 센서사양 XBOX-360용 Kinect 센서와다르게 Kinect for Windows 센서는근거리 (Near Range) 모드를지원하고 Skeletal Tracking과음성인식기능을개선하기위해펌웨어가업그레이드되었다. [ 그림 6] 뎁스 (Depth) 영상처리원리 (Primesense 에서발췌 ) [ 그림 9] Kinect 센서의인식범위 [ 그림 7] 일반 RGB 영상과 3D 뎁스 (Depth) 영상 [ 그림 9] 는 XBOX-360 Kinect 센서의디폴트 (Default) 56
임베디드디바이스의혁신적인사용자인터페이스구현을위한 Kinect for Windows 1 범위 (Range) 와 Kinect for Windows 센서의근거리 (Near) 범위의차이점을보여주고있다. Kinect for Windows SDK Kinect for Windows 센서를 Windows 기반임베디드 기기에사용하려면해당디바이스드라이버와 SDK를설치해야한다. www.microsoft.com/en-us/kinectforwin dows/develop/new.aspx에서 SDK 및관련자료들을다운로드받을수있으며 SDK 설치과정중 Kinect 센서에대한디바이스드라이버가자동으로설치된다. 현재 Kinect for Windows 센서와 SDK는 [ 표 2] 와같은환경에서상업적인용도로사용될수있다. [ 그림 10] Kinect 센서와 NUI(Natural User Interface) API 지원운영체제 (OS) 및아키텍처하드웨어개발소프트웨어 - Windows 7 (x86, 64bit) - Windows Embedded Standard 7 - Windows Embedded Enterprise (Win7 Pro/Ultimate for Embedded) - 32bit 또는 64bit x86프로세서. - Dual core, 2.66GHz 이상. - USB 2.0 이상. - 2GB RAM - Direct X 9.0이상지원하는그래픽환경. - Microsoft Visual Studio 2010 Pro 이상. (Visual Studio 2010 express가능 ) -.NET Framework 4.0 - MS Speech Platform - SDK ver 11 ( 음성인식 ) [ 그림 11] Kinect for Windows SDK 의구조 NUI API는 Kinect 센서의핵심데이터인 Color Image Data와 3D 뎁스 (Depth) 이미지데이터를응용프로그램에제공하는것은물론이데이터를기반으로센서가인지한사용자의골격 (Skeleton) 정보도제공한다. [ 표 2] Kinect for Windows 의요구환경 Kinect for Windows SDK의설치가완료되면 Microsoft Kinect for Windows SDK Sample Browser 를통해서각종샘플코드들과문서들을다운로드받아확인할수있다. 이 SDK를통해서 Managed Code인 VB/C# 과 Native Code인 C++(Windows API) 으로응용프로그램을개발할수있으며, Kinect 센서로부터데이터를가져오거나제어하는데사용되는 NUI(Natural User Interface) API를사용할수있다. [ 그림 12] 사용자의 Skeleton Tracking 영상 Kinect 센서의영상 Stream Data Stream Data 란연속적으로제공되는정적이미지프레 57
임이라고볼수있다. 응용프로그램에서 NUI API를사용하여센서가제공하는영상데이터에대한 Stream을 Open 하는데이때 Stream Data에대한화상도 (Resolution), 이미지타입, 저장할버퍼사이즈등세부적인파라메터와함께 Stream이오픈된다. 컬러이미지데이터 (Color Image Data) 는최대 640 480해상도, 30FPS, 32bit RGB 영상데이터로출력되지만, YUV Color 형태로 Stream을 Open 할경우 640 480해상도와함께 15FPS만가능하다. 뎁스 (Depth) 이미지데이터는사용자의움직임을트래킹하거나배경내사물을감지하는등다양한기능을구현하는용도로사용된다. 640 480, 320 240, 80 60 해상도를지원하지만일반적으로 320 240 해상도와함께 16bit 뎁스 (Depth) 이미지데이터를출력한다. 16bit 뎁스 (Depth) 이미지데이터는 13 비트의거리데이터와 3비트의 Player ID로구성되었으며, 이중 13비트의최상위비트 (Bit) 는사용되지않는다. 밀리미터단위의거리데이타를제공하며, Default Range Mode일때최소 800mm 에서최대 4000mm 범위의사물에대한거리를감지할수있다. 사물이너무가까이있거나멀경우뎁스 (Depth) Data 는 0 으로표시된다. 사물이사람이고 Kinect 센서가인 지하였다면나머지 3bit는 Player ID로표시된다.(0 : no player, 1 : skeleton 0 ) Kinect 센서와 NUI API는두개의이미지데이터외센서가인식한사람에대한골격정보를제공한다. 현재 Kinect 센서는최대 6명을동시에인식하고최대 2명에대한골격정보를동시에제공한다. 인체를구성하는주요골격 20 개에대한위치데이터를 Skeleton Positions 라고하는포인터로제공한다. Skeleton Position Data는뎁스 (Depth) 이미지와다르게미터단위로제공되며 x, y, z 좌표로각골격의위치정보를제공한다. NUI API에는인식된골격위치정보를뎁스 (Depth) 이미지데이터와일치시키는 API가제공된다. 이를이용하면 Windows 화면의뎁스 (Depth) 영상에골격들을표시할수있거나다른캐릭터모델을입혀아바타를구현할수있다. [ 그림 14] Kinect for Windows 의 Sample Skeleton Viewer [ 그림 13] Kinect 센서가인식한인체골격 아직은 Kinect for Windows에대한자료와디자인사례가많지않다. 하지만 XBOX-360 게임에서보여주듯, 사람과 IT 기기간의교감을형성하는 Kinect와같은인터페이스가차세대임베디드기기개발의차별화를위한핵심기술로부상할것이라는사실을믿어의심치않는다. 다음기고에서는 Kinect 센서로부터데이터를가져오거나제어하는데사용되는 NUI API에대한좀더자세한내용과샘플코드 (Sample Code) 를확인해보려고한다. 58