6

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

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

NiViewer 
openDevice failed:
    DeviceOpen using default: no devices found

Press any key to continue . . .

我目前正在 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,应用程序会崩溃:

./UserViewer 
   124095 INFO       New log started on 2016-08-30 20:32:19
   124114 INFO       --- Filter Info --- Minimum Severity: VERBOSE
   126001 VERBOSE    No override device in configuration file
   126029 VERBOSE    Configuration has been read from '/Users/George/Downloads/Grouped/Projects/code+libs/NiTE-MacOSX-x64-2.2/Samples/Bin/OpenNI.ini'
   126034 VERBOSE    OpenNI 2.2.0 (Build 21)-MacOSX (May 29 2013 14:03:30)
   126038 VERBOSE    Using '/Users/George/Downloads/Grouped/Projects/code+libs/NiTE-MacOSX-x64-2.2/Samples/Bin/OpenNI2/Drivers' as driver path
   126042 VERBOSE    Looking for drivers in drivers repository '/Users/George/Downloads/Grouped/Projects/code+libs/NiTE-MacOSX-x64-2.2/Samples/Bin/OpenNI2/Drivers'
   161329 INFO       New log started on 2016-08-30 20:32:19
   161447 INFO       --- Filter Info --- Minimum Severity: VERBOSE
   161457 VERBOSE    Initializing USB...
   166761 INFO       USB is initialized.
   286714 INFO       New log started on 2016-08-30 20:32:19
   286762 INFO       --- Filter Info --- Minimum Severity: VERBOSE
   286781 VERBOSE    Initializing USB...
   286804 INFO       USB is initialized.
[Info] [Freenect2Impl] enumerating devices...
[Info] [Freenect2Impl] 7 usb devices connected
[Info] [Freenect2Impl] found valid Kinect v2 @20:16 with serial 500722542042
[Info] [Freenect2Impl] found 1 devices
  5380695 INFO       Found device freenect2://0
  5380723 INFO       Driver: register new uri: freenect2://0
  5381065 INFO       Device connected: Microsoft Kinect (freenect2://0)
  5381101 INFO       Device state changed: Microsoft Kinect (freenect2://0) to 0
  5381115 INFO       Driver: register new uri: freenect2://0?depth-size=640x480
  5381123 INFO       Device connected: Microsoft Kinect (freenect2://0?depth-size=640x480)
  5381132 INFO       Device state changed: Microsoft Kinect (freenect2://0?depth-size=640x480) to 0
  5381139 INFO       Driver: register new uri: freenect2://0?depth-size=512x424
  5381149 INFO       Device connected: Microsoft Kinect (freenect2://0?depth-size=512x424)
  5381157 INFO       Device state changed: Microsoft Kinect (freenect2://0?depth-size=512x424) to 0
[Info] [Freenect2Impl] enumerating devices...
[Info] [Freenect2Impl] 7 usb devices connected
[Info] [Freenect2Impl] found valid Kinect v2 @20:16 with serial 500722542042
[Info] [Freenect2Impl] found 1 devices
 10381916 VERBOSE    Trying to open device by URI '(NULL)'
 10381940 INFO       deiveOpen: freenect2://0
 10381948 INFO       Opening device freenect2://0
[Info] [Freenect2DeviceImpl] opening...
[Info] [Freenect2DeviceImpl] transfer pool sizes rgb: 20*16384 ir: 4*128*33792
[Info] [Freenect2DeviceImpl] opened
 12312037 VERBOSE    Initialize: Already initialized
 12314810 INFO       Device: createStream(depth)
 12314892 INFO       Freenect2Driver::Device: start()
[Info] [Freenect2DeviceImpl] starting...
[Info] [Freenect2DeviceImpl] submitting rgb transfers...
[Info] [Freenect2DeviceImpl] submitting depth transfers...
[Info] [Freenect2DeviceImpl] started
2016-08-30 20:32:31.847 UserViewer[7575:4995528] GLUT Warning: glutInit being called a second time.
[Info] [VTRgbPacketProcessor] avg. time: 19.633ms -> ~50.9346Hz
[Info] [VTRgbPacketProcessor] avg. time: 19.6306ms -> ~50.9408Hz
[Info] [VTRgbPacketProcessor] avg. time: 19.0744ms -> ~52.4262Hz
[Info] [DepthPacketStreamParser] 417 packets were lost
Segmentation fault: 11

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

4

1 回答 1

5

作为参考,这里有上述注释作为回答。这就是我使用 libfreenect2 和它的 OpenNI2 驱动程序获得 OpenNI2/NITE2.2 骨架跟踪所做的。我有:

  1. 通过自制软件编译安装的 OpenNI2 并根据github repo 的自述文件说明编译 libfreenect2 并支持 OpenNI2
  2. 下载了 NITE2.2(替换了我之前误用的 Nite1.5)
  3. 将 libfreenect2 OpenNI2 驱动程序 (ibfreenect2/build/lib/libfreenect2-openni2.0.dylib)Drivers复制到我需要运行 NITE2 的文件夹中(例如NiTE-MacOSX-x64-2.2/Samples/Bin/OpenNI2/Drivers)。

通过在 OpenNI.ini 中将日志级别设置为详细,我发现路径错误:

[Log]
; 0 - Verbose; 1 - Info; 2 - Warning; 3 - Error. Default - None
Verbosity=0
LogToConsole=1
LogToFile=1

[Device]
;Override=""

[Drivers]
; Location of the drivers specified by a relative path based on OpenNI's shared library or an absolute path.
; Path separator "/" can be used to be portable for any platforms.
; Default - OpenNI2/Drivers
Repository=OpenNI2/Drivers

Symon Kaliski 遵循笔记并使用OpenFrameworks在 OSX 上编写了出色的 Kinect 2,并带有骨架跟踪帖子,请务必查看!

使用 Kinect v2 进行 OpenNI2 OpenFrameworks 骨架跟踪

此外,一旦 libfreenect2 使用 openni2 支持编译,它甚至可以在处理中使用,只需将 libfreenect2-openni2.0.dylib 放入/Documents/Processing3/libraries/SimpleOpenNI/library/osx/OpenNI2(在 OSX 上):

Kinect2 SimpleOpenNI 骨骼追踪

于 2016-10-31T00:06:45.127 回答