Nuscences轉kitti數據集格式nuscenes2kitti,以及.bin文件可視化

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 中指定數據庫的數…