오늘 테스트 결과물은 Kinect SDK 1.7 에서 제공되는 FaceTrackingVisualization 을 뜯어보고, 나만의 프로젝트로 이식하기 까지다.

 

글의 서두이자 테스트하게 된 이유는,

 

연구실의 박사님께서 얼굴을 트래킹하는 프로그램을 하나 부탁하신게 있어 시작하게 되었다.

 

먼저 조사결과, 얼굴을 robust 하게 tracking 할수 있는 방법은 2가지로 줄일수 있는데,

 

1. FaceAPI

 

2. KinectSDK - FaceTrackLib

 

하지만, FaceAPI는 유료이기때문에.. 패스!

 

Kinect SDK 에서 제공하는 SDK는 무료이기 때문에, 이녀석을 뜯어보고 사용하기로 결정했다.

 

 

 

 

 

일단 FaceTrackingVisualization 에서는 크게 2가지로 나누고 있다.

 

1. MultiFace

 

2. SingleFace

 

하지만 나는 얼굴 하나만 트래킹 하면 되기에 싱글을 뜯어보기로 했다.

 

샘플을 돌려보면 알겠지만, 왼편에 원처럼 생긴곳에 트래킹 얼굴을 따라 아바타가 나타나고, 오른편에는 얼굴을 따라 삼각형 메쉬덩어리들이 얼굴위에 뙇! 나타난다.

 

내가 필요한 부분은 삼각형 메쉬 덩어리들이기때문에, eggavatar 부분은 버리고,

 

키넥트로 부터 영상을 받아오는 부분과, 얼굴을 detect 하는부분, 이렇게 찾아본 결과,

 

KinectSensor = 키넥트에서 영상을 받아오는 부분 (순수 키넥트 영상)

 

SingleFace = 키넥트에서 받아온 영상을 처리하여 얼굴을 찾는 부분

 

Visualize = 삼각형 메쉬를 그려주는 부분

 

이렇게 3가지 부분으로 정리되었다.

 

 

 

 

 

그리고 중요한 점!

 

여기서는 Depth 와 Skeleton Tracking 을 통해 머리와 목을 트래킹 하여 얼굴영역을 트래킹 한다는 사실!

 

그리고 Depth 영상의 Resolution은 320 X 240 이라는 사실!

 

(Color 영상은 640 X 480 이다.)

 

마지막으로 GetClosestHint() 함수를 통해 가장 가까운 사람을 Detect 한다는 사실!

 

 

 

 

다음으로

 

영상을 어떻게 출력해줄것인가..??

 

나는 OpenCV를 사용하여 MFC 의 Picture Control 영역에 뿌려주기 위해 작업을 했다.

 

그리고 하면서 알게 된 결과..

 

여기서 영상을 출력해주기 위해 사용하는 영상 포멧은 IFTImage 이고, 4channel 로 이루어져있다는 사실..

 

 

 

 

 

 

이제 필요한 부분과 필요없는 부분을 골라내서 마무리!

 

대충 결과물은 아래와 같다. (이미지와 영상 참조)

 

(이미지는 얼굴영역을 어떻게 잡나 보여주기위해, mesh를 제거하였다.)

 

개발환경 : Window 7, Kinect SDK 1.7, VS 2010, C++, MFC

 

 

 

 

 

 

 

 

 

 

 

결과.

 

트래킹이 잘된다.

 

하지만 문제점이 있는데,

 

어느정도 가까워지면 트래킹이 끊어진다. (아마도 스켈레톤을 하지 못해서 이지 않을까.. 라는 생각 )

 

그리고 한번씩 인식된 부분이 튄다는점인데..

 

뭐 앞으로 마소 에서 개선하겠지??

 

이제, 내부구조를 조금 더 파해쳐보고, 수확이 있으면 다음번 포스팅에 올릴예정이다.

 

 

 

 

Posted by Tommy™
,

얼마전 외국인 친구로 부터 3Gear System 아냐?? 는 질문을 받았다.

 

그리고 접하게 된 3Gear System

 

내가 연구해보고싶었던 분야가 구현되어 있었던 것이었다.

 

일단 백문이 불여일견

 

 

 

website : http://www.threegear.com/

 

 

 

 

위 사진이 메인 화면이다.

 

여기 들어가면 설명서 및 라이센스 등등 관련 정보가 상세하게 나와있다.

 

