67
Kinect 2 セミナー 2014.12.17 初音玲 1

Kinect 2セミナー

Embed Size (px)

Citation preview

Page 1: Kinect 2セミナー

Kinect 2 セミナー2014.12.17 初音玲

1

Page 2: Kinect 2セミナー

セッションの目的とゴール

セッションの目的

Kinect 1とKinect 2の違いを理解する

セッションのゴール

Kinect 2アプリが作れるようになる

2

Page 3: Kinect 2セミナー

自己紹介Microsoft MVP / Oracle ACE / Tokyo Motion Control Network

初音玲twitter:@hatsune_

http://blogs.wankuma.com/hatsune/

3

Page 4: Kinect 2セミナー

自己紹介

仕事略歴

システム企画

インフラ構築

業務アプリ構築

DB設計、構築、各種支援

略歴

Microsoft MVP (2008/04-2015/03)

Oracle ACE (2008/04-:日本で2人目)

@hatsune_

4

Page 5: Kinect 2セミナー

最近の著作

5

Page 6: Kinect 2セミナー

AEDオープンデータプラットフォーム

https://www.facebook.com/AEDSearch

全国のAED情報を一元管理(世界対応済)

オープンデータ無償利用可能【 CC BY 3.0 】

REST/JSONインターフェース県単位一覧、市町村区単位一覧、直近AED検索、周辺AED検索

登録用APIあり(現在は特定アプリにのみ公開し実証実験中)

対応アプリケーション (2014.9.1時点)

AED検索 for Windows 8 / for Windows Phone 8.1

AED検索Web版 (酢酸さん作)

http://aedmap.catchball.co/

6

Page 7: Kinect 2セミナー

アジェンダ

Kinect v2とは

Kinect v2アプリ開発基礎

Kinect v2ハンズオン

Kinect v2データの扱い方

7

Page 8: Kinect 2セミナー

Kinect v2とは

8

Page 9: Kinect 2セミナー

9

IRカメラRGBカメラ

マイクアレイマイクアレイマイクアレイマイクアレイ

IRプロジェクタ

Page 10: Kinect 2セミナー

システム要件

Kinect v1 Kinect v2

OS Windows 7~ Windows 8~

CPU Dual Core 2.66GHz~ Core i7 2.5GHz~

Memory 2GB~ 4GB~

USB USB 2.0 USB 3.0

GPU Direct X 9.0c~ Direct X 11.0~

開発環境 VS2010~ VS2012~

10

Page 11: Kinect 2セミナー

v1.8からの相違点

v1.8 v2.0DP

カラー解像度 640x480 1920x1080

深度データ解像度 320x240 512x424

深度センサー方式 Light Coding Time of Flight

深度センサー測定可能距離

0.8m~4.0m (通常)

0.5m~3.5m (近接)

0.5m~4.5m (モード切替なし)

センサー視野角度(垂直/水平)

57度/43度 70度/60度

スケルトントラッキング 2人 6人

関節データ数 20か所 25か所

複数アプリの同時使用 × ○

手のひらの開閉 △Developer Toolkit ○

11

Page 12: Kinect 2セミナー

接続

対応OS

Windows 8 (x64) / Windows 8.1 (x64)

Windows Embedded Standard 8 (x64)

対応SDK

Kinect for Windows SDK 2.0

12

Kinect 2 PCUSB3

.0

分離ボックス

電源

測定データ

電力

Page 13: Kinect 2セミナー

ソフトウェア構成

新型Kinect

VB.NET

C#

C++

SDKKinect

Service

13

Page 14: Kinect 2セミナー

Kinect SDK v1のデータの流れ

カラーデータ

深度データ SDK v1

ColorFrame

DepthFrame

SkeletonFrame

14

Page 15: Kinect 2セミナー

Kinect SDK v2のデータの流れ

カラーデータ

深度データ SDK v2

ColorFrame

DepthFrame

BodyFrame

BodyIndexFrame

InfraredFrame

LongInfraredFrame

15

Page 16: Kinect 2セミナー

Kinect v1のプログラミングの流れ

Sensor Stream Frame Data

16

Page 17: Kinect 2セミナー

Kinect v2のプログラミングの流れ

Sensor Source ReaderReferen

ceFrame Data

17

Page 18: Kinect 2セミナー

Kinect v2アプリ開発基礎

18

Page 19: Kinect 2セミナー

映像系データ

ColorFrame

