Проблема связана с временем воспроизведения из pyrealsense2
. Модули автоматически присваивают его, как если бы они были в режиме реального времени . Настройка профиля и установка времени воспроизведения решили проблему. Существует пример кода, который работает с 848x480-90FPS ниже.
i = 0
try:
config = rs.config()
rs.config.enable_device_from_file(config, "D:/TEST/test_4.bag", repeat_playback=False)
pipeline = rs.pipeline()
profile = pipeline.start(config)
playback = profile.get_device().as_playback()
playback.set_real_time(False)
while True:
frames = pipeline.wait_for_frames()
playback.pause()
depth_frame = frames.get_depth_frame()
if not depth_frame:
continue
depth_image = np.asanyarray(depth_frame.get_data())
color_image = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)
cv2.imwrite("D:/TEST/image/" + str(i) + ".png", color_image)
i += 1
playback.resume()
except RuntimeError:
print("There are no more frames left in the .bag file!")
finally:
pass
Как можно видеть выше, в то время как цикл немного изменился, чтобы гарантировать, что собранный кадр сначала обрабатывался довзятие нового кадра с playback.pause()
и playback.resume()
.
TL; DR:
Вам следует установить playback.set_real_time(False)
, если вы получаете непоследовательное количество кадровв файле .bag
.