그래서 간단히 요약을 하면,

 

 

 

 

시스템은 두대의 키넥트를 가지고 한대만 가지고 있을때의 단점인 한면만 디텍트 하는점을 두대를 이용하여 정합 함으로써 숨겨진 은면을 포함한 모든 부분을 정확하게 트래킹 가능하다는 점이 이 시스템의 큰 특징이다.

 

또 다른 큰 특징은 이 시스템은 3D 모델을 직접 캡쳐하여 모델링 한다는 점인데, 참고로 7가지 정도의 제스쳐를 사용자에 따라 정하여 사용할 수가 있다. 예를 들면 Pointing 제스쳐나 Pinch, Spread, OK 제스쳐 등등을 직접 원하는대로 정의하여 사용 할 수가 있는데, 이는 추후에 직접 테스트 해본 결과를 근거로 결과물을 캡쳐하여 제시할 예정이다.

 

그리고 중요한점은 라이센스인데, 총 3가지 타입의 라이센스가 존재한다.

 

1. 평가판 버전(Evaluation License)

2. 상용버전(Commercial License)

3. 연구 또는 학업을 위한 아카데믹버전(Academic License)

 

평가판 버전을 사용하면 30일 제한이 걸린다. 그리고 상용은 뭐 계속 사용할수 있겠지만, 나는 30일만 사용하기에는 성에 안찼다. 그래서 직접 3Gear System 측에 라이센싱 관련 업무담당자에게 나의 의견을 제시하고, 목적을 제시함으로써 Academic License를 받을 수 있었다. 이는 1년(12Month)짜리 라이센스였으며, 1년간 마음껏 테스트 해볼 수 있는 권한이 주어졌다.

 

하지만, 아쉬운점이 있는데, 그들은 소스코드는 제공하지 않았다. 단지 Release 파일만 제공하고, 튜토리얼을 제공할 뿐, 다른 발전방향은 없었다. 많이 아쉬운 점이었는데, 뭐 어쩌겠는가, 테스트 해보는거에 만족해야지 뭐..

 

어째뜬 다시 본론으로 돌아가서..

 

원래 이 연구의 시초는 Robert Wang으로 부터 시작 되었는데, 그는 MIT 공대에서 컴퓨터비전과 HCI 관련하여 박사과정을 마쳤다. 그리고 그는 웹캠과 컬러패치를 이용한 장갑으로 실시간 핸드트래킹 하는 알고리즘을 개발하여 3Gear System을 만드는데 기초가 되었다고 한다.

 

 

 

Robert Wang : Real-time hand-tracking with a color glove

