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)
如何解决呢?
这似乎是一个相当常见的错误(请参阅此处和此处)。根据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 年前就被废弃了。