无法导入 pykinect2

Omi*_*aei 2 python pykinect kinect-v2

我已在 Windows 10 系统上安装了 KinectV2 SDK,并在 SDK 浏览器中成功测试了它。

我尝试运行 Pykinect2 库中的一些代码,但导入时出现问题:

from pykinect2 import PyKinectV2
Run Code Online (Sandbox Code Playgroud)

错误:

---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
Cell In[2], line 1
----> 1 from pykinect2 import PyKinectV2
      2 from pykinect2.PyKinectV2 import *

File ~\Anaconda3\envs\kinect-env\lib\site-packages\pykinect2\PyKinectV2.py:2216
   2131 ################################################################
   2132 ## code template for ICoordinateMapper implementation
   2133 ##class ICoordinateMapper_Impl(object):
   (...)
   2200 ##        #return colorPoint
   2201 ##
   2203 tagSTATSTG._fields_ = [
   2204     ('pwcsName', WSTRING),
   2205     ('type', c_ulong),
   (...)
   2214     ('reserved', c_ulong),
   2215 ]
-> 2216 assert sizeof(tagSTATSTG) == 72, sizeof(tagSTATSTG)
   2217 assert alignment(tagSTATSTG) == 8, alignment(tagSTATSTG)
   2218 IAudioBeamList._methods_ = [
   2219     COMMETHOD(['propget'], HRESULT, 'BeamCount',
   2220               ( ['retval', 'out'], POINTER(c_uint), 'count' )),
   (...)
   2223               ( ['out'], POINTER(POINTER(IAudioBeam)), 'AudioBeam' )),
   2224 ]

AssertionError: 80
Run Code Online (Sandbox Code Playgroud)

如何解决呢?

des*_*aut 6

这似乎是一个相当常见的错误(请参阅此处此处)。根据PyKinect2 Github 存储库中的一个线程,以下是补救措施:

assert sizeof(tagSTATSTG) == 72假设这与我收到的由PyKinectV2.py 的在线 2216 行(现在为 80)引起的导入错误相同sizeof,那么快速修复是将文件编辑为assert sizeof(tagSTATSTG) >= 72.

我的假设是,在 Microsoft API 的结构中添加了一个额外的字段...按照惯例,Microsoft 通常/总是将任何新字段附加到结构的末尾,以免破坏向后兼容性...无论如何,它允许我成功导入 PyKinectV2。

请注意,根据您的错误跟踪,该错误完全源于 的assert sizeof(tagSTATSTG) == 72第 2216 行PyKinectV2.py,如 Github 线程中所述。

根据相关的Reddit 帖子,将线路更改为assert sizeof(tagSTATSTG) == 80也应该有效。

无论如何,您应该记住PyKinect2似乎从大约 8 年前就被废弃了。