为 Kinect 2.0 使用 .dll 打包文件夹
Packaging folders with .dll's for Kinect 2.0
我刚开始在这里进行 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:
An unhandled exception of type 'System.InvalidOperationException' occurred in Microsoft.Kinect.Face.dll
Additional information: This API has returned an exception from an HRESULT: 0x80070002
有两个内部异常引用了无法找到的放错位置的文件。我认为问题是基于 Microsoft API reference:
中的以下行
Every application that uses Microsoft.Kinect.Face.dll must be packaged with the NuiDatabase folder that shipped with Microsoft.Kinect.Face.dll. The face dll is only guaranteed to work with the specific NuiDatabase folder that it shipped with. The face APIs are designed to load database files from the NuiDatabase folder upon initialization and will look for the folder in the same location as 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 并允许我声明所有必需的类型,但它仍然在同一行抛出相同的错误。
任何其他建议,或者我在设置中可能遗漏的任何内容?
我最终使用了 https://www.nuget.org/packages/Microsoft.Kinect.Face.x64/ 提供的预制 NuGet 包。
将这个包添加到我的项目中解决了问题。
您也可以尝试将此行添加到 Post-build 事件命令行:
xcopy "$(KINECTSDK20_DIR)Redist\Face$(Platform)\NuiDatabase" "$(TargetDir)\NuiDatabase" /S /R /Y /I
要访问 Post-build 命令编辑器,请执行:
右键单击项目 -> 构建事件 -> 编辑 Post-build ...
我刚开始在这里进行 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:
An unhandled exception of type 'System.InvalidOperationException' occurred in Microsoft.Kinect.Face.dll
Additional information: This API has returned an exception from an HRESULT: 0x80070002
有两个内部异常引用了无法找到的放错位置的文件。我认为问题是基于 Microsoft API reference:
中的以下行Every application that uses Microsoft.Kinect.Face.dll must be packaged with the NuiDatabase folder that shipped with Microsoft.Kinect.Face.dll. The face dll is only guaranteed to work with the specific NuiDatabase folder that it shipped with. The face APIs are designed to load database files from the NuiDatabase folder upon initialization and will look for the folder in the same location as 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 并允许我声明所有必需的类型,但它仍然在同一行抛出相同的错误。
任何其他建议,或者我在设置中可能遗漏的任何内容?
我最终使用了 https://www.nuget.org/packages/Microsoft.Kinect.Face.x64/ 提供的预制 NuGet 包。
将这个包添加到我的项目中解决了问题。
您也可以尝试将此行添加到 Post-build 事件命令行:
xcopy "$(KINECTSDK20_DIR)Redist\Face$(Platform)\NuiDatabase" "$(TargetDir)\NuiDatabase" /S /R /Y /I
要访问 Post-build 命令编辑器,请执行:
右键单击项目 -> 构建事件 -> 编辑 Post-build ...