kinect 2セミナー

Post on 12-Jul-2015

92 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Kinect 2 セミナー2014.12.17 初音玲

1

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

セッションの目的

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

セッションのゴール

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

2

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

初音玲twitter:@hatsune_

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

3

自己紹介

仕事略歴

システム企画

インフラ構築

業務アプリ構築

DB設計、構築、各種支援

略歴

Microsoft MVP (2008/04-2015/03)

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

@hatsune_

4

最近の著作

5

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

アジェンダ

Kinect v2とは

Kinect v2アプリ開発基礎

Kinect v2ハンズオン

Kinect v2データの扱い方

7

Kinect v2とは

8

9

IRカメラRGBカメラ

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

IRプロジェクタ

システム要件

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

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

接続

対応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

分離ボックス

電源

測定データ

電力

ソフトウェア構成

新型Kinect

VB.NET

C#

C++

SDKKinect

Service

13

Kinect SDK v1のデータの流れ

カラーデータ

深度データ SDK v1

ColorFrame

DepthFrame

SkeletonFrame

14

Kinect SDK v2のデータの流れ

カラーデータ

深度データ SDK v2

ColorFrame

DepthFrame

BodyFrame

BodyIndexFrame

InfraredFrame

LongInfraredFrame

15

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

Sensor Stream Frame Data

16

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

Sensor Source ReaderReferen

ceFrame Data

17

Kinect v2アプリ開発基礎

18

映像系データ

ColorFrame

ColorFrameReader

ColorFrameSource

19

デモKinect2ColorSample

20

距離データ

DepthFrame

DepthFrameReader

DepthFrameSource

21

デモKinect2DepthSample

22

骨格データ

Body

BodyFrame

BodyIndex

BodyIndexFrame

23

Kinectで身長を測ろう!

1.544-(-0.12)

=1.664m

24

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

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

26

ShoulderLeft

ElbowLeft

HandLeft

Y-Z判定 X判定

デモKinect2BodySample

27

デモKinect2Sample

29

Kinect v2ハンズオン

30

チェック

Microsoft Windows 8.1 (x64)

Visual Studio Community 2013

Kinect for Windows SDK v2.0

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

us/kinectforwindows/ ⇒[download]

KineMissile

不要なファイルの削除

3つのフォルダを作成

Models

ViewModels

Views

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

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

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

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

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

appmanifestの機能の設定

ここでビルド

コンパイルエラーの対応

コンパイルエラーの対応

MainPage

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

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

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

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

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

教材をコピー

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

教材の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の編集

ここにコードを書く

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

<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の編集

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の編集

ここでビルド

Kinectをつないでみよう

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

<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への追加編集

頭部のボーンの取得コード例(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}

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

腕を振り下ろすと機器操作のコード例(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

FIN

55

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

56

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

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

58

ShoulderLeft

ElbowLeft

HandLeft

Y-Z判定 X判定

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

59

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

60

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

61

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

62

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

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

より素早い旋回へ

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

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

より素早い旋回へ

どこで判定するのか

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

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

より素早い旋回へ

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

左肩からの距離?

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

体幹からの距離

まとめ

66

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

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

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

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

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

67

FIN

68

top related