SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
Introduction to Kinect v2
Tsukasa Sugiura
@UnaNancyOwen
Self-Introduction
Tsukasa Sugiura
Microsoft MVP for Kinect for Windows
 @UnaNancyOwen
 http://UnaNancyOwen.com
 t.sugiura0204@gmail.com
(July 2014 - June 2015)
Agenda
 What is Kinect v2
 Specifications
 New Features
 Demo
 Tutorial
Disclaimer
“This is preliminary software and/or hardware and APIs
are preliminary and subject to change.”
(Kinect for Windows v2は暫定的なものであり、ソフトウェア、ハード
ウェア、およびAPIは製品版で変更される可能性があります。)
Kinect for Windows v1 Sensor
MULTI-ARRAY MIC MOTORIZED TILT
3D DEPTH SENSORS
RGB CAMERA
Kinect for Windows v2 Sensor
MULTI-ARRAY MIC
3D DEPTH SENSOR
( IR Camera + IR Emitters )
RGB CAMERA
Kinect for Windows v2 Sensor
Image by iFixit
IR EMITTERS
IR CAMERA
Specifications
Kinect for Windows v1 Kinect for Windows v2
Color 640×480 @ 30fps 1920×1080 @ 30fps
Depth 320×240 @ 30fps 512×424 @ 30fps
Sensor Structured Light
(PrimeSense Light Coding)
Time of Flight
(ToF)
Range 0.8~4.0 m 0.5~4.5 m
Angle of View
Horizontal / Vertical
57 / 43 degree 70 / 60 degree
Microphone Array ◯ ◯
Specifications
Kinect for Windows v1 Kinect for Windows v2
BodyIndex 6 people 6 people
Body 2 people 6 people
Joint 20 joint/people 25 joint/people
Hand State Open / Closed Open / Closed / Lasso
Gesture ☓ ◯
Face ◯
Speech / Beamforming ◯ ◯
Basic Features
 Color
 1920×1080@30fps / 15fps (Lighting Condition)
 RGBA, YUV, BGRA, Bayer, YUY2
Basic Features
 Depth
 512×424@30fps
 500~4500[mm]
 ToF (Time of Flight)
Basic Features
 Infrared / LongExposureInfrared
 512×424@30fps
 16bit (higher 8 bits)
Basic Features
 BodyIndex
 512×424@30fps
 6 people
 Body Area : 0~5, Other Area : 255 (5 < Index)
255
0 1
Basic Features
 Body
 6 people
 25 joint / people (Add Tip, Thumb, Neck)
 Orientation (Quaternion)
 Hand Type (Right, Left),Hand State (Open, Closed, Lasso), Lean (-1.0f~1.0f)
Basic Features
 Audio
 Beamforming (+/-50 degree)
 Speaker Estimation
 Speech Recognition
Application Features
 Gesture
 Gesture Recognition using Machine Learning
 Discrete (detected true/false), Continuous (progress 0.0f~1.0f)
 Learning Classifier Tool “Visual Gesture Builder”
Video by http://youtu.be/-XYoblrnDpg
Application Features
 Face
 Bounding Box, Rotation, Points (Eye, Nose, Mouth Corner)
 Activity, Appearance, Expression
 Activity … Eye Closed, Mouth Open / Moved, Looking Away
 Appearance … Wearing Glasses
 Expression … Happy
Application Features
 HDFace
 For Creating 3D Face Model
 Points (1347), Triangles (2340), Hair Color, Skin Color
 Fitting Face Model
Application Features
 Other
 Kinect Fusion (3D Shape Reconstruction)
 Controls (Assist in implementation of NUI)
