1

我正在尝试.bag使用pyrealsense2. 我遵循了英特尔的read_bag_example。这是我正在使用的代码的完整示例。

import numpy as np
import pyrealsense2 as rs
import os
import time
import cv2

i = 0
try:
    config = rs.config()
    rs.config.enable_device_from_file(config, "D:/TEST/test_4.bag", repeat_playback=False)
    pipeline = rs.pipeline()
    pipeline.start(config)

    while True:
        frames = pipeline.wait_for_frames()
        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
finally:
    pass

代码正在运行。但是我检查了帧数realsense-viewer,它的输出是890帧。但是,此代码的输出始终在500-770 范围内变化并引发错误:

RuntimeError:帧未在 5000 内到达

我搜索了很多小时,但找不到可以解决我的问题的解决方案。

我也在使用

  • 英特尔固件版本 - 5.11.15.0
  • 蟒蛇 - 3.6.8
  • pyrealsense2 - 2.24.0.965
  • 具有848x480、90 FPS图像 的 D435

如果您需要,我可以添加更多信息。任何帮助或其他建议将不胜感激!

4

1 回答 1

2

问题是关于播放时间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

从上面可以看出,while 循环略有变化,以确保在使用playback.pause()and获取新帧之前首先处理收集的帧playback.resume()

TL;博士:

playback.set_real_time(False)如果文件中的帧数不一致,则应设置.bag

于 2019-10-31T09:36:53.613 回答