问题标签 [libfreenect2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5592 浏览

macos - 如何使用 libfreenect2 设置 OpenNI2 和 NITE 以在 OSX 上进行骨骼跟踪?

我刚刚在 OSX 10.11.5 上设置libfreenect2,我可以成功运行显示 RGB/IR/深度流的 Protonect 演示,但我也想使用 OpenNI/NITE 进行骨架跟踪。

我已经按照 OpenNI 的 repo 的 README 文件中的说明进行操作,但是当我尝试运行 NiViewer 时,我得到了这个:

我目前正在 github 上处理 libfreenect2 问题,并在此处记录我正在尝试的内容和结果。任何提示/提示都是有帮助的。

在 OSX 上使用 Kinect v2 使用 libfreenect2 设置和测试 OpenNI/NITE 的最简单方法是什么?

原来我使用的是 NiTE 1.5,而我应该一直使用 NiTE2.2,我只是简单地libfreenect2-openni2.0.dylib从复制libfreenect2/build/libNiTE-MacOSX-x64-2.2/Samples/Bin/OpenNI2/Drivers/然后运行SimpleUserTracker示例并且它有效!

仍然有一个问题:仅打印到控制台的示例运行,但打开窗口并渲染的示例不起作用。没有渲染窗口,好像该线程以某种方式被阻塞。那是我使用集成英特尔 GPU 的时候。如果我使用离散的 nVidia GPU,应用程序会崩溃:

我怎样才能解决这个问题?

0 投票
1 回答
762 浏览

c++ - C++ Kinect v2 & freenect2:如何将深度数据转换为真实世界坐标

我正在尝试使用 Kinect v2 相机(在 Linux 中)计算真实世界的 xyz 坐标,但我的计算结果错误。

这是代码:

我认为问题是由于 , 和 的深度fx值造成fy的。cxcy

有人能帮我吗?

我正在使用freenect2。

0 投票
2 回答
403 浏览

java - Java:运行处理 3.2.1 的 Raspberry Pi 上出现不满意的链接错误

每当我从 OpenKinect Kinect v1 示例 PointCloud 运行示例代码时,我都会收到此错误。

OpenKinect 库是专门为 ARM Linux 架构制作的,可以在此处找到。基本问题是我认为它没有正确找到 libfreenect.so 库,即使库有它。我猜它不在路上。

请参阅下面正在运行的示例代码(库 freenect.* 的导入是我认为导致问题的原因):


编辑 这是我得到的图片:

我总是收到这个缺少本机代码的错误

0 投票
1 回答
230 浏览

qt - qt 添加库 freenect

我在 Ubuntu 16.04 上安装了 libfreenect。然后当我在 Qt 中添加它的库时,出现以下错误。

我尝试添加 libusb-1.0。我在终端输入了这个:

pkg-config libusb-1.0 --libs --cflags -I/usr/include/libusb-1.0 -lusb-1.0

  • .pro 文件:

    QT += 核心 QT -= gui

    配置 += c++11

    目标 = 1 配置 += 控制台配置 -= app_bundle

    模板 = 应用程序

    来源 += main.cpp

    win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../usr/local /lib/release/ -lfreenect_sync else:win32:CONFIG(debug, debug|release ): LIBS += -L$$PWD/../../../usr/local/lib/debug/ -lfreenect_sync else:unix: LIBS += -L$$PWD/../../。 ./usr/local/lib/ -lfreenect_sync

    INCLUDEPATH += $$PWD/../../../usr/local/include DEPENDPATH += $$PWD/../../../usr/local/include

    win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../../usr/local/lib/release/libfreenect_sync.a else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../../usr/local/lib/debug/libfreenect_sync.a else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../../usr/local/lib/release/freenect_sync.lib else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$ PWD/../../../usr/local/lib/debug/freenect_sync.lib else:unix: PRE_TARGETDEPS += $$PWD/../../../usr/local/lib/libfreenect_sync。一个

    win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../usr/local/lib/release/ -lfreenect_sync else:win32:CONFIG(debug, debug|release ): LIBS += -L$$PWD/../../../usr/local/lib/debug/ -lfreenect_sync else:unix: LIBS += -L$$PWD/../../。 ./usr/local/lib/ -lfreenect_sync

    INCLUDEPATH += $$PWD/../../../usr/local/include DEPENDPATH += $$PWD/../../../usr/local/include

    win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../usr/local

    /lib/release/ -lfreenect else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../usr/local/lib/debug/ -lfreenect else: unix:LIBS += -L$$PWD/../../../usr/local/lib/ -lfreenect

    INCLUDEPATH += $$PWD/../../../usr/local/include DEPENDPATH += $$PWD/../../../usr/local/include

    win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../../usr/local/lib/release/libfreenect.a else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../../usr/local/lib/debug/libfreenect.a else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../../usr/local/lib/release/freenect.lib else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$ PWD/../../../usr/local/lib/debug/freenect.lib else:unix: PRE_TARGETDEPS += $$PWD/../../../usr/local/lib/libfreenect.一个

    win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../usr/local/lib/release/ -lfreenect else:win32:CONFIG(debug, debug|release ): LIBS += -L$$PWD/../../../usr/local/lib/debug/ -lfreenect else:unix: LIBS += -L$$PWD/../../。 ./usr/local/lib/ -lfreenect

    INCLUDEPATH += $$PWD/../../../usr/local/include DEPENDPATH += $$PWD/../../../usr/local/include

    win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../usr/lib/release/ -lusb-1.0 else:win32:CONFIG(debug, debug|release ): LIBS += -L$$PWD/../../../usr/lib/debug/ -lusb-1.0 else:unix: LIBS += -L$$PWD/../../。 ./usr/lib/ -lusb-1.0

    INCLUDEPATH += $$PWD/../../../usr/include DEPENDPATH += $$PWD/../../../usr/include

但同样的错误再次发生。我该如何解决?

0 投票
1 回答
2310 浏览

python - 通过 Python 和 OpenCV 使用 Open Kinect 显示来自 XBOX 360 的 IR 图像

我想使用 Xbox Kinect 360 在计算机屏幕上显示红外摄像机。下面的代码将打开一个新帧,但显示只是一个后帧,而不是 IR 视频馈送。如何让框架显示红外图像?

0 投票
1 回答
275 浏览

c++ - 使用 libfreenect2 的读/写访问冲突 C++

我是 C++ 的新手,开始玩弄我的 Kinect V2 和 libfreenect2。我想,图书馆的建设对我来说很好。但是当我尝试在我的代码中使用它时,我得到了一些奇怪的异常。

每次我运行此代码时,它都无法获取序列号 [serial = freenect2.getDefaultDeviceSerialNumber();] :

“抛出未处理的异常:读取访问冲突。

_Pnext 是 0xFFFFFFFFFFFFFFFF。”

如果我正在使用

相反,它在等待新帧 [listener.waitForNewFrame(frames)] 时失败,并引发以下异常:

“在 ConsoleApplication1.exe 中的 0x000000018026D0C2 (ig75icd64.dll) 处引发异常:0xC0000005:访问冲突写入位置 0x000000002BA0D700。”

那么,我做错了什么,我怎样才能做得更好?

谢谢你的建议。

编辑:缩短代码...

0 投票
1 回答
917 浏览

c++ - /usr/include/libfreenect.hpp:33:错误:libusb.h:没有这样的文件或目录

我安装了 libfreenect。我打开QT,开始编码。当我使用 libfreenect.h 时,不会发生错误。但是当我使用 libfreenect.hpp 时,出现了这个错误:"error: libusb.h: No such file or directory" .pro 文件的内容是:

问题出在哪里?

0 投票
1 回答
372 浏览

c++ - 如何使 C++ 中的其他函数可以访问侦听器?

我想让我的getFrames()函数可以访问以下侦听器。我怎样才能做到这一点?我通过将侦听器添加到我的私有字段来尝试此操作,但我仍然收到以下错误listener(libfreenect2::Frame::Color | libfreenect2::Frame::Depth | libfreenect2::Frame::Ir);

调用不匹配 '(libfreenect2::SyncMultiFrameListener) (int)

请查看示例应用程序代码

源文件:

头文件:

来自github的示例应用程序:

0 投票
1 回答
1912 浏览

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

我正在尝试从我的 MS Kinect V2 生成真实世界的坐标。

我设法拼凑出一个 pyqt + opengl 散点图,并使用 pylibfreenect2 显示来自 Kinect 的深度数据。

我立即注意到深度数据与点云数据不同。注意我房间的天花板非常扭曲(应该是平的天花板开始像曲棍球棒图)

绘制深度框的结果 在此处输入图像描述

经过一些阅读和挖掘源文件后,我设法找到了一个看起来非常有前途的功能。

getPointXYZ - 在点云中构造一个 3-D 点。

因为它一次只适用于一个像素,所以我编写了一个简单的嵌套 for 循环。在下面的代码中,您应该看到以下行:

getPointXYZ() 的坐标结果 在此处输入图像描述

不知道那里发生了什么。它看起来更像一条直线,有时它像一个矩形,而且非常平坦(但它在所有三个维度上都位于任意角度)。当我将手移到传感器前面时,我可以看到一些点在移动,但看不到可声明的形状。似乎所有的点都挤在一起了。

以下是一个 Python 脚本,它将显示一个包含 openGL 散点图的 pyQt 应用程序窗口。通过 pylibfreenect2 从 Kinect 传感器接收帧,并通过迭代深度数据的每一行和每一列并通过 getPointXYZ 发送它来生成散点图的点(这真的很慢而且不起作用......)。

我不确定下一步应该做什么才能获得实际的点云坐标数据。

有人对我做错了什么有任何建议吗?

我的操作系统是带有 Python 3.5 的 Ubuntu 16.0.4

谢谢。

0 投票
1 回答
3337 浏览

python - 向量化 Kinect 真实世界坐标处理算法以提高速度

我最近开始使用 pylibfreenect2 在 Linux 上使用 Kinect V2。

当我第一次能够在散点图中显示深度帧数据时,我很失望地看到没有一个深度像素似乎位于正确的位置。

房间的侧视图(注意天花板是弯曲的)。 输入图像描述hethat there

我做了一些研究,并意识到进行转换涉及一些简单的三角函数。

为了测试,我从 pylibfreenect2 中的一个预先编写的函数开始,它接受列、行和深度像素强度,然后返回该像素的实际位置:

这在纠正位置方面做得非常好: 在此处输入图像描述

使用getPointXYZ()getPointXYZRGB()的唯一缺点是它们一次只能处理一个像素。这在 Python 中可能需要一段时间,因为它需要使用嵌套的 for 循环,如下所示:

我试图更好地理解 getPointXYZ() 是如何计算坐标的。据我所知,它看起来类似于这个 OpenKinect-for-Processing 函数:depthToPointCloudPos()虽然我怀疑 libfreenect2 的版本在幕后有更多的内容。

使用该 gitHub 源代码作为示例,然后我尝试用 Python 重写它以进行自己的实验,并提出以下内容:

这是传统的 getPointXYZ 和我的自定义函数之间的比较: 在此处输入图像描述

它们看起来非常相似。但是有明显的区别。左侧比较显示了更直的边缘以及平坦天花板上的一些正弦形状。我怀疑涉及额外的数学。

我很想知道是否有人对我的函数和 libfreenect2 的 getPointXYZ 之间可能存在的不同有什么想法。

然而,我在这里发布的主要原因是询问是否尝试将上述函数矢量化以在整个数组上工作,而不是循环遍历每个元素。

应用我从上面学到的知识,我能够编写一个函数,它似乎是 depthToPointCloudPos 的矢量化替代方案:

[编辑]

感谢 Benjamin 帮助使此功能更加高效!

这可以工作并产生与之前的函数 depthToPointCloudPos() 相同的点云结果。唯一的区别是我的处理速度从 ~1 Fps 变为 5-10 Fps (WhooHoo!)。我相信这消除了由 Python 进行所有计算引起的瓶颈。因此,我的散点图现在再次顺利运行,计算了半真实世界的坐标。

现在我有了一个从深度帧中检索 3d 坐标的有效函数,我真的很想应用这种方法来将彩色相机数据映射到我的深度像素。但是我不确定这样做涉及哪些数学或变量,并且没有太多提及如何在谷歌上计算它。

或者,我可以使用 libfreenect2 使用 getPointXYZRGB 将颜色映射到我的深度像素:

生成点云和彩色顶点(非常慢 <1Fps): 在此处输入图像描述

总之,我的两个问题基本上是:

  • 需要哪些额外步骤才能使从我的depthToPointCloudPos()函数(以及矢量化实现)返回的真实世界 3d 坐标数据更类似于从 libfreenect2 中的 getPointXYZ() 返回的数据?

  • 而且,在我自己的应用程序中创建一种(可能是矢量化的)生成深度到颜色配准图的方法会涉及什么?请查看更新,因为此问题已解决。


[更新]

我设法使用注册帧将颜色数据映射到每个像素。它非常简单,只需要在调用 setData() 之前添加这些行:

这允许 Python 快速处理颜色数据并给出平滑的结果。我已将它们更新/添加到下面的功能示例中。

在 Python 中实时运行颜色配准的真实坐标处理! 在此处输入图像描述

(GIF图像分辨率已大大降低)


[更新]

在应用程序花费了更多时间之后,我添加了一些额外的参数并调整了它们的值,希望能提高散点图的视觉质量,并可能使这个例子/问题的事情更直观。

最重要的是,我将顶点设置为不透明:

然后我注意到,每当缩放非常接近表面时,相邻顶点之间的距离似乎会扩大,直到所有可见的大部分都是空白空间。这部分是由于顶点的点大小没有改变。

为了帮助创建一个充满彩色顶点的“缩放友好”视口,我添加了这些行,它们根据当前缩放级别(每次更新)计算顶点大小:

你瞧:

更好看的视觉效果

(再次,GIF图像分辨率已大大降低)

也许不如给点云蒙皮那么好,但它似乎确实有助于在尝试理解您实际看到的内容时使事情变得更容易。

所有提到的修改都包含在功能示例中。


[更新]

如前两个动画所示,很明显真实世界坐标的点云与网格轴相比具有倾斜的方向。这是因为我没有在真实世界中补偿 Kinect 的实际方向!

因此,我实现了一个额外的矢量化三角函数,它为每个顶点计算一个新的(旋转和偏移)坐标。这会相对于 Kinect 在真实空间中的实际位置正确定位它们。并且在使用可倾斜的三脚架时是必要的(也可用于连接 INU 或陀螺仪/加速度计的输出以获得实时反馈)。

请注意:rotatePoints() 仅被称为“仰角”和“方位角”。这是因为大多数三脚架不支持滚动并且默认情况下已禁用它以节省 CPU 周期。如果您打算做一些花哨的事情,那么绝对可以随意取消评论!

请注意,此图像中的网格地板是水平的,但左侧点云未与其对齐: 方向补偿比较

设置 Kinect 方向的参数:

您应该根据传感器的实际位置和方向更新这些: 定向补偿所需的基本参数

两个最重要的参数是θ(仰角)角和离地面的高度。我只使用了一个简单的卷尺和一个校准过的眼睛,但是我打算有一天提供编码器或 INU 数据以实时更新这些参数(随着传感器的移动)。

同样,所有更改都反映在功能示例中。


如果有人成功地改进了这个例子,或者有关于如何让事情更紧凑的建议,如果你能留下评论来解释细节,我将非常感激。

这是该项目的完整功能示例: