Kinect for Windows SDK开发入门(十四)进阶指引 上

前面十三篇文章介绍了Kinect SDK开发中的各个方面的最基础的知识。正如本系列博闻标题那样,这些知识只是Kinect for windows SDK开发的入门知识。本文将会介绍Kinect进阶开发需要了解一些知识(beyond the basic)。

读者可能会注意到,在学习了前面十三篇文章中关于Kinect开发的方方面面,如影像数据流、景深摄像机、骨骼追踪、麦克风阵列、语音识别等这些知识后,离开发出一些我们在网上看到的那些具有良好用户体验的Kinect应用程序还是显得捉襟见肘。Kinect SDK在某种意义上只是提供了一些其它Kinect类库的相同或者更好的功能。为了进一步提高Kinect for Windows应用程序的应用体验,我们需要了解一些其他的和Kinect有关的开发技术和类库。Kinect的真正应用潜力是和其他技术进行整合。

本文将会介绍一些第三方类库如何来帮助处理Kinect传感器提供的数据。使用不同的技术进行Kinect开发,可以发掘出Kinect应用的强大功能。另一方面如果不使用这些为了特定处理目的而开发的一些类库,而是自己实现这些逻辑的话,代码可能会比较混乱和不稳定。本文只是简单的介绍这些第三方类库并给以适当的引导。Kinect开发最大的困难不是什么技术,而是知道什么样技术能够被用到Kinect开发中。一旦了解了什么技术能够使用,Kinect可能开发的应用就会出现巨大的潜力。

本文中介绍的一些技术可能覆盖面不够广,有可能有些类库很重要但是本文没有涉及到,Kinect开发方面的技术变化的非常快,这一点也难以避免,欢迎大家能够补充。但是通过介绍一些基本的帮助类库,图像处理类库等,希望大家了解到这些技术的重要性以及对Kinect开发的作用。可能随着技术的发展,这些类库可能有些变化,但是相关的技术领域相信还是一样的,本文只是起到一个抛砖引玉的作用。

