kinect 2セミナー
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