Demo
System / Software Requirements
OS * Windows 8, 8.1, Embedded 8, Embedded 8.1 (x64)
CPU Intel Core i7 3.1GHz (or higher)
RAM 4GB (or more)
GPU * DirectX 11 supported
USB * USB 3.0 (Intel or Renesas Host Controller)
Compiler * Visual Studio 2012, 2013 (Supported Express)
Language Native (C++), Managed (C#,VB.NET), WinRT (C#,HTML)
Other Unity Pro (Add-in), Cinder, openFrameworks (wrapper)
Connection
Kinect for Windows v1 Kinect for Windows v2
PCPC
Example Multiple Connection
PCPC PC
Hub
Server
System
Kinect
Driver
Kinect SDK
Application
Kinect
Driver
Kinect SDK
Application
Kinect
Service
Kinect SDK
Application
Kinect SDK
Application
Kinect for Windows v1 Kinect for Windows v2
Tutorial
 Basic Flow of Programming (C++)
Sensor Stream Frame Data
Sensor Source Reader Frame Data
Kinect for Windows SDK v1
Kinect for Windows SDK v2
 Source independent to each Data
(e.g. ColorSource, DepthSource, InfraredSource, BodyIndexSource, BodySource, …)
 Doesn’t depend on each other Source
(e.g. Doesn't need to Depth Source when retrieve Body Data)
Tutorial
 Sensor
Sensor Source Reader Frame Data
// Sensor
IKinectSensor* pSensor;
HRESULT hResult = S_OK;
hResult = GetDefaultKinectSensor( &pSensor );
if( FAILED( hResult ) ){
std::cerr << "Error : GetDefaultKinectSensor" << std::endl;
return -1;
}
hResult = pSensor->Open();
if( FAILED( hResult ) ){
std::cerr << "Error : IKinectSensor::Open()" << std::endl;
return -1;
}
 IKinectSensor
Tutorial
 Source
Sensor Source Reader Frame Data
// Source
I***FrameSource* pSource;
hResult = pSensor->get_***FrameSource( &pSource );
if( FAILED( hResult ) ){
std::cerr << "Error : IKinectSensor::get_FrameSource()" << std::endl;
return -1;
}
 IColorFrameSource
 IDepthFrameSource
 IInfraredFrameSource
 IBodyIndexFrameSource
 IBodyFrameSource
Tutorial
 Reader
Sensor Source Reader Frame Data
// Reader
I***FrameReader* pReader;
hResult = pSource->OpenReader( &pReader );
if( FAILED( hResult ) ){
std::cerr << "Error : IFrameSource::OpenReader()" << std::endl;
return -1;
}
 IColorFrameReader
 IDepthFrameReader
 IInfraredFrameReader
 IBodyIndexFrameReader
 IBodyFrameReader
Tutorial
 Frame
Sensor Source Reader Frame Data
while( 1 ){
// Frame
I***Frame* pFrame = nullptr;
hResult = pReader->AcquireLatestFrame( &pFrame );
if( SUCCEEDED( hResult ) ){
/* Data */
}
SafeRelease( pFrame );
}
 IColorFrame
 IDepthFrame
 IInfraredFrame
 IBodyIndexFrame
 IBodyFrame
Tutorial
 Data (Depth, Infrared, BodyIndex)
Sensor Source Reader Frame Data
while( 1 ){
// Frame
IDepthFrame* pDepthFrame = nullptr;
hResult = pDepthReader->AcquireLatestFrame( &pDepthFrame );
if( SUCCEEDED( hResult ) ){
unsigned int bufferSize = 0;
unsigned short* pBuffer = nullptr;
hResult = pDepthFrame->AccessUnderlyingBuffer( &bufferSize, &pBuffer );
if( SUCCEEDED( hResult ) ){
/* Processing*/
}
}
SafeRelease( pDepthFrame );
}
 Depth, Infrared … unsigned short
 BodyIndex … unsigned char
Tutorial
 Data (Color)
Sensor Source Reader Frame Data
while( 1 ){
// Frame
IColorFrame* pColorFrame = nullptr;
hResult = pColorReader->AcquireLatestFrame( &pColorFrame );
if( SUCCEEDED( hResult ) ){
unsigned int bufferSize = 0;
unsigned char* pBuffer = nullptr;
hResult = pColorFrame->AccessUnderlyingBuffer( &bufferSize, &pBuffer );
if( SUCCEEDED( hResult ) ){
/* Processing*/
}
}
SafeRelease( pColorFrame );
}
 Color … unsigned char
 Default Color Image Format … YUY2
Tutorial
 Data (Color with Converted Format)
Sensor Source Reader Frame Data
unsigned int buffeerSize = width * height * channel * sizeof(unsigned char);
unsigned char* pBuffer = new unsigned char[bufferSize];
while( 1 ){
// Frame
IColorFrame* pColorFrame = nullptr;
hResult = pReader->AcquireLatestFrame( &pColorFrame );
if( SUCCEEDED( hResult ) ){
hResult = pColorFrame->CopyConvertedFrameDataToArray( bufferSize, pBuffer,
ColorImageFormat::ColorImageFormat_Bgra );
if( SUCCEEDED( hResult ) ){
/* Processing */
}
}
SafeRelease( pColorFrame );
}
delete[] pBuffer;
Tutorial
Sensor Source Reader Frame Data
while( 1 ){
IBodyFrame* pFrame = nullptr;
hResult = pBodyReader->AcquireLatestFrame( &pBodyFrame );
if( SUCCEEDED( hResult ) ){
IBody* pBody[BODY_COUNT] = { 0 };
hResult = pBodyFrame->GetAndRefreshBodyData( BODY_COUNT, pBody );
if( SUCCEEDED( hResult ) ){
/* Processing */
}
for( int count = 0; count < BODY_COUNT; count++ ){
SafeRelease( pBody[count] );
}
}
SafeRelease( pBodyFrame );
}
 Data (Body)
Tutorial
Sensor Source Reader Frame Data
for( int count = 0; count < BODY_COUNT; count++ ){
BOOLEAN bTracked = false;
hResult = pBody[count]->get_IsTracked( &bTracked );
if( SUCCEEDED( hResult ) && bTracked ){
Joint joint[JointType::JointType_Count];
hResult = pBody[count]->GetJoints( JointType::JointType_Count, joint );
if( SUCCEEDED( hResult ) ){
for( int type = 0; type < JointType::JointType_Count; type++ ){
if( joint[type].TrackingState != TrackingState::TrackingState_NotTracked ){
CameraSpacePoint cameraSpacePoint = joint[type].Position;
cameraSpacePoint.x; // x (+/- 1.0f)
cameraSpacePoint.y; // y (+/- 1.0f)
cameraSpacePoint.z; // z (500~4500[mm])
}
}
}
}
}
 Data (Joint)
Tutorial
 Coordinate System
 ColorSpace (Coordinate System of the Color Image)
… Color
 DepthSpace (Coordinate System of the Depth Data)
… Depth, Infrared, BodyIndex
 CameraSpace (Coordinate System with the origin located the Depth Sensor)
… Body (Joint)
Tutorial
 Coordinate Mapper
// Coordinate Mapper
ICoordinateMapper* pCoordinateMapper;
hResult = pSensor->get_CoordinateMapper( &pCoordinateMapper );
if( FAILED( hResult ) ){
std::cerr << "Error : IKinectSensor::get_CoordinateMapper()" << std::endl;
return -1;
}
 ICoordinateMapper::Map○○○FrameTo△△△Space()
… Mapping Coordinate System in the Frame
 ICoordinateMapper::Map○○○PointsTo△△△Space()
… Mapping Coordinate System in the Array of Points
 ICoordinateMapper::Map○○○PointTo△△△Space()
… Mapping Coordinate System in the Point
Reference
 Sample Program
 Kinect2Sample | GitHub
https://github.com/UnaNancyOwen/Kinect2Sample
 Article Series
 Introduction to Kinect for Windows v2 | Build Insider
http://www.buildinsider.net/small/kinectv2cpp
 Blog
 Kinect | Summary?Blog
http://unanancyowen.com/?cat=3

Weitere ähnliche Inhalte

Was ist angesagt?

NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
Jubok Kim
 
NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들
Jubok Kim
 

Was ist angesagt? (20)

UE4+ADX2インタラクティブミュージックの実装
UE4+ADX2インタラクティブミュージックの実装UE4+ADX2インタラクティブミュージックの実装
UE4+ADX2インタラクティブミュージックの実装
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
 
ARでVRアバターを表示するシステムを構築しよう
ARでVRアバターを表示するシステムを構築しようARでVRアバターを表示するシステムを構築しよう
ARでVRアバターを表示するシステムを構築しよう
 
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
 
진선웅 유저수만큼다양한섬을만들자 공개용
진선웅 유저수만큼다양한섬을만들자 공개용진선웅 유저수만큼다양한섬을만들자 공개용
진선웅 유저수만큼다양한섬을만들자 공개용
 
Motion Capture Technology Computer Graphics
Motion Capture Technology Computer GraphicsMotion Capture Technology Computer Graphics
Motion Capture Technology Computer Graphics
 
Behavior Tree in Unreal engine 4
Behavior Tree in Unreal engine 4Behavior Tree in Unreal engine 4
Behavior Tree in Unreal engine 4
 
Unityで始めるバーチャルプロダクション
Unityで始めるバーチャルプロダクションUnityで始めるバーチャルプロダクション
Unityで始めるバーチャルプロダクション
 
How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019
How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019
How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019
 
유니티로 flappy brid 만들기(Unity 5.1)
유니티로 flappy brid 만들기(Unity 5.1)유니티로 flappy brid 만들기(Unity 5.1)
유니티로 flappy brid 만들기(Unity 5.1)
 
IsoUnity: A retro-isometric toolkit for Unity
IsoUnity: A retro-isometric toolkit for UnityIsoUnity: A retro-isometric toolkit for Unity
IsoUnity: A retro-isometric toolkit for Unity
 
IEnumerator란 무엇인가?
IEnumerator란 무엇인가?IEnumerator란 무엇인가?
IEnumerator란 무엇인가?
 
Photon For Unity
Photon For Unity Photon For Unity
Photon For Unity
 
Game Design - Lecture 1
Game Design - Lecture 1Game Design - Lecture 1
Game Design - Lecture 1
 
426 lecture3: AR Tracking
426 lecture3: AR Tracking426 lecture3: AR Tracking
426 lecture3: AR Tracking
 
NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들NDC2011 - 절차적 지형과 트렌드의 추적자들
NDC2011 - 절차적 지형과 트렌드의 추적자들
 
若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発
 
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
 
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
 
RenderTextureの正しいα値は?
RenderTextureの正しいα値は?RenderTextureの正しいα値は?
RenderTextureの正しいα値は?
 

Ähnlich wie Kinect v2 Introduction and Tutorial

Accelerating Real Time Video Analytics on a Heterogenous CPU + FPGA Platform
Accelerating Real Time Video Analytics on a Heterogenous CPU + FPGA PlatformAccelerating Real Time Video Analytics on a Heterogenous CPU + FPGA Platform
Accelerating Real Time Video Analytics on a Heterogenous CPU + FPGA Platform
Databricks
 
OWF12/PAUG Conf Days Pro guard optimizer and obfuscator for android, eric l...
OWF12/PAUG Conf Days Pro guard   optimizer and obfuscator for android, eric l...OWF12/PAUG Conf Days Pro guard   optimizer and obfuscator for android, eric l...
OWF12/PAUG Conf Days Pro guard optimizer and obfuscator for android, eric l...
Paris Open Source Summit
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
Remy Sharp
 
Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02
PL dream
 
Android Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NC
Android Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NCAndroid Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NC
Android Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NC
Jim Tochterman
 

Ähnlich wie Kinect v2 Introduction and Tutorial (20)

Becoming a kinect hacker innovator v2
Becoming a kinect hacker innovator v2Becoming a kinect hacker innovator v2
Becoming a kinect hacker innovator v2
 
Ultracode Berlin #2 : Introduction to Perceptual Computing by Sulamita Garcia
Ultracode Berlin #2 : Introduction to Perceptual Computing by Sulamita GarciaUltracode Berlin #2 : Introduction to Perceptual Computing by Sulamita Garcia
Ultracode Berlin #2 : Introduction to Perceptual Computing by Sulamita Garcia
 
Perceptual Computing Workshop à Paris
Perceptual Computing Workshop à ParisPerceptual Computing Workshop à Paris
Perceptual Computing Workshop à Paris
 
Perceptual Computing Workshop in Munich
Perceptual Computing Workshop in MunichPerceptual Computing Workshop in Munich
Perceptual Computing Workshop in Munich
 
第38回 名古屋CV・PRML勉強会 「Kinect v2本の紹介とPCLの概要」
第38回 名古屋CV・PRML勉強会 「Kinect v2本の紹介とPCLの概要」第38回 名古屋CV・PRML勉強会 「Kinect v2本の紹介とPCLの概要」
第38回 名古屋CV・PRML勉強会 「Kinect v2本の紹介とPCLの概要」
 
Accelerating Real Time Video Analytics on a Heterogenous CPU + FPGA Platform
Accelerating Real Time Video Analytics on a Heterogenous CPU + FPGA PlatformAccelerating Real Time Video Analytics on a Heterogenous CPU + FPGA Platform
Accelerating Real Time Video Analytics on a Heterogenous CPU + FPGA Platform
 
OWF12/PAUG Conf Days Pro guard optimizer and obfuscator for android, eric l...
OWF12/PAUG Conf Days Pro guard   optimizer and obfuscator for android, eric l...OWF12/PAUG Conf Days Pro guard   optimizer and obfuscator for android, eric l...
OWF12/PAUG Conf Days Pro guard optimizer and obfuscator for android, eric l...
 
Kinect de-theremin
Kinect de-thereminKinect de-theremin
Kinect de-theremin
 
Android workshop
Android workshopAndroid workshop
Android workshop
 
COSC 426 Lect. 3 -AR Developer Tools
COSC 426 Lect. 3 -AR Developer ToolsCOSC 426 Lect. 3 -AR Developer Tools
COSC 426 Lect. 3 -AR Developer Tools
 
Developing natural user interface applications with real sense devices
Developing natural user interface applications with real sense devicesDeveloping natural user interface applications with real sense devices
Developing natural user interface applications with real sense devices
 
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools
 
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
XebiCon'17 : Faites chauffer les neurones de votre Smartphone avec du Deep Le...
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
 
Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02
 
Programming with RealSense using .NET
Programming with RealSense using .NETProgramming with RealSense using .NET
Programming with RealSense using .NET
 
Manage software dependencies with ioc and aop
Manage software dependencies with ioc and aopManage software dependencies with ioc and aop
Manage software dependencies with ioc and aop
 
Android Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NC
Android Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NCAndroid Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NC
Android Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NC
 
Using Android Things to Detect & Exterminate Reptilians
Using Android Things to Detect & Exterminate ReptiliansUsing Android Things to Detect & Exterminate Reptilians
Using Android Things to Detect & Exterminate Reptilians
 
How Automated Vulnerability Analysis Discovered Hundreds of Android 0-days
How Automated Vulnerability Analysis Discovered Hundreds of Android 0-daysHow Automated Vulnerability Analysis Discovered Hundreds of Android 0-days
How Automated Vulnerability Analysis Discovered Hundreds of Android 0-days
 

Mehr von Tsukasa Sugiura (6)

Azure Kinect DK C/C++ 開発概要(仮)
Azure Kinect DK C/C++ 開発概要(仮)Azure Kinect DK C/C++ 開発概要(仮)
Azure Kinect DK C/C++ 開発概要(仮)
 
OpenCVとPCLでのRealSenseのサポート状況+α
OpenCVとPCLでのRealSenseのサポート状況+αOpenCVとPCLでのRealSenseのサポート状況+α
OpenCVとPCLでのRealSenseのサポート状況+α
 
ViEW2013 「SS-01 画像センサと応用事例の紹介」
ViEW2013 「SS-01 画像センサと応用事例の紹介」ViEW2013 「SS-01 画像センサと応用事例の紹介」
ViEW2013 「SS-01 画像センサと応用事例の紹介」
 
Leap Motion - 1st Review
Leap Motion - 1st ReviewLeap Motion - 1st Review
Leap Motion - 1st Review
 
OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5
 
第2回名古屋CV・PRML勉強会 「Kinectの導入」
第2回名古屋CV・PRML勉強会 「Kinectの導入」第2回名古屋CV・PRML勉強会 「Kinectの導入」
第2回名古屋CV・PRML勉強会 「Kinectの導入」
 

Kürzlich hochgeladen

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Kürzlich hochgeladen (20)

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 

Kinect v2 Introduction and Tutorial

  • 1. Introduction to Kinect v2 Tsukasa Sugiura @UnaNancyOwen
  • 2. Self-Introduction Tsukasa Sugiura Microsoft MVP for Kinect for Windows  @UnaNancyOwen  http://UnaNancyOwen.com  t.sugiura0204@gmail.com (July 2014 - June 2015)
  • 3. Agenda  What is Kinect v2  Specifications  New Features  Demo  Tutorial
  • 4. Disclaimer “This is preliminary software and/or hardware and APIs are preliminary and subject to change.” (Kinect for Windows v2は暫定的なものであり、ソフトウェア、ハード ウェア、およびAPIは製品版で変更される可能性があります。)
  • 5. Kinect for Windows v1 Sensor MULTI-ARRAY MIC MOTORIZED TILT 3D DEPTH SENSORS RGB CAMERA
  • 6. Kinect for Windows v2 Sensor MULTI-ARRAY MIC 3D DEPTH SENSOR ( IR Camera + IR Emitters ) RGB CAMERA
  • 7. Kinect for Windows v2 Sensor Image by iFixit IR EMITTERS IR CAMERA
  • 8. Specifications Kinect for Windows v1 Kinect for Windows v2 Color 640×480 @ 30fps 1920×1080 @ 30fps Depth 320×240 @ 30fps 512×424 @ 30fps Sensor Structured Light (PrimeSense Light Coding) Time of Flight (ToF) Range 0.8~4.0 m 0.5~4.5 m Angle of View Horizontal / Vertical 57 / 43 degree 70 / 60 degree Microphone Array ◯ ◯
  • 9. Specifications Kinect for Windows v1 Kinect for Windows v2 BodyIndex 6 people 6 people Body 2 people 6 people Joint 20 joint/people 25 joint/people Hand State Open / Closed Open / Closed / Lasso Gesture ☓ ◯ Face ◯ Speech / Beamforming ◯ ◯
  • 10. Basic Features  Color  1920×1080@30fps / 15fps (Lighting Condition)  RGBA, YUV, BGRA, Bayer, YUY2
  • 11. Basic Features  Depth  512×424@30fps  500~4500[mm]  ToF (Time of Flight)
  • 12. Basic Features  Infrared / LongExposureInfrared  512×424@30fps  16bit (higher 8 bits)
  • 13. Basic Features  BodyIndex  512×424@30fps  6 people  Body Area : 0~5, Other Area : 255 (5 < Index) 255 0 1
  • 14. Basic Features  Body  6 people  25 joint / people (Add Tip, Thumb, Neck)  Orientation (Quaternion)  Hand Type (Right, Left),Hand State (Open, Closed, Lasso), Lean (-1.0f~1.0f)
  • 15. Basic Features  Audio  Beamforming (+/-50 degree)  Speaker Estimation  Speech Recognition
  • 16. Application Features  Gesture  Gesture Recognition using Machine Learning  Discrete (detected true/false), Continuous (progress 0.0f~1.0f)  Learning Classifier Tool “Visual Gesture Builder” Video by http://youtu.be/-XYoblrnDpg
  • 17. Application Features  Face  Bounding Box, Rotation, Points (Eye, Nose, Mouth Corner)  Activity, Appearance, Expression  Activity … Eye Closed, Mouth Open / Moved, Looking Away  Appearance … Wearing Glasses  Expression … Happy
  • 18. Application Features  HDFace  For Creating 3D Face Model  Points (1347), Triangles (2340), Hair Color, Skin Color  Fitting Face Model
  • 19. Application Features  Other  Kinect Fusion (3D Shape Reconstruction)  Controls (Assist in implementation of NUI)
  • 20. Demo
  • 21. System / Software Requirements OS * Windows 8, 8.1, Embedded 8, Embedded 8.1 (x64) CPU Intel Core i7 3.1GHz (or higher) RAM 4GB (or more) GPU * DirectX 11 supported USB * USB 3.0 (Intel or Renesas Host Controller) Compiler * Visual Studio 2012, 2013 (Supported Express) Language Native (C++), Managed (C#,VB.NET), WinRT (C#,HTML) Other Unity Pro (Add-in), Cinder, openFrameworks (wrapper)
  • 22. Connection Kinect for Windows v1 Kinect for Windows v2 PCPC
  • 24. System Kinect Driver Kinect SDK Application Kinect Driver Kinect SDK Application Kinect Service Kinect SDK Application Kinect SDK Application Kinect for Windows v1 Kinect for Windows v2
  • 25. Tutorial  Basic Flow of Programming (C++) Sensor Stream Frame Data Sensor Source Reader Frame Data Kinect for Windows SDK v1 Kinect for Windows SDK v2  Source independent to each Data (e.g. ColorSource, DepthSource, InfraredSource, BodyIndexSource, BodySource, …)  Doesn’t depend on each other Source (e.g. Doesn't need to Depth Source when retrieve Body Data)
  • 26. Tutorial  Sensor Sensor Source Reader Frame Data // Sensor IKinectSensor* pSensor; HRESULT hResult = S_OK; hResult = GetDefaultKinectSensor( &pSensor ); if( FAILED( hResult ) ){ std::cerr << "Error : GetDefaultKinectSensor" << std::endl; return -1; } hResult = pSensor->Open(); if( FAILED( hResult ) ){ std::cerr << "Error : IKinectSensor::Open()" << std::endl; return -1; }  IKinectSensor
  • 27. Tutorial  Source Sensor Source Reader Frame Data // Source I***FrameSource* pSource; hResult = pSensor->get_***FrameSource( &pSource ); if( FAILED( hResult ) ){ std::cerr << "Error : IKinectSensor::get_FrameSource()" << std::endl; return -1; }  IColorFrameSource  IDepthFrameSource  IInfraredFrameSource  IBodyIndexFrameSource  IBodyFrameSource
  • 28. Tutorial  Reader Sensor Source Reader Frame Data // Reader I***FrameReader* pReader; hResult = pSource->OpenReader( &pReader ); if( FAILED( hResult ) ){ std::cerr << "Error : IFrameSource::OpenReader()" << std::endl; return -1; }  IColorFrameReader  IDepthFrameReader  IInfraredFrameReader  IBodyIndexFrameReader  IBodyFrameReader
  • 29. Tutorial  Frame Sensor Source Reader Frame Data while( 1 ){ // Frame I***Frame* pFrame = nullptr; hResult = pReader->AcquireLatestFrame( &pFrame ); if( SUCCEEDED( hResult ) ){ /* Data */ } SafeRelease( pFrame ); }  IColorFrame  IDepthFrame  IInfraredFrame  IBodyIndexFrame  IBodyFrame
  • 30. Tutorial  Data (Depth, Infrared, BodyIndex) Sensor Source Reader Frame Data while( 1 ){ // Frame IDepthFrame* pDepthFrame = nullptr; hResult = pDepthReader->AcquireLatestFrame( &pDepthFrame ); if( SUCCEEDED( hResult ) ){ unsigned int bufferSize = 0; unsigned short* pBuffer = nullptr; hResult = pDepthFrame->AccessUnderlyingBuffer( &bufferSize, &pBuffer ); if( SUCCEEDED( hResult ) ){ /* Processing*/ } } SafeRelease( pDepthFrame ); }  Depth, Infrared … unsigned short  BodyIndex … unsigned char
  • 31. Tutorial  Data (Color) Sensor Source Reader Frame Data while( 1 ){ // Frame IColorFrame* pColorFrame = nullptr; hResult = pColorReader->AcquireLatestFrame( &pColorFrame ); if( SUCCEEDED( hResult ) ){ unsigned int bufferSize = 0; unsigned char* pBuffer = nullptr; hResult = pColorFrame->AccessUnderlyingBuffer( &bufferSize, &pBuffer ); if( SUCCEEDED( hResult ) ){ /* Processing*/ } } SafeRelease( pColorFrame ); }  Color … unsigned char  Default Color Image Format … YUY2
  • 32. Tutorial  Data (Color with Converted Format) Sensor Source Reader Frame Data unsigned int buffeerSize = width * height * channel * sizeof(unsigned char); unsigned char* pBuffer = new unsigned char[bufferSize]; while( 1 ){ // Frame IColorFrame* pColorFrame = nullptr; hResult = pReader->AcquireLatestFrame( &pColorFrame ); if( SUCCEEDED( hResult ) ){ hResult = pColorFrame->CopyConvertedFrameDataToArray( bufferSize, pBuffer, ColorImageFormat::ColorImageFormat_Bgra ); if( SUCCEEDED( hResult ) ){ /* Processing */ } } SafeRelease( pColorFrame ); } delete[] pBuffer;
  • 33. Tutorial Sensor Source Reader Frame Data while( 1 ){ IBodyFrame* pFrame = nullptr; hResult = pBodyReader->AcquireLatestFrame( &pBodyFrame ); if( SUCCEEDED( hResult ) ){ IBody* pBody[BODY_COUNT] = { 0 }; hResult = pBodyFrame->GetAndRefreshBodyData( BODY_COUNT, pBody ); if( SUCCEEDED( hResult ) ){ /* Processing */ } for( int count = 0; count < BODY_COUNT; count++ ){ SafeRelease( pBody[count] ); } } SafeRelease( pBodyFrame ); }  Data (Body)
  • 34. Tutorial Sensor Source Reader Frame Data for( int count = 0; count < BODY_COUNT; count++ ){ BOOLEAN bTracked = false; hResult = pBody[count]->get_IsTracked( &bTracked ); if( SUCCEEDED( hResult ) && bTracked ){ Joint joint[JointType::JointType_Count]; hResult = pBody[count]->GetJoints( JointType::JointType_Count, joint ); if( SUCCEEDED( hResult ) ){ for( int type = 0; type < JointType::JointType_Count; type++ ){ if( joint[type].TrackingState != TrackingState::TrackingState_NotTracked ){ CameraSpacePoint cameraSpacePoint = joint[type].Position; cameraSpacePoint.x; // x (+/- 1.0f) cameraSpacePoint.y; // y (+/- 1.0f) cameraSpacePoint.z; // z (500~4500[mm]) } } } } }  Data (Joint)
  • 35. Tutorial  Coordinate System  ColorSpace (Coordinate System of the Color Image) … Color  DepthSpace (Coordinate System of the Depth Data) … Depth, Infrared, BodyIndex  CameraSpace (Coordinate System with the origin located the Depth Sensor) … Body (Joint)
  • 36. Tutorial  Coordinate Mapper // Coordinate Mapper ICoordinateMapper* pCoordinateMapper; hResult = pSensor->get_CoordinateMapper( &pCoordinateMapper ); if( FAILED( hResult ) ){ std::cerr << "Error : IKinectSensor::get_CoordinateMapper()" << std::endl; return -1; }  ICoordinateMapper::Map○○○FrameTo△△△Space() … Mapping Coordinate System in the Frame  ICoordinateMapper::Map○○○PointsTo△△△Space() … Mapping Coordinate System in the Array of Points  ICoordinateMapper::Map○○○PointTo△△△Space() … Mapping Coordinate System in the Point
  • 37. Reference  Sample Program  Kinect2Sample | GitHub https://github.com/UnaNancyOwen/Kinect2Sample  Article Series  Introduction to Kinect for Windows v2 | Build Insider http://www.buildinsider.net/small/kinectv2cpp  Blog  Kinect | Summary?Blog http://unanancyowen.com/?cat=3