Как сохранить данные libfreenect2.Frame с помощью python - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь записать данные kinectv2 для задачи классификации изображений, которую пытаюсь решить. Есть ли способ записать данные kinectv2?

Я пытался использовать pickle для сохранения данных глубины, однако, поскольку в библиотеке libfreenect2 для класса 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: по умолчанию нет __reduce__ из-за нетривиального __cinit__

1 Ответ

0 голосов
/ 16 июля 2019

Ваши два варианта:

  1. Сделать класс маринованным. Это включает в себя редактирование кода Cython libfreenect2. Вероятно, наиболее жизнеспособный способ сделать это - добавить __reduce__ метод , возвращающий конструктор Frame и кортеж аргументов.

  2. Просто сохраните данные фрейма вместо этого - Frame имеет функцию asarray , которая может получить массив Numpy, и есть множество вариантов для их сохранения. Это, наверное, самый простой подход. Если вы хотите загрузить его, просто загрузите массив Numpy и вызовите конструктор фрейма с этим.

...