yangyang

a .NET Developer

All Posts


Kinect骨骼数据与彩色影像和深度影像的对齐

很多同学留言问怎么讲两种影像数据显示在同一张屏幕上,也就是说怎么将骨骼数据叠加到彩色影像或者深度影像上,将彩色影像叠加到深度影像就不讨论了,因为没啥意义。 这个问题其实很简单,因为在Kinect Developer Toolkit中很多例子中又可以看到这两种类型的叠加,而源代码也都有,这也是为啥我不想将这个的原因。怎么将这三种影像显示在屏幕上我在第三讲:基础知识 下、第四讲:景深数据处理 上和 第六讲:骨骼追踪基础 上 都分别讲过。要点是, 在显示彩色影像和深度影像时最好使用WriteableBitmap对象; 要想将骨骼数据影像和深度影像,或者彩色影像叠加到一起,首先要确定深度影像的分辨率和大小,为了方便,这里将深度影像数据和彩色影像数据都采用640x480Fps30的格式,同时将Grid的大小也设置为640*480。 要将骨骼数据和深度影像数据叠加,需要将关 …

Kinect SDK Kinect

使用Kinect测量身高

使用Kinect测量身高的方法其实有很多种: 第一种方式是使用Kinect的视场角以及结合一些三角形几何运算,就可以大致测量出物体的高度,这一点在之前介绍深度影像处理的时候有提到。 第二种方式是使用Kinect骨骼追踪提供的20个关节点的相关坐标,在根据一定的算法测量出人体的身高。在Channel9上面的这个例子的一个分享,在这里拿过来和大家分享一下。在这里,根据臂展和身高有相似的关系,我对这个例子做了一点扩展,计算臂展来粗略计算身高,用臂展计算身高其实有个好处就是既可以使用正常模式(Normal model,20个关节点),可以使用坐姿模式(Seat model,10 个关节点),这样您坐着就可以测量身高,不过精度不保证哈。这里只是提供这么一个思路。 一. 计算身高的算法 Kinect获取的骨骼数据包含20个关节点的X,Y,Z坐标信息。您可能会想, …

Kinect SDK Kinect

深入理解Kinect for Windows开发

----微软Build2012大会:Kinect for Windows Programming Deep Dive 这个周末看了两天的微软Build 2012大会,真的是一次盛会,上面有很多的演讲主题,都是微软相关技术和产品的最新动态,我比较关注.NET、WPF、Office及Kinect相关开发,上面的演讲视频和PPT都可以下载,个人觉得比较精彩的有The Evolution of .NET ,回顾了微软推出.NET以来的历次开发者大会推出的新版本和新特性,里面还有10多年前比尔盖子老师在开发者大会上宣布.NET战略时的演讲视频,不觉得感叹岁月是把杀猪刀啊。 What's New for Developers in Office 2 …

Kinect SDK Kinect Kinect FaceTracking Kinect Skeleton Tracking Kinect Fusion

Reactive Extensions入门

前面我写过7篇文章粗略的介绍了一下Rx及其方方面面。Rx是一个好东西不然我也不会费这么大的力气来写这些东西。本文打算初略的讲一下传统异步编程方法的缺点,以及为啥Rx能够给异步编程带来新的体验。最后我听译了一篇关于Reactive Extension的非常好的一篇演讲,并制作了中英文字幕。希望大家看完这篇文章之后能够对Reactive Extension能够有比较深的印象,并在实际编程中遇到比较纠结的异步编程问题了能够想到Rx。 1. 传统异步编程存在的问题 异步编程比较困难,这一点老赵讲过很多次,在这里就我的理解有以下几点。 1.1 异步编程的方式太多,缺乏统一性 在.NET下面做异步编程其实有很多种选择的,如果基于事件的异步编程,经典的Begin/End异步方法对,以及针对以上两种存在的问题改进的CCR和AsyncEnumerator,还有F#中的异步工作 …

Reactive Extensions Rx .NET

Kinect for Windows SDK开发入门(十六) 面部追踪上

在前面一篇文章中,我们使用Emgu来识别人的脸部,当时的Kinect SDK版本是1.0,五月份发布1.5版本的SDK之后,我们就能够直接使用Kinect实现人脸识别,而不需要借助第三方类库。 SDK1.5中新增了人脸识别类库:Microsoft.Kinect.Toolkit.FaceTracking使得在Kinect中进行人脸识别变得简单,该类库的源代码也在Developer Toolkit中。在Developer Toolkit中也自带人脸识别的例子,您也可以打开运行或者查看源代码。 本文使用一个简单的例子来演示如何使用Kinect中的面部追踪功能。本例子实现的简单功能是使用WPF来绘制一个简单的人脸图,然后使用面部追踪来让这个图动起来,这里面只使用了Kinect中获取面部的一些简单的信息,用来演示如何使用Kinect来进行面部追踪,所以您如果想要实现 …

Kinect SDK Kinect Kinect FaceTracking

Kinect for Windows SDK 1.6的改进及新特性

