c# - 设置两个kinect : v1 and v2

标签 c# kinect kinect-sdk

我计划使用两个 Kinect。我已经安装了 Kinect 的 VS C#、SDK 1.8 和 2.0,我的问题是:

添加一个引用库(例如 1.8)后,无法添加另一个(例如 2.0,消息“引用...已存在”)。我认为这是由于 namespace 和类的名称相同。所以,我无法实例化第二个传感器,

请建议我如何解决它,特别是是否有任何方法可以访问同一资源的不同版本(例如版本 1.8 和 2.0 中的 KinectSensor 类)?

最佳答案

您的问题有多种解决方案。第一个(可能是最幼稚的)是创建两个不同的项目,每个项目都有不同的引用。然后您可以编写第三层,使用前两个项目提供的数据。

如果您真的需要在同一个项目中使用这两个引用,还有另一种选择,它包括使用外部别名

首先,添加一个引用(例如,Microsoft.Kinect,版本 1.8)。然后,保存您的项目并关闭 Visual Studio。在项目文件夹中,您应该找到一个可以使用文本编辑器打开的 .csproj 文件。查看它的内容,你会发现这样一行:

<Reference Include="Microsoft.Kinect, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

现在,将上面的行更改为以下内容:

<Reference Include="Microsoft.Kinect, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
    <Aliases>KinectV1</Aliases>
</Reference>
<Reference Include="Microsoft.Kinect, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
    <Aliases>KinectV2</Aliases>
</Reference>

您现在应该在同一个项目中看到这两个引用,当您使用 Visual Studio 打开它时也是如此。

那么你应该能够使用这样的东西:

// You must declare aliases here:
extern alias KinectV1;
extern alias KinectV2;

// Then some using...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// ... and do not forget Kinect!
using KinectV1;
using KinectV2;

// Now you can do something like this:
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // Something from Microsft.Kinect V2
            KinectV2.Microsoft.Kinect.HandState hs = KinectV2.Microsoft.Kinect.HandState.Closed;

            // Something from Microsft.Kinect V1
            KinectV1.Microsoft.Kinect.Skeleton s = new KinectV1.Microsoft.Kinect.Skeleton();
        }
    }
}

如果您的项目无法编译,请尝试关闭 Visual Studio 并删除隐藏的 .suo 文件(在您项目的 .sln 文件的同一文件夹中) .

查看this answer如果您还有其他问题。

关于c# - 设置两个kinect : v1 and v2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35874140/

相关文章:

c# - 用户控件上的编译错误

c# - SEHException Kinect V2

python - 使用 pylibfreenect2 中的 getPointXYZ() 时,Kinect V2 深度图像会产生奇怪的点云坐标?

c++ - Kinect 4 Windows v2 - 打开录音

c# - LINQ where 子句在第二个 where 中抛出错误

c# - 即使文件夹已被删除,DirectoryInfo.Exists 也会返回 true

c# - Selenium c# 接受确认框

c++ - 将 OpenCV 阈值与 Kinect 图像结合使用

kinect - Kinect v1 人体检测可以用于 2 人以上吗?

c# - Kinect深度图像仅部分可见