ColorFrameReader

ColorFrameSource

19

Page 20: Kinect 2セミナー

デモKinect2ColorSample

20

Page 21: Kinect 2セミナー

距離データ

DepthFrame

DepthFrameReader

DepthFrameSource

21

Page 22: Kinect 2セミナー

デモKinect2DepthSample

22

Page 23: Kinect 2セミナー

骨格データ

Body

BodyFrame

BodyIndex

BodyIndexFrame

23

Page 24: Kinect 2セミナー

Kinectで身長を測ろう!

1.544-(-0.12)

=1.664m

24

Page 25: Kinect 2セミナー

25

ElbowLeft

X=1.0

Y=0.8

Z=2.5

Z=4.5

-Y

+Y

-X

+X

ElbowRight

X=-1.4

Y=0.8

Z=2.5

X軸とY軸の原点はKinect 2の正面

Z=0.5

Page 26: Kinect 2セミナー

3つのボーンの位置関係を判定せよ

26

ShoulderLeft

ElbowLeft

HandLeft

Y-Z判定 X判定

Page 27: Kinect 2セミナー

デモKinect2BodySample

27

Page 28: Kinect 2セミナー

デモKinect2Sample

29

Page 29: Kinect 2セミナー

Kinect v2ハンズオン

30

Page 30: Kinect 2セミナー

チェック

Microsoft Windows 8.1 (x64)

Visual Studio Community 2013

Kinect for Windows SDK v2.0

http://www.microsoft.com/en-

us/kinectforwindows/ ⇒[download]

Page 31: Kinect 2セミナー

KineMissile

Page 32: Kinect 2セミナー

不要なファイルの削除

Page 33: Kinect 2セミナー

3つのフォルダを作成

Models

ViewModels

Views

【Views】画面定義などを記述

【ViewModels】複数のModelをまとめるなど

【Models】KinectやUSB機器と接続するコードを記述

Page 34: Kinect 2セミナー

ViewsフォルダにMainPage.xamlを作成

フォルダ右クリック[追加]-[新しい項目]

Page 35: Kinect 2セミナー

appmanifestの機能の設定

Page 36: Kinect 2セミナー

ここでビルド

Page 37: Kinect 2セミナー

コンパイルエラーの対応

Page 38: Kinect 2セミナー

コンパイルエラーの対応

MainPage

Page 39: Kinect 2セミナー

ソリューションエクスプローラープロジェクト名を右クリック⇒[追加]-[参照]

Kinect for Windows SDK v2への参照設定追加

Page 40: Kinect 2セミナー

メニューバーの[ビルド]-[構成マネージャー]

Kinect SDKはx64専用なので実行時はx64

Visual Studioはx86専用なので編集時はx86

Page 41: Kinect 2セミナー

教材をコピー

Page 42: Kinect 2セミナー

フォルダ右クリック⇒[追加]-[既存の項目]

教材の2ファイルをそれぞれ所定のフォルダに追加

Page 43: Kinect 2セミナー

ここでビルド

Page 44: Kinect 2セミナー

<Grid.RowDefinitions><RowDefinition Height="140"/><RowDefinition Height="*"/>

</Grid.RowDefinitions>

<StackPanel Grid.Row="1"><Grid>

<Viewbox Height="700" Width="1024"><Image Source="{Binding ColorImageElement}" Stretch="UniformToFill" />

</Viewbox>

</Grid></StackPanel>

MainPage.xamlの編集

ここにコードを書く

こう書かれている部分を探す

Page 45: Kinect 2セミナー

<Grid.RowDefinitions><RowDefinition Height="140"/><RowDefinition Height="*"/>

</Grid.RowDefinitions>

<StackPanel Grid.Row="1"><Grid>

<Viewbox Height="700" Width="1024"><Image Source="{Binding ColorImageElement}" Stretch="UniformToFill" />

</Viewbox>

</Grid></StackPanel>

MainPage.xamlの編集

Page 46: Kinect 2セミナー

Private Model As New ViewModels.MainViewModel

Public Sub New()InitializeComponent()Me._navigationHelper = New Common.NavigationHelper(Me)AddHandler Me._navigationHelper.LoadState, AddressOf NavigationHelper_LoadStateAddHandler Me._navigationHelper.SaveState, AddressOf NavigationHelper_SaveState

Me.DataContext = Me.ModelEnd Sub