本文及下篇文章将会介绍几个有用的工具及类库,包括Coding4Fun Kinect Toolkit,Emgu(OpenCV计算机视觉库的C#版本)和Blender。只是非常简单的介绍了Unity 3D游戏框架,FAAST手势识别中间件以及Microsoft Robotics Developer Studio。这些知识如果大家感兴趣的话可能要花一定的精力去了解和掌握,这里只是简单介绍。

1. 影像处理帮助类

有很多影像处理相关的类库可以使用。单单在.NET Framework中,就有PresentationCore.dll中的System.Windows.Media.Drawing抽象类以及System.Drawing.dll中System.Drawing命名空间下的类可以使用。更复杂的是,在System.Windows和System.Drawing命名空间下有一些相互独立的处理形状(shape)和颜色(color)的类。有时候一个类库中的方法能够进行一些图像处理而其它类库中却没有类似的方法。为了方便,各种图形对象之间的转换显得很有必要。

当引入Kinect后,情况变得更加复杂。Kinect有自己的影像数据流,如ImageFrame。为了能够使Kinect这些专有的影像对象能够和WPF一同使用,ImageFrame对象必须转换为ImageSource类型,该对象在System.Windows.Media.Imaging命名空间中。第三方影像处理库并不知道System.Windows.Media命名空间中的对象,但是知道System.Drawing命名空间,为了能够使用Emgu处理Kinect中产生的数据,需要将Microsoft.Kinect中的某些数据类型转化为System.Drawing类型,然后将System.Drawing类型转换到Emgu中的类型,在Emgu中处理完之后,再转换回System.Drawing类型,最后再转换为System.Windows.Media类型来共WPF使用。

1.1 Coding4Fun Kinect工具类

Coding4Fun Kinect Toolkit为将一些类型从一种类库转换到其他类库中的对应类型的提供了一些便利。这个工具集可以从该开源工具集官网 http://c4fkinect.codeplex.com/ 上下载。它包括3个独立的dll。其中Coding4Fun.Kinect.Wpf.dll提供了一系列扩展方法来在Microsoft.Kinect和System.Windows.Media之间进行转换。而Coding4Fun.Kinect.WinForm.dll提供了一系列扩展方法来在Microsoft.Kinect和System.Drawing之间进行转换。System.Drawing是.NET图形库中的dll。他包含了WinForm中用来进行绘图和展现所需的元素,而WPF中所需要的展现元素包含在System.Windows.Media中。

遗憾的是Coding4Fun Kinect Toolkit并没有提供在System.Drawing命名空间和System.Windows.Media命名空间之间对应对象的转换方法。这是因为Toolkit的最初目的是方便简单的编写Kinect Demo程序而不是提供一个通用的在不同的图像类型之间进行转换的类库。所以,一些可能在WPF中要用到的方法可能存在于WinForm的dll中。一些非常有用的,复杂的处理景深数据流中景深影像数据的方法被封装到了一些简单的将Kinect图像类型转换为WPF ImageSource的对象中去了。

但是Coding4Fun Kinect ToolKit有两个比较好的地方可以取消上面的疑虑。一个就是,他是开源的,源代码可以下载并查看。可以通过源码查看Coding4Fun团队是如何在图像处理内部使用字节数组的。你可以在这些代码中看到前面博文中代码的影子,类库中的一些小的技巧非常有帮助。第二就是这些方法都是扩展方法,可以很方便的进行扩充。

扩展方法是一种语法糖,它使得一个独立的方法看起来像是被附加到一个类型上一样。比如,有一个方法AddOne可以将当前的值加1。这个方法可以改写为一个扩展方法。只需要简单的将该方法设置为静态的,并在Int32类型前加this即可。代码如下, 然后调用AddOne(3)这个方法可以简单的改写为3. AddOne()

public int AddOne(int i)
{
    return i + 1;
}
public static class myExtensions
{
    public static int AddOne(this int i)
    {
        return i + 1;
    }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索开发
, kinect
, 方法
, kinect2.0
, kinect2.0 win8.1
, kinect开发
, 类型
, kinect fusion
, system
, c# emgu stitch
, 异常kinect
, Emgu
, kinect,C#,输出坐标
一些
kinect开发入门、kinect unity开发入门、kinect开发入门二、kinect2.0开发入门、杨氏太极拳入门指引,以便于您获取更多的相关知识。

时间: 2024-08-23 04:09:21

Kinect for Windows SDK开发入门(十四)进阶指引 上的相关文章

Kinect for Windows SDK开发入门(十五)进阶指引 下

上一篇文章介绍了Kinect for Windows SDK进阶开发需要了解的一些内容,包括影像处理Coding4Fun Kinect工具类库以及如何建立自己的扩展方法类库来方便开发,接下来介绍了利用Kinect进行近距离探测的一些方法,限于篇幅原因,仅仅介绍了近距离探测的三种方式.  本文接上文将继续介绍近距离探测中如何探测运动,如何获取并保存产生的影像数据:然后将会介绍如何进行脸部识别,以及介绍全息图(Holograme)的一些知识,最后介绍了一些值得关注的类库和项目. 2.4 运动识别 目

Kinect for Windows SDK开发入门(十二)语音识别 上

Kinect的麦克风阵列在Kinect设备的下方.这一阵列由4个独立的水平分布在Kinect下方的麦克风组成.虽然每一个麦克风都捕获相同的音频信号,但是组成阵列可以探测到声音的来源方向.使得能够用来识别从某一个特定的方向传来的声音.麦克风阵列捕获的音频数据流经过复杂的音频增强效果算法处理来移除不相关的背景噪音.所有这些复杂操作在Kinect硬件和Kinect SDK之间进行处理,这使得能够在一个大的空间范围内,即使人离麦克风一定的距离也能够进行语音命令的识别. 在Kinect第一次作为Xbox3

Kinect for Windows SDK开发入门(十八)Kinect Interaction交互控件

今年三月份发布了1.7版本的SDK,这一版本的SDK较前一版本最大的变化是添加了Kinect Interactions 和 Kinect Fusion.Kinect Interactions 提供了一些新的带有姿势识别的控件如 push-to-press 按钮, grip-to-pan 列表控件, 而且支持多用户,同时二个人进行的交互,这些新添加的控件能够非常方便的集成到应用程序中,极大的简化了开发和调试过程. 1.7 SDK中新增的第二个功能是去年在Build 2012大会上提到的Kinect

Kinect for Windows SDK开发入门(十)手势识别 上:基本概念

像点击(clicks)是GUI平台的核心,轻点(taps)是触摸平台的核心那样,手势(gestures)是Kinect应用程序的核心.和图形用户界面中的数字交互不同,手势是现实生活中存在的动作.如果没有电脑我们就不需要鼠标,但是没了Kinect,手势依然存在.从另一方面讲,手势是日常生活中人与人之间相互交流的一部分.手势能够增强演讲的说服力,能够用来强调和传递情感.像挥手(waving)或者指向(pointing)这些手势都是某种无声的演讲. Kinect应用程序的设计和开发者的任务就是将这些现

Kinect for Windows SDK开发入门(六)骨骼追踪基础 上

Kinect产生的景深数据作用有限,要利用Kinect创建真正意义上交互,有趣和难忘的应用,还需要除了深度数据之外的其他数据.这就是骨骼追踪技术的初衷,骨骼追踪技术通过处理景深数据来建立人体各个关节的坐标,骨骼追踪能够确定人体的各个部分,如那部分是手,头部,以及身体.骨骼追踪产生X,Y,Z数据来确定这些骨骼点.在上文中,我们讨论了景深图像处理的一些技术.骨骼追踪系统采用的景深图像处理技术使用更复杂的算法如矩阵变换,机器学习及其他方式来确定骨骼点的坐标. 本文首先用一个例子展示骨骼追踪系统涉及的主

Kinect for Windows SDK开发入门(二)基础知识 上

上篇文章介绍了Kinect开发的环境配置,这篇文章和下一篇文章将介绍Kinect开发的基本知识,为深入研究Kinect for Windows SDK做好基础. 每一个Kinect应用都有一些基本元素.应用程序必须探测和发现链接到设备上的Kinect传感器.在使用这些传感器之前,必须进行初始化,一旦初始化成功后,就能产生数据,我们的程序就能处理这些数据.最后当应用程序关闭是,必须合理的释放这些传感器. 本文第一部分将会介绍如何探测初始化几释放传感器,这是非常基础的话题,但是对于基于Kinect开

Kinect for Windows SDK开发入门(一) 开发环境配置

前几天无意中看到微软发布了Kinect for windows sensor,进去看了一下Kinect应用的例子,发现 Kinect除了作为xbox360游戏的外设外还能开发一些很酷的应用,而且微软也发布可针对Kinect开发的 Kinect for windows SDK1.0正式版本,原本想买一个Kinect for windows sensor来进行开发玩一玩的 ,可是那个出来没多久,淘宝上只有代购的,而且比Kinect for Xbox360 sensor贵了很多,而且只能进 行开发,考

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 for Windows SDK开发入门(四)景深数据处理 上

Kinect传感器的最主要功能之一就是能够产生三维数据,通过这些数据我们能够创建一些很酷的应用.开发Kinect应用程序之前,最好能够了解Kinect的硬件结构.Kinect红外传感器能够探测人体以及非人体对象例如椅子或者咖啡杯.有很多商业组织和实验室正在研究使用景深数据来探测物体. 本文详细介绍了Kinect红外传感器,景深数据格式,景深图像的获取与展示,景深图像的增强处理. 1. Kinect传感器 和许多输入设备不一样,Kinect能够产生三维数据,它有红外发射器和摄像头.和其他Kinec