使用.dll打包文件夹,用于Kinect 2.0

时间:2015-03-25 18:29:45

标签: c# dll visual-studio-2013 kinect kinect-sdk

我刚刚进入Kinect 2编程,现在我遇到了HighDefinitionFace的一些问题。我有一个非常简单的C#程序,它应该启动Kinect相机,告诉我它已经启动,然后输出主题的发色,如下所示:

    static class Program
    {
        static KinectSensor mySensor = null;
        static HighDefinitionFaceFrame frames = null;
        static HighDefinitionFaceFrameSource frameSource = null;
        static HighDefinitionFaceFrameReader frameReader = null;

    public static void Main() 
    {
        mySensor = KinectSensor.GetDefault();
        mySensor.Open();

        System.Console.WriteLine(mySensor.IsAvailable);

        frameSource = new HighDefinitionFaceFrameSource(mySensor);
        frameReader = frameSource.OpenReader();
        frames = frameReader.AcquireLatestFrame();

        System.Console.WriteLine(frames.FaceModel.HairColor);
    }

}

一切正常,直到我尝试初始化frameSource,然后它抛出一个InvalidOperationException:

  

未处理的类型' System.InvalidOperationException'发生在Microsoft.Kinect.Face.dll

     

其他信息:此API已从HRESULT:0x80070002

返回异常

有两个内部异常,引用了无法找到的错误放置的文件。我认为该问题基于Microsoft API reference:

中的以下行
  

每个使用Microsoft.Kinect.Face.dll的应用程序都必须与Microsoft.Kinect.Face.dll附带的NuiDatabase文件夹打包在一起。 face dll仅保证与其附带的特定NuiDatabase文件夹一起使用。 face API用于在初始化时从NuiDatabase文件夹加载数据库文件,并在与Microsoft.Kinect.Face.dll相同的位置查找该文件夹。

所以,我的问题是,如何确保使用.dll可以访问此NuiDatabase文件夹?

我试过的东西:

- Kinect SDK 2.0在不同目录中包含大约五个Microsoft.Kinect.Face.dll实例,每个实例在同一目录中都有一个NuiDatabase文件夹。所有这些.dll和NuiDatabase文件夹看起来都是相同的。我已经尝试将这些.dll中的每一个设置为引用,并且它们都给出了相同的结果。

- 创建包含.dll和NuiDatabase文件夹的本地NuGet包,并将其添加到项目中。我已经在自己的Lib文件夹中使用和不使用.dll进行了尝试。它正确引用了Microsoft.Kinect.Face并允许我声明所有必需的类型,但它仍然在同一行引发相同的错误。

我的设置中可能有任何其他建议或任何我可能错过的建议吗?

2 个答案:

答案 0 :(得分:1)

我最终在https://www.nuget.org/packages/Microsoft.Kinect.Face.x64/使用了预制的NuGet包。

将此包添加到我的项目中解决了这个问题。

答案 1 :(得分:1)

您也可以尝试将此行添加到Post-build事件命令行:

xcopy "$(KINECTSDK20_DIR)Redist\Face\$(Platform)\NuiDatabase" "$(TargetDir)\NuiDatabase" /S /R /Y /I

要访问Post-build命令编辑器,请执行:

右键单击Project - >构建事件 - >编辑后期制作......