当前位置: 首页 > 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()

效果如下

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

http://www.xdnf.cn/news/132247.html

相关文章:

  • 这个免费的AI插件,居然让我5分钟看完2小时的YouTube视频!
  • 大麦项目pro版本来袭!扫平面试中的一切疑难杂症!
  • 视频丨Google 最新 AI 眼镜原型曝光:轻量 XR+情境感知 AI 打造下一代计算平台
  • 【C语言练习】002. 理解C语言的基本语法结构
  • 存储新势力:助力DeepSeek一体机
  • GIT下载步骤
  • Base64编码原理:二进制数据与文本的转换技术
  • 因泰立H13激光雷达赋能垃圾发电厂,炉渣体积测量与装车智能化
  • 跨Linux发行版CPU指令集兼容性深度解析与实践指南
  • 一文读懂Nginx应用之 CentOS安装部署Nginx服务
  • 当智驾成标配,车企暗战升级|2025上海车展
  • 告别 “幻觉” 回答:RAG 中知识库与生成模型的 7 种对齐策略
  • CUDA编程之Grid、Block、Thread线程模型
  • 用 ESP32 模拟 Wiegand 刷卡器:开发门禁系统必备的小工具
  • 【CODEMATE】进制转换(transform) 粤港澳青少年信息学创新大赛 C/C++/Python 解题思路
  • WebUI可视化:第2章:技术基础准备
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(11): てあります。
  • 《拆掉思维里的墙》 古典-摘抄
  • k8s(9) — zookeeper集群部署(亲和性、污点与容忍测试)
  • Xmind快捷键大全
  • 【Dify系列教程重置精品版】第1课 相关概念介绍
  • android jatpack Compose 多数据源依赖处理:从状态管理到精准更新的架构设计
  • const(C++)
  • Modbus主从通信功能码与报文格式
  • C++初窥门径
  • 一文读懂 Redis 主从、哨兵、集群模式:工作机制、优缺点全梳理
  • 2025年C/C++基础面试题全解析 | 突破技术盲区,直击大厂核心考点
  • 代码随想录从子序列到编辑距离
  • vue3中nextTick的作用及示例
  • UML 类图基础和类关系辨析