将自己的点云数据转为bin并使用openpcdet检测

前言:在使用openpcdet中训练好了数据,想使用自己采集的数据进行验证,为后续制作自己的数据集进行铺垫,记录以下自己对数据的各种处理操作。之前一直显示不出来的问题:转bin时没有对数据格式进行限制,需要转为float32类型。改正后可以正常显示,但是对自己的数据进检测结果不尽人意。(考虑是由于失去反射前度的信息,以及安装的位置不同)

在实验的过程中安装了python-pcl库,考虑到后续可能会应用pcl库,所以顺便使用pcl可视化bin文件类型的点云数据。Ubuntu20.04使用python-pcl可以参考如下博客:

​​​​​​(20条消息) Ubuntu20安装python-pcl_zsssrs的博客-CSDN博客_ubuntu20安装pythonz​​​​​​​icon-default.png?t=M85Bhttps://blog.csdn.net/zsssrs/article/details/120054425将文章中提到的pcl相关的两个文件复制进自己的虚拟环境对应的文件夹,注意如果使用python3.8以下会报from ._pcl import *ModuleNotFoundError: No module named 'pcl._pcl'的错误,将自己的python环境更新为3.8即可。

对rosbag中的点云数据保存为txt:

#直接从rosbag包读取点云保存为txt文件
from cmath import nan
import rosbag
import numpy as np
import sensor_msgs.point_cloud2 as pc2
bag_file = '/home/t/t/rosbag/0827/704966_2022_08_24_13_39_25.bag'
bag = rosbag.Bag(bag_file, "r")
info = bag.get_type_and_topic_info()
print(info)

bag_data = bag.read_messages('/middle/rslidar_points')
for topic, msg, t in bag_data:
    lidar = pc2.read_points(msg)
    points = np.array(list(lidar))
    f=open("testpoint.txt","w")
    jishu=0
    for p1 in points:
        s = str(p1[0])+','+str(p1[1])+','+str(p1[2])
        f.write(s+'\n')
        jishu+=1
        print(jishu)
    f.close()

将csv数据转为bin

# 将 csv格式转为bin格式
# 反射强度需要数据归一化,这里简化直接置为0
import pandas as pd
import numpy as np
import open3d as o3d
points = pd.read_csv('/home/t/t/csv/50.csv')
points = np.array(points)
points[:,3]=0
pcd_vector = o3d.geometry.PointCloud()
# 加载点坐标
pcd_vector.points = o3d.utility.Vector3dVector(points[:, :3])
o3d.visualization.draw_geometries([pcd_vector])
points.astype(np.float32).tofile('test_16.bin')
print(points)

将txt数据转为bin:

#里面的txt由pcd格式转换的,所以没有反射强度。故将反射强度写为0
from ctypes import pointer
import open3d as o3d
import numpy as np

txt_path = '/home/t/t/py_work/testpoint.txt'
# 通过numpy读取txt点云
pcd = np.genfromtxt(txt_path, delimiter=",")

pcd_vector = o3d.geometry.PointCloud()
# 加载点坐标
pcd_vector.points = o3d.utility.Vector3dVector(pcd[:, :3])
o3d.visualization.draw_geometries([pcd_vector])
point = np.asanyarray(pcd_vector.points)
size_point = len(point)
point = np.column_stack((point,np.arange(1,size_point+1)))
point[:,3]=0
point.astype(np.float32).tofile('test.bin')
print(point)
np.save("test.npy",point)

运行demo后的效果图(128线的数据):原始图像是360度的,在使用openpcdet平台时会自动将裁减为合适kitti的数据角度,这里使用的pointpillar训练的kitii数据集而没有对自己的数据进行训练(还没制作数据集),由于安装高度以及雷达像素的不同,导致效果并不是特别好,后期考虑制作自己的数据再跑一跑

将自己的点云数据转为bin并使用openpcdet检测_第1张图片
 

 

你可能感兴趣的:(openpcdet,csvtobin,点云,目标检测,视觉检测)