Private Sub NavigationHelper_LoadState(sender As Object, e As Common.LoadStateEventArgs)Me.Model.KinectConnect()

End Sub

Private Sub NavigationHelper_SaveState(sender As Object, e As Common.SaveStateEventArgs)Me.Model.KinectDisConnect()

End Sub

MainPage.xaml.vbの編集

Page 47: Kinect 2セミナー

ここでビルド

Page 48: Kinect 2セミナー

Kinectをつないでみよう

Page 49: Kinect 2セミナー

ここで実行⇒カラーカメラの画像表示

Page 50: Kinect 2セミナー

<StackPanel Grid.Row="1"><Grid>

<Viewbox Height="700" Width="1024"><Image Source="{Binding ColorImageElement}" Stretch="UniformToFill" />

</Viewbox>

<Viewbox Height="700" Width="1024"><Canvas Name="BodyCanvas" Height="1080" Width="1920"

DataContext="{Binding BodyImageElement}"><Rectangle Stroke="Red"

StrokeThickness="30" Width="200" Height="200"Canvas.Top="{Binding Top}" Canvas.Left="{Binding Left}" />

</Canvas></Viewbox>

</Grid></StackPanel>

MainPage.xamlへの追加編集

Page 51: Kinect 2セミナー

頭部のボーンの取得コード例(KinectModel.vb)

カラー画像とボーンでは座標系が違う

座標をカラー画像に合わせる⇒MapCameraPointToColorSpace

Dim headPos = Me.Kinect.CoordinateMapper.MapCameraPointToColorSpace(born.Joints(JointType.Head).Position)

Me.BodyImageElement = New PosRect With {.Top = headPos.Y - 200 / 2,.Left = headPos.X - 200 / 2}

Page 52: Kinect 2セミナー

ここで実行⇒画像の顔部分に赤い四角を表示

Page 53: Kinect 2セミナー

腕を振り下ろすと機器操作のコード例(KinectModel.vb)

If (born.Joints(JointType.HandLeft).Position.Y > born.Joints(JointType.Head).Position.Y) Then

Me.IsUp = True

ElseIf (born.Joints(JointType.HandLeft).Position.Y < born.Joints(JointType.Head).Position.Y + 10) Then

If (Me.IsUp) Then

'ミサイル発射Me.IsUp = False

End If

End If

Page 54: Kinect 2セミナー

FIN

55

Page 55: Kinect 2セミナー

スタイリッシュなモーションとは

56

Page 56: Kinect 2セミナー

57

ElbowLeft

X=1.0

Y=0.8

Z=2.5

Z=4.5

-Y

+Y

-X

+X

ElbowRight

X=-1.4

Y=0.8

Z=2.5

X軸とY軸の原点はKinect 2の正面

Z=0.5

Page 57: Kinect 2セミナー

3つのボーンの位置関係を判定せよ

58

ShoulderLeft

ElbowLeft

HandLeft

Y-Z判定 X判定

Page 58: Kinect 2セミナー

かっこよく左手を前に出すには?

59

Page 59: Kinect 2セミナー

かっこよく左手を前に出すには?

60

Page 60: Kinect 2セミナー

かっこよく左手を前に出すには?

61

Page 61: Kinect 2セミナー

スタイリッシュモーション対応はスタイリッシュモーション限定ではない

62

スタイリッシュであればあるほどかっこいい出力(たとえば素早く)

普通のときは普通の出力(たとえば遅く)

Page 62: Kinect 2セミナー

より素早い旋回へ

スタイリッシュな入力はスタイリッシュな出力へ

63旋回 信地旋回 超信地旋回

Page 63: Kinect 2セミナー

より素早い旋回へ

どこで判定するのか

手がどれくらい前にでているか?

64旋回 信地旋回 超信地旋回

Page 64: Kinect 2セミナー

より素早い旋回へ

何に対して手が前にどれくらいでている?

左肩からの距離?

65旋回 信地旋回 超信地旋回

体幹からの距離

Page 65: Kinect 2セミナー

まとめ

66

Page 66: Kinect 2セミナー

Kinect 2 SDKを使えば接続は簡単

WPFアプリやストアアプリで作ればかっこいい画面が作れる

もちろんUnityでも考え方は同じ。でも、.NET Frameworkのバージョンが…

かっこいいポーズは特撮/アニメに学ぼう

相対位置で考える。何に対して相対か?

67

Page 67: Kinect 2セミナー

FIN

68