当前位置: 首页 > news >正文

连续帧点云目标检测结果展示,python实现

在用centerpoint目标检测模型对连续帧点云进行预测,将结果保存为同名txt文件
在这里插入图片描述
txt里每一行的内容是x y z l w h angle class conf;xyz是3Dbox的中心坐标,lwh对应长宽高,angle是航向角,class是目标类别,conf是目标检测置信度。

下面的代码是实现连续帧点云目标检测结果的可视化

import open3d
import os, time
import numpy as np
import glob text_labels = {'Car':0, 'Pedestrian':1, 'Cyclist':2}box_colormap = [(1, 1, 1),(0, 1, 0),(0, 1, 1),(1, 1, 0),
]def translate_boxes_to_open3d_instance(gt_boxes):"""4-------- 6/|         /|5 -------- 3 .| |        | |. 7 -------- 1|/         |/2 -------- 0"""center = gt_boxes[0:3]lwh = gt_boxes[3:6]axis_angles = np.array([0, 0, gt_boxes[6] + 1e-10])rot = open3d.geometry.get_rotation_matrix_from_axis_angle(axis_angles)box3d = open3d.geometry.OrientedBoundingBox(center, rot, lwh)line_set = open3d.geometry.LineSet.create_from_oriented_bounding_box(box3d)lines = np.asarray(line_set.lines)lines = np.concatenate([lines, np.array([[1, 4], [7, 6]])], axis=0)line_set.lines = open3d.utility.Vector2iVector(lines)return line_set, box3dvis = open3d.visualization.Visualizer()
vis.create_window()
pointcloud = open3d.geometry.PointCloud()
to_reset = True
vis.add_geometry(pointcloud)#将点云先添加到窗口pcd_fifles = glob.glob('pcd/*.pcd')
bin_files =  glob.glob('velodyne/*.bin')
res_txt_files = glob.glob('result_txt/*.txt')  # 预测结果while True:for i in range(len(pcd_fifles)):# for i in range(len(bin_files)):# 点云文件是pcdpcd = open3d.io.read_point_cloud(pcd_fifles[i])   points = np.asarray(pcd.points)# 点云文件是bin# bin = np.fromfile(bin_files[i], dtype=np.float32).reshape(-1, 4)# points = np.asarray(bin)pointcloud.points = open3d.utility.Vector3dVector(points[:, :3])# # #设置点的颜色为白色# pointcloud.paint_uniform_color([1,1,1])base_filename = os.path.basename(res_txt_files[i])results = np.loadtxt(res_txt_files[i])ref_boxes = results[:,0:7]ref_labels = results[:,7]ref_scores = results[:,8]#设置颜色背景为黑色opt = vis.get_render_option()opt.background_color = np.asarray([0,0,0])line_sets = []for i in range(ref_boxes.shape[0]):line_set, box3d = translate_boxes_to_open3d_instance(ref_boxes[i])if ref_labels is None:line_set.paint_uniform_color((1, 0, 0))elif ref_scores[i]>=0.5:line_set.paint_uniform_color(box_colormap[int(ref_labels[i])])line_sets.append(line_set)     for geom in line_sets: vis.add_geometry(geom)# 设置初始视角ctr = vis.get_view_control()ctr.set_front([0, 0, 1])       # 面向z轴ctr.set_up([-1, 0, 0])         # x轴向下ctr.set_lookat([0.5,0.5,0.5])  # 焦点中心ctr.set_zoom(0.15)             # 缩小倍数,需要自己多次尝试ctr.translate(x=0, y=600, xo=0.0, yo=0.0)  # 点云在像素坐标上的平移,需要自己多次尝试vis.update_geometry(pointcloud)if to_reset:vis.reset_view_point(True)to_reset = Falsevis.poll_events()vis.update_renderer()for geom in line_sets:# reset_bounding_box = False, 是为了保持视图的视角和大小vis.remove_geometry(geom,reset_bounding_box = False)del geom  # 删除引用以允许垃圾回收time.sleep(0.1)# break
vis.destroy_window()

效果如下

连续帧点云目标检测可视化展示

相关文章:

  • 唯创安全:从传统到智能,工厂智能叉车AI防撞系统解决方案
  • 论文阅读笔记——ZeroGrasp: Zero-Shot Shape Reconstruction Enabled Robotic Grasping
  • 【SAM2代码解析】training部分代码详解-训练流程
  • 基准指数选股策略思路
  • 从代码学习深度学习 - 微调 PyTorch 版
  • 工业相机——镜头篇【机器视觉,图像采集系统,成像原理,光学系统,成像光路,镜头光圈,镜头景深,远心镜头,分辨率,MTF曲线,焦距计算 ,子午弧矢】
  • BeeWorks Meet:私有化部署视频会议的高效选择
  • 【Linux】进程优先级和进程切换
  • 张 LLM提示词拓展16中方式
  • 线上图书借阅小程序源码介绍
  • 关于使用git init --bare 裸仓库的使用
  • 如何在奥维互动地图里加载星图云卫星地图
  • SiamFC 算法详解
  • Shell脚本-流程控制语句应用案例
  • 龙虎榜——20250425
  • Jsp技术入门指南【十】IDEA 开发环境下实现 MySQL 数据在 JSP 页面的可视化展示,实现前后端交互
  • Python编程的真谛:超越语法,理解编程本质
  • 【金仓数据库征文】- 金融HTAP实战:KingbaseES实时风控与毫秒级分析一体化架构
  • mapbox高阶,使用本地dem数据、等高线面数据实现千里江山图效果
  • 如何建立员工培训体系?
  • 一季度公募管理规模出炉:44家实现增长,4家规模环比翻倍
  • “今日海上”对话“今日维也纳”,东西方艺术在上海碰撞
  • 央行25日开展6000亿元MLF操作,期限为1年期
  • 北京画院上海“点画”:评论家展场一对一评点
  • 再放宽!新版市场准入负面清单发布,无人驾驶航空器、电子烟等新业态被纳入
  • 解放日报:上海一季度GDP同比增长5.1%,两大新动能助推经济“开门红”