22
Kinect for Windows SDK 开开开 开开 _aawolf

how to develop apps for Kinect

Embed Size (px)

Citation preview

Page 1: how to develop apps for Kinect

Kinect for Windows SDK开发初体验

马宁 _aawolf

Page 2: how to develop apps for Kinect

“下面的内容非常严肃”

Page 3: how to develop apps for Kinect

八卦一下

Kirsten Price

在亲手击毙了拉登之后……

奥巴马有点烦

小奥的新玩具

Page 4: how to develop apps for Kinect

再重申一遍:“下面的内容非常严肃”

Page 5: how to develop apps for Kinect

Agend

• 什么是 Kinect ?• Kinect 历史• Kinect for Windows SDK 简介• 设置 Kinect 开发环境• Kinect 开发介绍• Kinect 示例

Page 6: how to develop apps for Kinect

What’s is Kinect?

• Kinect 是 XBox 360 的外接体感设备– 动作捕捉– 语音识别

• Kinect 无需借助任何外设进行动作捕捉• 目前只支持人类动作的捕捉• Rare 负责软件开发, Range Camera 技术由

PrimeSense 提供• 同类产品– 任天堂 Wii– Play Station Move

Page 7: how to develop apps for Kinect

Kinect History

• CodeName : Project Natal– 2009 年 E3 公布, 2010 年 10 月上市

• 有史以来销售最快的消费类电子产品– 截止 2011 年 3 月 9 日,销售超过一千万部

• 2011 年 6 月发布 Kinect for Windows SDK• 动作捕捉的机器学习技术获得 2011

MacRobert Award 工程创新大奖

Page 8: how to develop apps for Kinect

技术指标• 输出视频帧率为 30Hz• 8-bit VGA 分辨率 (640 × 480 pixels)• 最佳识别区域 1.2–3.5 m, 扩展区域 0.7–6 m• 可视区域 : 水平 57° 垂直 43°• 最多跟踪 20 个人体节点

Page 9: how to develop apps for Kinect

Kinect for Windows SDK

• 非商业授权,商业授权将在下一个版本中提供

• OS : Windows 7• Visual Studio 2010 Express 以上版本• 支持 C++, C# 和 VB.NET• 主要功能– Raw sensor streams– Skeletal tracking– Advanced audio capabilities

Page 10: how to develop apps for Kinect

Kinect Hardware

Page 11: how to develop apps for Kinect

Setting Up Your Development Environment

• 硬件– Kinect Hardware– AC Adapter/ Power Supply

• 软件– Kinect for Windows SDKhttp://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx – Coding4Fun Kinect Toolkithttp://c4fkinect.codeplex.com/

Page 12: how to develop apps for Kinect

添加引用• 添加引用– Microsoft.Research.Kinect– Coding4Fun.Kinect.Wpf.dll ( 可选 )

• 命名空间– using Microsoft.Research.Kinect.Nui; – using Microsoft.Research.Kinect.Audio; – using Coding4Fun.Kinect.Wpf;

Page 13: how to develop apps for Kinect

初始化 Runtime

• Runtime– 封装一个 Kinect sensor 的功能

• RutimeOptions – 指定 Kinect sensore 能够使用的功能

Runtime nui;nui = new Runtime(); nui.Initialize(RuntimeOptions.UseColor| RuntimeOptions.UseDepth | RuntimeOptions.UseDepthAndPlayerIndex | RuntimeOptions.UseSkeletalTracking);

Page 14: how to develop apps for Kinect

Camera Fundamentals

• VideoFrameReady 事件• ImageFrameReadyEventArgs 参数– ImageFrame.Image 属性: PlanarImage – 使用 Coding4Fun Kinect Toolkit

nui.VideoFrameReady += new EventHandler<ImageFrameReadyEventArgs>(nui_VideoFrameReady);void nui_VideoFrameReady(object sender, ImageFrameReadyEventArgs e) { PlanarImage imageData = e.ImageFrame.Image; image1.Source = BitmapSource.Create(imageData.Width, imageData.Height, 96, 96, PixelFormats.Bgr32, null, imageData.Bits, imageData.Width * imageData.BytesPerPixel); //image1.Source = e.ImageFrame.ToBitmapSource(); }

Page 15: how to develop apps for Kinect

获取 Depth 信息nui.DepthFrameReady += new EventHandler<ImageFrameReadyEventArgs>(nui_DepthFrameReady); nui.DepthStream.Open(ImageStreamType.Depth, 2, ImageResolution.Resolution320x240, ImageType.Depth);

void nui_DepthFrameReady(object sender, ImageFrameReadyEventArgs e) { image2.Source = e.ImageFrame.ToBitmapSource(); }

Page 16: how to develop apps for Kinect

Camera Data

Page 17: how to develop apps for Kinect

Skeletal Tracking Fundamentals (1)

• Kinect 最多可以追踪 20 个骨骼点

• SkeletonFrame– 骨骼帧

• Skeletons– 骨骼点列表

Page 18: how to develop apps for Kinect

Skeleton API

Page 19: how to develop apps for Kinect

Skeletal Tracking Fundamentals (2)nui = new Runtime(); nui.Initialize(RuntimeOptions.UseSkeletalTracking); nui.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady);

void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { SkeletonFrame allSkeletons = e.SkeletonFrame; //get the first tracked skeleton SkeletonData skeleton = (from s in allSkeletons.Skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s).FirstOrDefault(); }

Page 20: how to develop apps for Kinect

Working with Depth DataRuntime nui = new Runtime(); private void Window_Loaded(object sender, RoutedEventArgs e){//UseDepthAndPlayerIndex and UseSkeletalTrackingnui.Initialize(RuntimeOptions.UseDepthAndPlayerIndex | RuntimeOptions.UseSkeletalTracking);//register for eventnui.DepthFrameReady += new EventHandler<ImageFrameReadyEventArgs>(nui_DepthFrameReady);//DepthAndPlayerIndex ImageTypenui.DepthStream.Open(ImageStreamType.Depth, 2, ImageResolution.Resolution320x240, ImageType.DepthAndPlayerIndex); }void nui_DepthFrameReady(object sender, ImageFrameReadyEventArgs e){}

Page 21: how to develop apps for Kinect

Sample Project

• 光剑• 虚拟试衣间• 超级玛丽

Page 22: how to develop apps for Kinect

总结• Kinect 是一种廉价的动作捕捉设备• 有可能成为鼠标之后计算机交互的新时代• 在专业领域和消费者领域均有机会– 专业领域发展会快于消费者领域

• 如何为好的技术寻找成功的应用场景?