我需要使用的Camera和Lidar的数据,因此,只下载这两个数据即可:
推荐使用迅雷下载,亲测非常快,否则需要科学上网。
mini
数据集可以全部下载,用来进行测试;trainval
因为数据集体积较大,因此只下载自己需要的部分即可。nuscenes数据集正确的保存格式:
nuscenes
trainval
maps
samples
sweeps
v1.0-trainval
cd nuscenes
# 传输
scp -P 22012 -r v1.0-trainval* [email protected]:/ai/AD2/dataset/nuscenes
mkdir trainval
tar -xvf v1.0-trainval01_blobs_camera.tar -C trainval/
tar -xvf v1.0-trainval02_blobs_camera.tar -C trainval/
tar -zvxf v1.0-trainval03_blobs_camera.tgz -C trainval/
tar -zvxf v1.0-trainval04_blobs_camera.tgz -C trainval/
tar -zvxf v1.0-trainval05_blobs_camera.tgz -C trainval/
tar -zvxf v1.0-trainval06_blobs_camera.tgz -C trainval/
tar -zvxf v1.0-trainval07_blobs_camera.tgz -C trainval/
tar -zvxf v1.0-trainval08_blobs_camera.tgz -C trainval/
tar -zvxf v1.0-trainval09_blobs_camera.tgz -C trainval/
tar -zvxf v1.0-trainval10_blobs_camera.tgz -C trainval/
# 因为摄像头10的数据超过20G,无法使用网盘保存,因此我把它拆解为了两个
# unzip -o v1.0-trainval10_blobs_camera_samples.zip -d trainval/
# cd trainval
# cp -r v1.0-trainval10_blobs_camera_samples/samples/ ./
# cp -r v1.0-trainval10_blobs_camera_samples/sweeps/ ./
# unzip -o v1.0-trainval10_blobs_camera_sweeps.zip -d trainval/
# cp -r v1.0-trainval10_blobs_camera_sweeps/sweeps/ ./
# 使用图形化界面合并文件夹即可。
tar -zvxf v1.0-trainval01_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval02_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval03_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval04_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval05_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval06_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval07_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval08_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval09_blobs_lidar.tgz -C trainval/
tar zxvf v1.0-trainval10_blobs_lidar.tgz -C trainval/
tar -zvxf v1.0-trainval_meta.tgz -C trainval/
unzip nuScenes-map-expansion-v1.3.zip -d trainval/maps
# cp trainval/maps/expansion/* trainval/maps/
import os
import numpy as np
from nuscenes.nuscenes import NuScenes
from nuscenes.utils.data_classes import LidarPointCloud
datasetroot = '/home/innox/Dataset/nuscense-mini/mini'
def get_lidar_from_nuscenes(nuscenes):
max_f = 0
min_f = 0
my_scene = nuscenes.scene[0]
first_sample_token = my_scene['first_sample_token']
my_sample = nuscenes.get('sample', first_sample_token)
sensor = 'LIDAR_TOP'
lidar_top_data = nuscenes.get('sample_data', my_sample['data'][sensor])
# 获取lidar数据路径
lidar_file_path = os.path.join(datasetroot,lidar_top_data['filename'])
# 从lidar的bin文件中读取数据
pc = LidarPointCloud.from_file(lidar_file_path)
print(pc.points[:, :])
print(np.transpose(pc.points[:, :]))
points = np.transpose(pc.points[:, :])
for p in points:
f = p[-1] # 检验I的范围
if f > max_f:
max_f = f
elif f < min_f:
min_f = f
print(f"max_f: {max_f}, min_f: {min_f}")
# 渲染传感器数据可视化图
sensor_radar = 'RADAR_FRONT'
sensor_lidar = 'LIDAR_TOP'
radar_front_data = nusc.get('sample_data',my_sample['data'][sensor_radar])
lidar_front_data = nusc.get('sample_data',my_sample['data'][sensor_lidar])
nusc.render_sample_data(lidar_front_data['token'])
if __name__ == '__main__':
nusc = NuScenes(version='v1.0-mini', dataroot=datasetroot, verbose=True)
get_lidar_from_nuscenes(nusc)
from nuscenes.nuscenes import NuScenes
dataroot = '/home/innox/Dataset/nuscenes-mini/mini'
nusc = NuScenes(version='v1.0-mini', dataroot=dataroot, verbose=False)
last_sample_token = my_scene['last_sample_token']
sensor_lidar = 'LIDAR_TOP'
my_sample = nusc.get('sample', last_sample_token)
sensor_lidar_data = nusc.get('sample_data',my_sample['data'][sensor_lidar])
sensor_lidar_data
输出结果如下:('is_key_frame': True,
说明该帧为标注的关键帧)
如果想要获取未标注的前几帧数据,我们只需要使用关键帧中的prev
对应的token即可访问得到未标注的数据,操作如下:
sensor_lidar_last = nusc.get('sample_data',sensor_lidar_data['prev'])
sensor_lidar_last
打印结果如下:('is_key_frame': False,
说明该帧为未标注帧)
如果需要获取多帧前几帧的信息,那么只需要循环读取即可。
参考文章: