1.首先去官网下载对应的工具库https://github.com/linClubs/nuscenes2kitti.git

2.官网有具体的教程,不过编译的时候需要删除nus2kitti_ws/src的Cmake文件,除此之外在命令窗口进行软链接export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libffi.so.7

3.详细过程如下:

# 记得切一个能运行BEVFusion,fastbev,bevdet,mmdetetion3d的python虚拟环境运行该工程
# 报错需要什么库就编译什么库

# 1 激活自己的虚拟环境 本人使用bevdet
conda activate bevdet

# 2 安装依赖包 
pip install pyyaml nuscenes-devkit python-opencv pypcd 

# 3 安装ros发布box的依赖  需要ros可视化才需要安装
pip install pyyaml rospkg empy catkin_pkg
sudo apt install ros-noetic-jsk-recognition ros-noetic-jsk-rviz-plugins

# 4 创建工作空间
mkdir -p nus2kitti_ws/src && cd nus2kitti_ws/src

# 5 拉取源码
git clone https://github.com/linClubs/nuscenes2kitti.git

# 6 编译
cd nus2kitti_ws && catkin_make

# 7 运行时报错
ModuleNotFoundError: No module named 'cStringIO'
# 修改如下 python3中StringIO是从io导入
try:
    from cStringIO import StringIO

    from io import StringIO

# 1. 只发布前视图和点云
roslaunch nus_pkg nus_pub_cloud.launch

# 2. 发布环视,点云, 3Dbox
roslaunch nus_pkg nus_pub_box3d.launch

# 3 nus2kitti
rosrun nus_pkg nus2kitti.py
# 或者
cd nus_pkg/scripts
python nus2kitti.py

4.这个库写的超详细还可以制作自己的数据集,可以自己研究研究

 5.之后运行后生成的标签是这样的,我们进行转换

 6.之后我们写个下面的脚本转换一下 

nuscenes2kitti

7.转换之后就是正常的数据集格式:

8.最后一步重要的是需要改变角度要不最后检测结果会偏90°,相应的程序代码为:

import os
import math# 文件夹路径
folder_path = '/home/pc/2026BOSS/OpenPCDet/data/custom/training/label_2'# 遍历文件夹中的所有文件
for filename in os.listdir(folder_path):# 只处理 .txt 文件if filename.endswith('.txt'):file_path = os.path.join(folder_path, filename)# 读取文件内容with open(file_path, 'r') as file:lines = file.readlines()# 处理每一行的最后一个数字new_lines = []for line in lines:parts = line.strip().split()if parts:# 将最后一个数字加上 pi/2parts[-1] = str(float(parts[-1]) + math.pi / 2)new_line = ' '.join(parts)new_lines.append(new_line)# 将处理后的内容写回文件with open(file_path, 'w') as file:file.write('\n'.join(new_lines) + '\n')print("处理完成")

9 ,转换之后的标签如下所示:

10.这里写了一个点云可视化脚本,比较方便。


import sys
import os
import numpy as np
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QLabel,QFileDialog, QVBoxLayout, QHBoxLayout, QComboBox, QSlider
)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QScreen
from mayavi.core.ui.api import MayaviScene, SceneEditor
from mayavi.tools.mlab_scene_model import MlabSceneModel
from traits.api import HasTraits, Instance
from traitsui.api import View, Item, Group# 嵌入 Mayavi 的 Traits 视图
class MayaviView(HasTraits):scene = Instance(MlabSceneModel, ())view = View(Group(Item('scene', editor=SceneEditor(scene_class=MayaviScene), show_label=False),),resizable=True,width=800,height=600)def __init__(self, **kwargs):super(MayaviView, self).__init__(**kwargs)# 设置背景颜色为黑色self.scene.mayavi_scene.scene.background = (0, 0, 0)def plot(self, x, y, z, point_size):# 清空当前图self.scene.mlab.clf()# 绘制所有点为白色self.scene.mlab.points3d(x, y, z,mode='point',color=(1, 1, 1),  # 白色scale_factor=point_size,figure=self.scene.mayavi_scene)class PointCloudViewer(QWidget):def __init__(self):super().__init__()self.setWindowTitle("BIN 点云可视化")# 设置窗口大小为屏幕大小的百分比以实现自适应screen = QScreen.availableGeometry(QApplication.primaryScreen())self.resize(screen.width() * 0.8, screen.height() * 0.8)self.mayavi_widget = Noneself.x = self.y = self.z = None# 主布局main_layout = QVBoxLayout()# 文件标签和按钮布局file_layout = QHBoxLayout()self.label = QLabel("请选择一个 .bin 文件")file_layout.addWidget(self.label)self.select_button = QPushButton("打开文件")self.select_button.clicked.connect(self.open_file)file_layout.addWidget(self.select_button)main_layout.addLayout(file_layout)# 点尺寸滑块布局config_layout = QHBoxLayout()config_layout.addWidget(QLabel("点尺寸:"))self.size_slider = QSlider(Qt.Horizontal)self.size_slider.setMinimum(1)self.size_slider.setMaximum(20)self.size_slider.setValue(5)self.size_slider.valueChanged.connect(self.update_plot)config_layout.addWidget(self.size_slider)main_layout.addLayout(config_layout)self.setLayout(main_layout)def open_file(self):filename, _ = QFileDialog.getOpenFileName(self, "选择点云 .bin 文件", "", "BIN files (*.bin)")if filename:self.label.setText(f"已加载: {os.path.basename(filename)}")self.load_bin(filename)self.show_mayavi()def load_bin(self, filepath):raw = np.fromfile(filepath, dtype=np.float32)if raw.size % 4 == 0:pc = raw.reshape(-1, 4)elif raw.size % 3 == 0:pc = raw.reshape(-1, 3)pc = np.concatenate([pc, np.zeros((pc.shape[0], 1), dtype=np.float32)], axis=1)else:raise ValueError(f"无法识别的 BIN 格式,总元素数 {raw.size}")self.x, self.y, self.z = pc[:, 0], pc[:, 1], pc[:, 2]def show_mayavi(self):if self.mayavi_widget is None:self.mayavi_view = MayaviView()self.mayavi_widget = self.mayavi_view.edit_traits(parent=self, kind='subpanel').control# 将 Mayavi 控件添加到主布局下方self.layout().addWidget(self.mayavi_widget)self.update_plot()def update_plot(self):if self.x is None:returnpoint_size = self.size_slider.value() * 0.1  # 调整缩放因子self.mayavi_view.plot(self.x, self.y, self.z, point_size)if __name__ == '__main__':app = QApplication(sys.argv)viewer = PointCloudViewer()viewer.show()sys.exit(app.exec_())

11.训练后的检测效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85828.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85828.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/85828.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[设计模式]创建型模式-单例模式

前言 单例模式是最简单的一种模式。在Go中,单例模式指的是全局只有一个实例,并且它负责创建自己的对象。单例模式有减少内存和系统资源开销、防止多个实例产生冲突等优点。 因为单例模式保证了实例的全局唯一性,并且只被初始化一次&#xf…

嵌入式开发之嵌入式系统硬件架构设计时,如何选择合适的微处理器/微控制器?

在嵌入式系统硬件架构设计中,选择合适的微处理器 / 微控制器(MCU/MPU)是关键环节,需从多维度综合评估。以下是系统化的选择策略及核心考量因素: 一、明确应用需求与核心指标 1. 性能需求 处理能力:根据任务复杂度确定主频、指令集架构(ISA)。 简单控制任务(如家电开…

《汇编语言:基于X86处理器》第3章 复习题和练习,编程练习

本篇记录《汇编语言:基于X86处理器》第3章 复习题和练习,编程练习的学习。 3.9复习题和练习 3.9.1 简答题 1.举例说明三种不同的指令助记符。 答:MOV,ADD和MUL。 2.什么是调用规范?如何在汇编语言声明中使用它? 答&#x…

基于STM32六路温度监测上下限报警

基于STM32六路温度监测报警 (仿真+程序) 功能介绍 具体功能: 1.DS18B20测得的六路温度值; 2.LCD1602实时显示六路温度值; 3.当某一路超出温度设定上下限,对应蜂鸣器会报警; 硬件…

七、Redis的持久化策略

两种持久化策略: Redis这个缓存存放的数据是存到内存的,假如宕机了,那么就会数据丢失。如何避免这种情况呢?由此,Redis推出了两种持久化机制。 第一种机制就是以二进制序列形式存储数据的RDB快照,第二种机制就是以命令…

GVim-vimrc 字体缩放与界面优化配置

GVim-vimrc 字体缩放与界面优化配置 文章目录 GVim-vimrc 字体缩放与界面优化配置背景问题解决方案1. 字体大小调整函数增加字体大小函数减少字体大小函数 2. 快捷键映射3. 自定义命令 附加界面优化光标行列高亮 完整配置使用技巧 背景问题 在使用Vim编辑器时,我们…

Oracle|Oracle SQL*Plus 配置上下翻页功能

在数据库管理工作中,高效的命令行操作体验对于提升工作效率至关重要。本文将详细介绍如何通过安装 rlwrap 工具并进行环境变量配置,让 SQL*Plus 获得现代化的命令行体验,助力数据库操作效率的大幅提升。 一、安装准备:创建软件目…

PowerShell读取CSV并遍历组数组

在 PowerShell 中,从 CSV 文件获取 Group 列的数据并遍历输出,可以按照以下步骤操作: 步骤说明: 读取 CSV 文件:使用 Import-Csv 命令加载 CSV 数据。 提取 Group 数组:通过管道操作 | Select-Object -Ex…

【unitrix】 3.7 类型级加一计算(Add1.rs)

一、源码 这段代码实现了一个类型级别的加法操作(Add1 trait),允许在编译时对数字类型进行加一操作。它使用了类型系统来表示数字(如 Z0、P1、N1 等),并定义了它们的加一行为。 //! 加一操作特质实现 / I…

据字典是什么?和数据库、数据仓库有什么关系?

目录 一、数据字典的定义及作用 1. 对于数据开发者 2. 对于业务人员 3. 对于数据管理员 二、数据字典的组成 1. 数据项 2. 数据结构 3. 数据流 4. 数据存储 5. 处理过程 三、数据字典与数据库的关系 1. 数据字典是数据库的重要组成部分 2. 数据字典为数据库设计和…

附加日志会跟随着expdp一起导出吗

数据泵在导出数据表时会不会带着附加日志一起导出,可以使用数据泵导入参数sqlfile进行sql追踪。 实验 1.新建测试表 SQL> create table Benjamin.tb_test (id int); Table created.SQL> alter table Benjamin.tb_test add supplemental log data(all) colu…

Python漂浮的爱心

系列文章 序号直达链接Tkinter1Python李峋同款可写字版跳动的爱心2Python跳动的双爱心3Python蓝色跳动的爱心4Python动漫烟花5Python粒子烟花Turtle1Python满屏飘字2Python蓝色流星雨3Python金色流星雨4Python漂浮爱心5Python爱心光波①6Python爱心光波②7Python满天繁星8Pytho…

3、做中学 | 二年级上期 Golang数据类型和常量/变量声明使用

一、基本数据类型 在 Go 编程语言中,数据类型用于声明函数和变量。 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。 Go 基本数据类型 类别类型描述零值示例取…

php5 与 mysql8的兼容问题

php5 与 mysql8的兼容问题 环境 Linux: ubuntu20.04 Mysql&#xff1a; 8.0.33 Php: 5.6 代码 # cat test.php <?php$link mysqli_connect("127.0.0.1", "root", "123456");if ($link) {echo "ok"; } else {echo "fail&…

从0开始学linux韦东山教程Linux驱动入门实验班(1)

本人从0开始学习linux&#xff0c;使用的是韦东山的教程&#xff0c;在跟着课程学习的情况下的所遇到的问题的总结,理论虽枯燥但是是基础。本人将前几章的内容大致学完之后&#xff0c;考虑到后续驱动方面得更多的开始实操&#xff0c;后续的内容将以韦东山教程Linux驱动入门实…

MSPM0G3507学习笔记(二) 超便捷配置led与按键

电赛备赛中&#xff0c;打算系统过一遍MSPM0G3507的各个部分&#xff0c;同时把过程记录下来。本系列以代码全部能用复用性、可移植性高为目的。本系列所有的代码会开源至github&#xff0c;如果觉得有用&#xff0c;请点个赞/给我的github仓库点一颗star吧。 github地址&…

day03-微服务01

【黑马程序员SpringCloud微服务技术栈实战教程&#xff0c;涵盖springcloud微服务架构Nacos配置中心分布式事务等】 暂时无法在飞书文档外展示此内容 之前我们学习的项目一是单体项目&#xff0c;可以满足小型项目或传统项目的开发。而在互联网时代&#xff0c;越来越多的一线…

嵌入式Linux系统内存占用率高的原因、后果与防控全解析

作者&#xff1a;嵌入式Jerry 【欢迎关注“嵌入式Jerry”&#xff0c;获取更多Linux/驱动/性能实战干货】 推荐阅读&#xff1a;《Yocto项目实战教程&#xff1a;高效定制嵌入式Linux系统》 京东正版促销&#xff0c;支持作者&#xff01;https://item.jd.com/15020438.html 嵌…

【案例分享】如何用 DHTMLX Scheduler 构建灵活高效的资源调度系统?

在企业信息化进程加速的今天&#xff0c;资源调度与任务管理已成为ERP系统中的关键模块。今天&#xff0c;我们带来了一个来自 X-Interactive 的精彩应用案例&#xff0c;看他们如何借助 DHTMLX Scheduler 实现更智能的任务分配与资源规划。 DHTMLX Scheduler 试用下载 &…

Kafka 向 TDengine 写入数据

TDengine Kafka Connector 包含 TDengine Source Connector 和 TDengine Sink Connector 两个插件。用户只需提供简单的配置文件&#xff0c;就可以将 Kafka 中指定 topic 的数据&#xff08;批量或实时&#xff09;同步到 TDengine&#xff0c;或将 TDengine 中指定数据库的数…