본문 바로가기
IT일반/키넥트

Kinect 키넥트 v2 개발 노트 (Hello World)

by xavi2019 2019. 4. 23.

작성일: 2019년 4월 23일

 

 

역사 속으로 거의 사라졌다가

Kinect Azure로 다시 탄생하게 될 키넥트에 대비하여

 

기존 키넥트v2 공부를 좀 해 봄.

 

v2 로 해보려고 하는데... 문서도 부족하고 있다하더라도 v1 이고,

v2 다 하더라도 따라해봐도 안되고..

 

v1 에서 v2 로 뭐가 이리 바뀐건지.. 

 

좌충우돌중 Hello World는 띄웠으니, 정리 해 봄.

 

 

키넥트를 PC에 아직 연결하지 말고

먼저 MS에서 SDK 2.0 을 설치해야 함.

 

https://www.microsoft.com/en-us/download/details.aspx?id=44561

 

Kinect for Windows SDK 2.0

The Kinect for Windows Software Development Kit (SDK) 2.0 enables developers to create applications that support gesture and voice recognition, using Kinect sensor technology on computers running Windows 8, Windows 8.1, and Windows Embedded Standard 8.

www.microsoft.com

 

 

 

Kinect for Windows SDK 2.0 다운로드 화면

설치하면 아래와 같이 나옵니다.

최근에 추가한 앱에 3개가 뜹니다.

 

 

그리고, USB 3.0 포트에 코드 꽂고 좀 기다려야 함.

(키넥트 전원을 많이 먹는다고 함.)

그러면 드라이버를 자동으로 설치해 줌.

 

사실 이 부분은 어떻게 성공한 건지 잘 모르겠음.

PC 리붓도 여러번 해보고 그랬음.

 

어쩌다 보니 장치관리자에 잡힌거 보니

좀 기다려야 하나 봄.

 

 

장치관리자를 열어봤을 때, 아래와 같이 나오면 설치 성공.

 

 

PC에 연결한다고 자동으로 키넥트가 켜지진 않음

아래의 SDK에서 설치한 프로그램이나

키넥트를 지원하는 프로그램을 실행해야

그때야 켜짐.

 

 

 

SDK 2.0 다운 받으면 '윈도우 시작' 버튼 누르면

아래와 같이 SDK Browser 가 보임.

 

 

 

 

 

Kinect Configuration Verifier 를 실행해 보면 아래와 같이 되면 잘 설치 된 것임.

 

 

 

 

 

 

작업관리자도 확인하면 KinectService가 뜨면 성공

 

 

 

물론 이렇게 되려면,

 

키넥트 기기에 불 들어오고,

가운데에 빨간점 3개가 보이면 됨.

 

 

 

 

 

 

 

 

자 이제 C#으로 Kinect Hello World 만들어 봅시다.

 

Visual Studio 실행해서 아래와 같이 WPF 앱 선택

 

 

 

 

 

참조 - 참조 추가 - 확장 - Microsoft.Kinect 를 추가 해도 되고

 

 

 

 

 

 

 

도구 - NuGet 패키지 관리자 - 패키지 관리자 콘솔 실행해서 

 

 

 

 

 

 

 

아래와 같이 타이핑~~ 하면 자동 설치 됨.

 

PM> Install-Package Microsoft.Kinect

각 패키지는 해당 소유자에 의해 사용이 허가되었습니다. NuGet은 타사 패키지에 대해 책임을 지지 않으며 라이선스를 부여하지도 않습니다. 일부 패키지에는 추가 라이선스에 의해 관리되는 종속성이 포함되어 있을 수 있습니다. 패키지 소스(피드) URL로 이동하여 종속성을 확인하십시오.

패키지 관리자 콘솔 호스트 버전 4.9.3.5777

사용 가능한 모든 NuGet 명령을 보려면 'get-help NuGet'을 입력하십시오.

PM> Install-Package Microsoft.Kinect


