You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在外部应用读取Realsense bag文件时判断读取已完成?

问题根因

你使用的实例分割仓库默认将RealSense输入视为实时在线流处理,读取bag文件时默认开启了重复播放参数,因此读完整个bag文件后会自动重头加载,导致无限循环。

修改实现步骤
  • 关闭bag重复播放配置
    找到仓库中RealSense bag文件加载的代码段,修改enable_device_from_file方法的入参,关闭重复播放:
# 原代码一般为 rs.config.enable_device_from_file(bag_path),添加第二个参数即可
config.enable_device_from_file(bag_path, repeat_playback=False)
  • 添加bag读取结束判断逻辑
    在pipeline初始化完成后获取playback对象,用于判断文件是否读取完成,同时可以关闭实时播放模式避免处理速度慢导致丢帧:
pipeline = rs.pipeline()
config = rs.config()
config.enable_device_from_file(bag_path, repeat_playback=False)
profile = pipeline.start(config)
# 获取播放控制对象
playback = profile.get_device().as_playback()
# 关闭实时播放,保证所有帧都会被处理
playback.set_real_time(False)

在逐帧读取的循环中添加状态判断,检测到播放停止时直接跳出循环:

while True:
    # 原有帧读取、推理代码
    # 新增结束判断
    if playback.current_status() == rs.playback_status.stopped:
        break
  • 新增MP4输出逻辑
    在帧循环开始前初始化OpenCV的视频写入对象,每处理完一帧就写入,循环结束后释放资源即可:
import cv2
# 输出参数按需调整,fps可和bag文件的录制帧率对齐,frame_size为你推理输出图像的宽高
fps = 30
frame_size = (1280, 720)
video_writer = cv2.VideoWriter("output.mp4", cv2.VideoWriter_fourcc(*'mp4v'), fps, frame_size)

# 帧处理循环中,推理绘制完成后写入帧
video_writer.write(result_frame)

# 循环结束后释放
video_writer.release()

内容的提问来源于stack exchange,提问作者Akshay Acharya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:33:02