如何基于OpenPCDet实现.bin格式激光点云的连续检测与可视化?
解决OpenPCDet自动连续检测激光点云并展示的方法
1. 修改可视化逻辑,取消窗口阻塞
问题根源在于Open3D默认的draw_geometries()是阻塞式调用,必须手动关闭窗口才会执行后续代码。需要替换为非阻塞的可视化流程:
找到demo.py中负责可视化的代码段(通常在visualize_results函数内),将原阻塞代码:
o3d.visualization.draw_geometries([points_obj, boxes_obj])
替换为以下自动关闭的非阻塞代码:
import open3d as o3d import time # 创建可视化窗口并添加元素 vis = o3d.visualization.Visualizer() vis.create_window() vis.add_geometry(points_obj) vis.add_geometry(boxes_obj) # 更新渲染并展示指定时长 vis.update_renderer() vis.poll_events() time.sleep(0.3) # 可根据需求调整展示时长,单位秒 # 自动关闭窗口 vis.destroy_window()
2. 批量遍历所有.bin文件
修改demo.py的主逻辑,让脚本自动遍历目标目录下的所有点云文件:
import os import glob import numpy as np # 指定点云文件目录 velodyne_dir = "../velodyne/" # 按编号顺序获取所有.bin文件 bin_files = sorted(glob.glob(os.path.join(velodyne_dir, "*.bin"))) # 遍历执行检测与可视化 for bin_file in bin_files: # 加载点云数据 points = np.fromfile(bin_file, dtype=np.float32).reshape(-1, 4) # 执行模型检测 pred_dicts, _ = model.forward([points]) # 调用修改后的可视化函数展示结果 visualize_results(points, pred_dicts)
如果原脚本支持通过--data_path指定目录,也可以保留参数逻辑,判断传入路径为目录时自动遍历所有文件。
3. 运行修改后的脚本
完成代码修改后,执行以下命令即可自动连续检测所有点云:
python demo.py --cfg_file cfgs/kitti_models/pointrcnn.yaml --ckpt ../OpenPCDet/stev_models/pointrcnn_7870.pth
脚本会按编号顺序加载每个.bin文件,自动完成检测、展示(指定时长后自动关闭窗口),实现类似视频的连续展示效果。
内容的提问来源于stack exchange,提问作者סטיבן
相关产品推荐
相关产品推荐