'.NETFramework,Version=v4.5.2'을(를) 대상으로 하는 'HelloWorldKinect' 프로젝트에 대한 'Microsoft.Kinect.2.0.1410.19000' 패키지의 종속성 정보를 수집하려는 중
종속성 정보 수집 시간: 24.77 ms
DependencyBehavior가 'Lowest'인 'Microsoft.Kinect.2.0.1410.19000' 패키지의 종속성을 확인하려는 중
종속성 정보 확인 시간: 0 ms
'Microsoft.Kinect.2.0.1410.19000' 패키지 설치 작업을 확인하고 있습니다.
'Microsoft.Kinect.2.0.1410.19000' 패키지 설치 작업을 확인했습니다.
'nuget.org'에서 'Microsoft.Kinect 2.0.1410.19000' 패키지를 검색하는 중입니다.
  GET https://api.nuget.org/v3-flatcontainer/microsoft.kinect/2.0.1410.19000/microsoft.kinect.2.0.1410.19000.nupkg
  OK https://api.nuget.org/v3-flatcontainer/microsoft.kinect/2.0.1410.19000/microsoft.kinect.2.0.1410.19000.nupkg 759밀리초
Microsoft.Kinect 2.0.1410.19000을(를) 설치하는 중입니다.
'C:\Users\vvr\source\repos\HelloWorldKinect\packages' 폴더에 'Microsoft.Kinect.2.0.1410.19000' 패키지를 추가하고 있습니다.
'C:\Users\vvr\source\repos\HelloWorldKinect\packages' 폴더에 'Microsoft.Kinect.2.0.1410.19000' 패키지를 추가했습니다.
'packages.config'에 'Microsoft.Kinect.2.0.1410.19000' 패키지를 추가했습니다.
HelloWorldKinect에 'Microsoft.Kinect 2.0.1410.19000'을(를) 설치했습니다.
Nuget 작업 실행 시간: 2.06 sec
경과 시간: 00:00:03.4198997
PM> 

 

UI 구성 

 

 

 

MainWindow.xaml 에 TextBlock 하나 놓기.

 

Text 에 {Binding TitleText} 라고 지정

<Window x:Class="HelloWorldKinect.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:HelloWorldKinect"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800"  
        Closing="MainWindow_Closing">
    
    <Grid>
        <TextBlock x:Name="textBlock" 
                   Text="{Binding TitleText}" 
                   HorizontalAlignment="Center" 
                   VerticalAlignment="Center"
                   TextAlignment="Center"
                   Margin="0,0,0,0" 
                   TextWrapping="Wrap"
                   FontSize="24"/>
    </Grid>
</Window>

 

 

 

프로그래밍 소스 작성

 

소스코드에 아래와 같이 입력 MainWindow.xaml.cs

 

소스는 너무 쉬워서 설명 생략.

using System.Windows;
using Microsoft.Kinect;
using System.ComponentModel;

namespace HelloWorldKinect
{
    public partial class MainWindow : Window, INotifyPropertyChanged
    {
        private KinectSensor kinect = null;
        private string helloText = null;

        public event PropertyChangedEventHandler PropertyChanged;

        public MainWindow()
        {

            this.kinect = KinectSensor.GetDefault();
            this.kinect.IsAvailableChanged += this.Sensor_IsAvailableChanged;
            
            this.TitleText = this.kinect.IsAvailable ? "Hello Kinect!!!\nKinect가 연결되었습니다." : "Kinect 연결이 안되었습니다.";
            this.DataContext = this;

            InitializeComponent();

            this.kinect.Open();

        } 

        private void Sensor_IsAvailableChanged(object sender, IsAvailableChangedEventArgs e)
        {
            // throw new NotImplementedException();
            this.TitleText = this.kinect.IsAvailable ? "Hello Kinect!!!\nKinect가 연결되었습니다." : "Kinect 연결이 안되었습니다.";
        } 

        // 타이틀 텍스트
        public string TitleText
        {
            get { return this.helloText; }
            set
            {
                if (this.helloText != value)
                {
                    this.helloText = value;
                    if (this.PropertyChanged != null) {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("TitleText"));
                    }
                }
            }
        }

        // 메인 윈도우가 닫힐 경우
        private void MainWindow_Closing(object sender, CancelEventArgs e) {
            if (this.kinect != null) {
                this.kinect.Close();
                this.kinect = null;
            }
        }
    }
}

 

실행해 보면 

 

짜잔~~~!!!

 

 

 

키넥트의 USB 코드를 뽑아보세요.

아래와 같이 나오고,

 

다시 USB를 연결하면 연결되었다고 나올겁니다.

댓글