【问题标题】:Cannot Initialize Kinect in Windows (0 sensors detected)无法在 Windows 中初始化 Kinect(检测到 0 个传感器)
【发布时间】:2016-06-20 13:05:05
【问题描述】:

我无法在我的 Windows PC 中初始化 Kinect v1。

这是我的代码(构建成功):

#include <Windows.h>
#include <Ole2.h>

#include <gl/GL.h>
#include <gl/GLU.h>
#include <gl/glut.h>

#include <NuiApi.h>
#include <NuiImageCamera.h>
#include <NuiSensor.h>

#define width 640
#define height 480

// Kinect variables
HANDLE rgbStream;              // The identifier of the Kinect's RGB Camera
INuiSensor* sensor;            // The kinect sensor


int main(int argc, char* argv[]) {
    // Get a working kinect sensor
    int numSensors=1;
    HRESULT reponse;
    reponse = NuiGetSensorCount(&numSensors);
    if (reponse < 0)  return false;
    if (numSensors < 1) return false;
    if (NuiCreateSensorByIndex(0, &sensor) < 0) return false;

    // Initialize sensor
    sensor->NuiInitialize(NUI_INITIALIZE_FLAG_USES_DEPTH | NUI_INITIALIZE_FLAG_USES_COLOR);
    sensor->NuiImageStreamOpen(
        NUI_IMAGE_TYPE_COLOR,            // Depth camera or rgb camera?
        NUI_IMAGE_RESOLUTION_640x480,    // Image resolution
        0,        // Image stream flags, e.g. near mode
        2,        // Number of frames to buffer
        NULL,   // Event handle
        &rgbStream);
    return sensor;
}

问题是函数“NuiGetSensorCount”总是返回传感器数量为0。

Kinect 1 通过 USB 端口插入 PC(我尝试过不同的端口);奇怪的是,如果我运行像 Skanect (1.8 Win64) 这样的软件,Skanect 会识别设备(它被检测为 OpenNI 2 Sensor)并且我可以使用它。

我在 Windows 7 64 位中使用 Visual Studio 2013 Update 5。 我已经为 Windows SDK v1.8 安装了 OpenNI 64 位 2 驱动程序和 Kinect。

在我的项目属性中,我调用位于以下位置的 Kinect10.lib 库:

  • C:\Program Files\Microsoft SDKs\Kinect\v1.8\lib\x86
  • C:\Program Files\Microsoft SDKs\Kinect\v1.8\lib\amd64

(我在 x86 和 x64 配置中都试过)

同样,对于我尝试使用位于以下位置的 Kinect10.dll 二进制文件的每个配置:

  • C:\Windows\System32
  • C:\Windows\SysWOW64

非常欢迎任何 cmets/建议。 另外,如果我遗漏了一些您认为相关的信息,请告诉我。

提前致谢。

【问题讨论】:

    标签: c++ windows sdk initialization kinect


    【解决方案1】:

    编辑 我刚刚看到您已经调用了 Initializer 函数。也许您需要在 NuiGetSensorCount(&numSensors) 函数之前调用它。

    我对 NUI 框架没有太多经验,但我建议将 OpenNI 框架用于 kinect 相机。虽然已经停止了它相当稳定并且运行良好。它甚至支持抓取图像的回调函数等。

    链接如下: http://structure.io/openni

    但是从我在互联网上找到的内容来看,您似乎正在遵循本教程: http://www.cs.princeton.edu/~edwardz/tutorials/kinect/kinect1.html

    我找到了另一个here

    似乎在读取传感器数量之前调用了一个Initializer函数:

    [...]
    int main()
    {
       cout << "Hello world" << endl;
       NuiInitialize(NUI_INITIALIZE_FLAG_USES_SKELETON);  <-------- HERE
       NUI_SKELETON_FRAME ourframe;
       while (1)
       {
         NuiSkeletonGetNextFrame(0, &ourframe);
         for (int i = 0; i < 6; i++)
         {
           if (ourframe.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED)
             cout << "Right Hand: " ;
             cout << ourframe.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_HAND_RIGHT].y << endl;
         }
         system("cls");
       }
      NuiShutdown();
      return 0;
    }
    

    NuiInitialize 指向the msdn doc的地方

    上面写着

    指定要初始化的 Kinect 子系统

    这似乎启用了 Kinect 子系统,这通常是启动设备所必需的。

    让我知道这是否有效!

    【讨论】:

    • 感谢您的建议。我一开始就尝试调用 NuiInitialize ;但这没有帮助。我认为需要为给定的传感器调用它,这就是为什么在教程中它在传感器创建后使用。至于改用 OpenNI 框架,我正在努力;但我似乎需要一些时间来检查。
    • 我不知道如果其他应用程序检测到该设备怎么可能...但尝试将 kinect 插入有源 USB 集线器上。
    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 2016-06-17
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    相关资源
    最近更新 更多