(Link : http://people.csail.mit.edu/rywang/hand/)

 

 

어째뜬 참으로 매력적인 연구이자 미래를 전망할 수 있는 아주 좋은 선례라고 생각한다.

 

이제 3Gear System을 체험 해보자.

 

Posted by Tommy™
,

원본 : http://blogs.msdn.com/b/kinectforwindows/archive/2013/03/16/kinect-for-windows-announces-new-version-of-sdk-coming-march-18.aspx

 

드디어 학수고대 하던 Kinect SDK 1.7 버전이 업데이트 된다고 한다.

 

뜬 소문에 의하면 1.7버전에는 Kinect Fusion 이 포함되어서 출시가 된다고 하였는데,

 

그것이 실제로 공식적으로 언급이 된것이다.

 

이부분에서는 정말 많은 분들이 Kinect Fusion을 기다리고 있었을거라 생각이 되는데, 나 또한 마찬가지다.

 

Kinect Fusion에는 정말 많은 기술이 집약되어 있는데,

 

가장 큰 특징은 실시간 랜더링이 되어 3D 데이터를 추출 할 수 있고, 이를 통해 물리도 적용이 되어 현실과 가상간의 커다란 연동이 되며, 또한 이를 통해 3D 스케너가 필요가 없어지게 되기 때문이다.

 

 

 

 

이외에도 1.7버전에는 더욱 발전한 개발자 툴킷을 추가 했다고 한다.

 

  • OpenCV and MATLAB Samples to allow developers to build advanced Kinect-enabled applications while using industry standards.
  • Kinect for Windows Code Samples on CodePlex, marking the first time that select Kinect for Windows code samples will be available through an open-source resource, enabling existing and potential partners to explore and develop new scenarios.
  •  

    영상처리나 컴퓨터 비전을 공부하는 사람들은 다 아는 OpenCV 와 MatLab이 있는데, 이를 위한 샘플이 추가 되어 나온다고 한다.

     

    더욱 놀라운 점은 모두다 Open Source라는점!!

     

    정말 대단하다 Microsoft...

     

    알면알수록 더욱 무궁무진한 Kinect, 정말 매력적인 녀석인것만은 틀림없다.

     

    자, 여러분도 함께 1.7 버전으로 가서 Kinect Fusion 한번 구동 해봅시다 ^^

     

    Website : http://www.microsoft.com/en-us/kinectforwindows/

     

     

     

     

    Posted by Tommy™
    ,

    최근 키넥트를 만지면서 적외선 카메라를 통해 영상을 접근해야하는일이 있어 작업을 진행했다.

     

     

     

    방법은 간단하다.

     

     

     

    Kinect SDK 에서 제공해주는 소스코드를 보면 알수 있겠지만,

     

    차이점은 NuiImageStreamOpen()함수내에서

     

    NUI_IMAGE_TYPE_COLOR 대신 NUI_IMAGE_TYPE_COLOR_INFRARED 를 적용 해주면 된다.

     

    다른부분은 전혀 손댈 필요가 없다.

     

    참고로 해상도는 640X480을 사용했다. (1280X960은 동작을 안하더라..)

     

     

     

     

     

     

    [ 테스트 이미지 ]

     

     

     

    하지만, 여기서 신기한점,

     

    키넥트는 무수한 random IR-dot을 뿌리지만, 그중에서도 영역을 9등분하여, 밝은 IR을 중심으로 나뉜다.

     

    그리고 그 점들을 중심으로 연산을 하는데, 각각의 IR-dot끼리의 거리를 통해 영상의 Depth 값을 구할수 있다고 한다. (라고 들었다. 분명..... 하지만 습자지 지식 +_+)

     

     

     

     

     

    키넥트의 적외선 카메라를 통해 본 영상 (원본이미지)

     

     

    키넥트의 적외선 프로젝터(IR-Emitter)를 가리고 본 이미지

     

     

    분명한 차이가 느껴진다.

     

    이전 블로그 글에서도 언급 했지만, 1.6버전에서 이러한 IR-Emitter를 컨트롤 할수 있는 API가 제공이 되었다고 하는데,

     

    아직 찾아보진 않았다.

     

    추후 찾아보고, 찾으면 다시 블로그에 업데이트를 할 예정

     

     

     

     

     

     

     

    그나저나 요즘 시간이 조금 여유가 있어, 나의 여러 산포된 여러 소스코드들을 정리 할 겸, Kinect SDK 1.6버전에서 업데이트 된 추가부분들을 추가 하여, 나만의 새로운 기본 Kinect project를 만들었다.

     

    여기서 알아낸 중요한점.

     

     

     

    RGB 카메라와 적외선 카메라는 동시에 작동불가............

     

     

     

     

    정말 충격과 공포다. 젠장...젠장!!

     

     

    혹시나 나의 블로그 글을 읽으시는 분들은 이러한 일을 겪지 않으시길...;;

     

     

     

     

     

     

     

    Posted by Tommy™
    ,

    오랫만에 키넥트 관련 정보를 업뎃하게 되었네요,

     

    그동안 많은, 정말 많은 일이 있었지만,

     

    뭐 그건.. 궁금하시다면 개인적으로 메일을.. 하핫 ㅋㅋ

     

    어째뜬.

     

     

     

     

     

    오늘의 토픽은..

     

    Kinect SDK 1.6버전을 맛보기 이다. (참고로 2012년 10월 8일 부로 Release 되었음)

     

    일단 이번 업데이트의 주된 내용은..

     

    What's New in version 1.6 of the SDK and the Developer Toolkit

     

    Here's a link to the known issues for this release.

     

    Windows 8 Support

     

    Using the Kinect for Windows SDK, you can develop a Kinect for Windows application for a desktop application in Windows 8.

     

    Visual Studio 2012 Support

     

    The SDK supports development with Visual Studio 2012, including the new .NET Framework 4.5.

     

    Accelerometer Data APIs

     

    Data from the sensor's accelerometer is now exposed in the API. This enables detection of the sensor's orientation.

     

    Extended Depth Data Is Now Available

     

    CopyDepthImagePixelData() now provides details beyond 4 meters; please note that the quality of data degrades with distance. In addition to Extended Depth Data, usability of the Depth Data API has been improved. (No more bit masking is required.)

     

    ☆Color Camera Setting APIs

     

    The Color Camera Settings can now be optimized to your environment.

    • You can now fine-tune white balance, contrast, hue, saturation, and other settings.
    • To see the full list, launch Kinect Explorer from Developer Toolkit Browser and review the Exposure Settings and Color Settings controls for a full list of settings that can be optimized.

     

    More Control over Decoding

     

    New RawBayer Resolutions for ColorImageFormat give you the ability to do your own Bayer to RGB conversions on CPU or GPU.

     

    New Coordinate Space Conversion APIs

     

    There are several new APIs to convert data between coordinate spaces: color, depth, and skeleton. There are two sets of APIs: one for converting individual pixels and the other for converting an entire image frame.

     

    German Language Pack for Speech Recognition

     

    The SDK ships with a German speech recognition language pack that has been optimized for the sensor's microphone array.

     

    Infrared Emitter Control API☆  

     

     

    The sensor's infrared emitter has previously always been on when the sensor is active, which can cause depth detection degradation in a scenario where multiple sensors are observing the same space. There is a new API (KinectSensor.ForceInfraredEmitterOff) for turning the infrared emitter off.

     

    Introducing New Samples! 

    • Basic Interactions-WPF: Demonstrates basic gestures, such as targeting and selecting with a cursor, as well as appropriate feedback mechanisms for an optimal user experience.
    • WPF D3D Interop: Demonstrates DirectX 11 interop with WPF, including full WPF composition of DirectX surfaces.
    • Infrared Basics-WPF, Infrared Basics-D2D: Demonstrates using an infrared stream and displaying an image using depth data.

     

    Kinect Studio 1.6.0

    Kinect Studio has been updated to support the Infrared, RawBayer, Extended Depth Data, and Accelerometer features.

     

    The Infrared Stream Is Now Exposed in the API

     

    The Kinect sensor’s infrared stream is now exposed as a new ColorImageFormat. You can use the infrared stream in many scenarios, such as:
    • Calibrating other color cameras to the Kinect’s depth sensor
    • Capturing grayscale images in low-light situations

     

    Two infrared samples have been added to the toolkit, and you can also try out infrared in KinectExplorer.

    Note that the sensor is not capable of capturing infrared streams and color streams simultaneously. You can, however, capture infrared and depth streams simultaneously.

     

    Support for Virtual Machines

    The Kinect for Windows sensor now works on Windows running in a virtual machine and has been tested with the following VM environments:

    • Microsoft HyperV
    • VMWare
    • Parallels

     

    This greatly expands the utility of the Kinect for Windows SDK, as it can now be used on any machine whose native OS supports running Windows in one of the VM packages listed above. In particular, this enables several developer scenarios, such as certain automated testing approaches.

    Setup and configuration details for using the Kinect with the tested VMs are contained in the Getting Started section of this documentation.

    Note that only one Kinect at a time will work with a given VM, and you may experience lower frame rates on lower-end computers as some computing resources are consumed by the VM itself.

     

    [출처] [SDK업데이트] MS Kinect SDK 1.6 Release~ (키넥트 개발 카페 Open Kinect) |작성자 elt3470

     

     

     

    등등이 있다. (출처는 반드시!!)

     

    하지만 가장 눈에 띄는 특징이 있는데,

     

    - RGB 카메라의 화이트벨런스, 명암, Hue, 채도 등등을 컨트롤 할수 있는 API를 제공

     

    - 적외선 프로젝터 (IR-Emitter)을 컨트롤 할수 있는 API를 제공

     

    등이 나의 관심을 끌었다.

     

    앞으로 진행 할 프로젝트와도 관련이 있는 녀석이라 더욱 반가운 소식이었다.

     

    이제 1.7버전이 나올텐데, 들리는 소문에는 Kinect Fusion이 샘플에 추가되어서 나온다는....

     

    (위 영상은 위에서 언급한 Kinect Fusion)

     

     

    마소(MS)의 이러한 SDK release는 연구 및 개발자들에게 도움을 주는 특효약이 될수도 있지만,

     

    한편으로는 진행하던사람들을 죽여버리는 독약이 될수도 있다는 생각이 드는건 왜일까..??

     

     

     

     

    Posted by Tommy™
    ,