昨天晚些时候,微软发布了Kinect for Windows SDK 1.6版本,该版本距五月份发布的1.5版本已经有好几个月了。1.6版本对1.5版本进行了一些改进和更新。不过最值得一提的是,Kinect for Windows Sensor首次在中国发售,现在已经可以在京东上订购了,Kinect 逐渐成为微软硬件产品线中最重要的一员。 下面来看看SDK 1.6的改进,翻译自发布说明,翻译的不好的话,您已可以直接到msdn上查看: 1. SDK 1.6 的改进 支持Windows 8 Kinect SDK1.6,可以开发Windows 8桌面应用程序 支持Visual Studio 2012 Kinect SDK1.6支持VS2012,包括最新的.NET Framework 4.5 …

Kinect SDK

.NET中的Lambda表达式与匿名方法

在C#2中,由于有了方法组,匿名方法,类型的协变和抗变,使得运用delegate变得很容易,在注册事件时代码变得简单易读,但是在C# 2中,代码仍然有点臃肿,大块的匿名方法会降低代码的可读性,一般我们不会在一条语句中写多个匿名方法。 LINQ产生的一个目的是能够方便的对数据进行管道操作而不失语义。LINQ能够表达对数据进行的各种逻辑操作,LINQ执行时,这些操作实际上都是通过委托来实现的。使用LINQ to Object操作数据时,一条语句中包含多个委托是很常见的,C# 3中的Lambda表达式正式这幕后的功臣,它不仅使得我们能够在一条代码中写多个委托,而且不会丧失代码的可读性。相信用过LINQ的人应该都有这样的体会。 在很多方面Lambda表达式可以看成是C#2中匿名方法的演变。他们俩的功能是一样的,都使得代码更加清晰和紧凑。另外,Lambda表达 …

Lambda Expression Anonymous Method Delegate

使用Kinect 进行图片浏览

相信大家都有过在多媒体触摸设备如手机,平板电脑上进行照片浏览,放大、缩小、旋转等操作的经历。前面有篇文章也介绍了如何搭建开发这类程序的模拟环境。在了解了Kinect SDK 后我们就可以使用无接触的方式隔空的来进行这类操作了。这是不是有点像Minority Report里面的感觉。 下面我们就来实现一个简单的使用Kinect来进行图片浏览的小程序。 一、总体思路 首先运用WPF编写一个简单的支持多点触控的图片浏览程序,这方面您可以参看MSDN上的这篇文章,上面有代码,可能需要翻墙才能下载。中文的话,您可以参考Gnie同学关于在WPF上面多点触屏(MultiTouch)应用程序的相关文章,这些是基础。 然后,将从Kinect骨骼信息中提取到的双手的位置信息,模拟为触摸屏上的点击,这个有点麻烦,也是本文的重点。这方面我参考了 …

Kinect SDK Kinect

Reactive Extensions入门(6):使用Rx进行单元测试

Rx本身就是一个功能强大的测试框架。本文将介绍如何使用Rx模拟异步方法调用返回预定的值来辅助针对一步方法调用的单元测试。Rx可以模拟经过一段预定时间返回结果的异步方法,从而简化了异步处理方法的测试。Rx也可以模拟异步方法返回错误的场景,使得代码测试可以覆盖多有的用例。本文将介绍Rx中的TestSheduler方法,他可以模拟耗时的异步操作,但是能在测试的时候能够立即执行。 1. 模拟异步方法 开发者可能会对测试与时间有关的异步方法会感到头疼。与测试同步方法不同,异步方法不仅需要返回需要的值,而且还要能够模拟出方法耗时以及延迟的效果。 有很多工具能够用来测试同步方法,但是测试异步方法则需要一定的技巧。我们可以使用Thread.Sleep()来模拟需要长时间执行的方法,但是该方法能用来测试的时间用例非常粗糙,在有些对执行时间要求比较高的场景,Thread. …

Reactive Extensions Rx Observable Scheduler UnitTest

Reactive Extensions入门(5):ReactiveUI MVVM框架

从前面几篇文章可以了解到,Rx作为LINQ的一种扩展,极大地简化了异步编程。但Rx的用法不仅如此,由于其可高的扩展性,在其他很多方面也有所应用。 在前面例子中,我们使用代码和UI界面上的元素打交道,这种方式在传统的Winfom编程中很常见,但是在基于XAML构造的界面这种应用程序中,这样显得不是非常友好,XAML中声明式编程可以使得程序更加简洁,传统的方式没有利用到XAML中强大的绑定功能。之前,我们大量使用了诸如Observable.FromEvent这样的操作,然后来使用后台代码来设置控件的属性,这都是传统的编程方式。 当然,对于规模较小的程序来说,这种方式无可厚非。这种方式的最大的缺点在于,对于测试很不友好,要测试这样的应用程序很困难,我们需要创建UI控件并模拟输入,这样效率不高而且不可靠。另一个缺点是,这种方式使得代码高度耦合而且脆弱。针对这些问题,一种 …

Reactive Extensions Rx Observable ReactiveUI MVVM