首页 > 解决方案 > 如何使用 python 保存 libfreenect2.Frame 数据

问题描述

我正在尝试为我要解决的图像分类问题记录 kinectv2 数据。有没有办法记录kinectv2数据?

libfreenect2我曾尝试使用 pickle 来保存深度数据,但是由于Frame 类的库中没有 __reduce__ 方法,我遇到了错误。

frames = listener.waitForNewFrame()

depth = frames["depth"]

with open("captures/frame_" + str(i) + "_depth.obj", 'w') as file:
    pickle.dump(depth, file)

with open("captures/frame_" + str(i) + "_depth.obj", 'r') as file: 
    depth = pickle.load(file)

我遇到了给定的错误:

TypeError: no default __reduce__ 由于非平凡的 __cinit__

标签: cythonpython-3.5picklekinectlibfreenect2

解决方案


您的两个选择是:

  1. 使课程可腌制。这涉及编辑 libfreenect2 的 Cython 代码。可能最可行的方法是添加一个__reduce__方法,返回Frame构造函数和一个参数元组。

  2. 只需保存帧数据 - 它Frame有一个可以获取 Numpy 数组的asarray函数,并且有很多选项可以保存这些数据。这可能是最简单的方法。当你想加载它时,只需加载 Numpy 数组并用它调用框架构造函数。


推荐阅读