Upload
csdnmobile
View
6.899
Download
3
Embed Size (px)
Citation preview
Kinect for Windows SDK开发初体验
马宁 _aawolf
“下面的内容非常严肃”
八卦一下
Kirsten Price
在亲手击毙了拉登之后……
奥巴马有点烦
小奥的新玩具
再重申一遍:“下面的内容非常严肃”
Agend
• 什么是 Kinect ?• Kinect 历史• Kinect for Windows SDK 简介• 设置 Kinect 开发环境• Kinect 开发介绍• Kinect 示例
What’s is Kinect?
• Kinect 是 XBox 360 的外接体感设备– 动作捕捉– 语音识别
• Kinect 无需借助任何外设进行动作捕捉• 目前只支持人类动作的捕捉• Rare 负责软件开发, Range Camera 技术由
PrimeSense 提供• 同类产品– 任天堂 Wii– Play Station Move
Kinect History
• CodeName : Project Natal– 2009 年 E3 公布, 2010 年 10 月上市
• 有史以来销售最快的消费类电子产品– 截止 2011 年 3 月 9 日,销售超过一千万部
• 2011 年 6 月发布 Kinect for Windows SDK• 动作捕捉的机器学习技术获得 2011
MacRobert Award 工程创新大奖
技术指标• 输出视频帧率为 30Hz• 8-bit VGA 分辨率 (640 × 480 pixels)• 最佳识别区域 1.2–3.5 m, 扩展区域 0.7–6 m• 可视区域 : 水平 57° 垂直 43°• 最多跟踪 20 个人体节点
Kinect for Windows SDK
• 非商业授权,商业授权将在下一个版本中提供
• OS : Windows 7• Visual Studio 2010 Express 以上版本• 支持 C++, C# 和 VB.NET• 主要功能– Raw sensor streams– Skeletal tracking– Advanced audio capabilities
Kinect Hardware
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/
添加引用• 添加引用– Microsoft.Research.Kinect– Coding4Fun.Kinect.Wpf.dll ( 可选 )
• 命名空间– using Microsoft.Research.Kinect.Nui; – using Microsoft.Research.Kinect.Audio; – using Coding4Fun.Kinect.Wpf;
初始化 Runtime
• Runtime– 封装一个 Kinect sensor 的功能
• RutimeOptions – 指定 Kinect sensore 能够使用的功能
Runtime nui;nui = new Runtime(); nui.Initialize(RuntimeOptions.UseColor| RuntimeOptions.UseDepth | RuntimeOptions.UseDepthAndPlayerIndex | RuntimeOptions.UseSkeletalTracking);
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(); }
获取 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(); }
Camera Data
Skeletal Tracking Fundamentals (1)
• Kinect 最多可以追踪 20 个骨骼点
• SkeletonFrame– 骨骼帧
• Skeletons– 骨骼点列表
Skeleton API
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(); }
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){}
Sample Project
• 光剑• 虚拟试衣间• 超级玛丽
总结• Kinect 是一种廉价的动作捕捉设备• 有可能成为鼠标之后计算机交互的新时代• 在专业领域和消费者领域均有机会– 专业领域发展会快于消费者领域
• 如何为好的技术寻找成功的应用场景?