nuScenes データセットに対する操作を記録する

1. 要件分析

最近モデルをテストしていたとき、出力された obj ファイルの一部は非常に直感的ではなく、画像ファイルに対応する点群を見つけるのが難しかったため、ファイル名を記録して使用し、画像ファイルに対応する他のセンサーの出力を見つけました。同じ瞬間。

私のニーズは次のとおりです。

テストからの出力は、単一の独立したフォルダーです。各フォルダーには、グラウンド トゥルース、環境ポイント、予測の 3 つの obj ファイルが含まれています。より適切に視覚化するには、画像と点群を同時に使用する必要があるため、LiDAR データを使用する必要がありますファイル名に基づいて他のセンサーのデータを同時に検索します。つまり、あるセンサーのデータ名に基づいて他のセンサーのデータを同時に検索し、それらをまとめて保存します。

2. コードの実装

1. 必要なパッケージをインポートする

import os
import shutil
import json
from nuscenes.nuscenes import NuScenes

# 导入数据集
nuscenes_mini_path = 'D:/数据集/目标检测系列/v1.0-mini/'
nusc = NuScenes(version='v1.0-mini', dataroot=nuscenes_mini_path, verbose=True)

インポートが成功すると、次の出力が表示されます。

2. アノテーションを読み、sample_token を見つけます。

# 读取nuScenes数据集数据标注文件(在nuScenes数据集路径下,找一下)
with open('sample_data.json', encoding='utf-8') as data_file:
    datas = json.load(data_file)

length = len(datas)
# 文件名,留意下nuScenes的文件名组织,最重要的是时间戳得找对
find_file_name = 'n008-2018-08-01-15-16-36-0400__LIDAR_TOP__1533151604048025'
sample_token = None
find_sample = None
# 以下是根据部分文件名定位出具体的一条数据,然后提取其中的sample_token
for data in datas:
    if data['filename'].find(find_file_name):
        sample_token = data['sample_token']
        break

if sample_token is None:
    print('没有找到')
else:
    find_sample = nusc.get('sample', sample_token)  # 根据sample_token 获取到整个sample
    print(find_sample)

このステップではサンプル全体を取得しますが、私のニーズとしては、各センサーのトークン値を記録するデータ データに注目します。

3. ファイルをコピーする

# 需要提取的传感器
sensors = ['CAM_FRONT', 'CAM_FRONT_RIGHT', 'CAM_BACK_RIGHT', 'CAM_BACK', 'CAM_BACK_LEFT', 'CAM_FRONT_LEFT']
# 保存路径
save_path = 'save_dir/'

tar_path = save_path + sample_token
# 在save_path下,创捡名为sample_token的文件夹
if not os.path.exists(tar_path):
    os.makedirs(tar_path)

for sensor in sensors:
    sensor = nusc.get('sample_data', find_sample['data'][sensor])
    per_img = nuscenes_mini_path + sensor['filename']
    # 也可以直接使用下面这句保存带标注的图片
    # 其中out_path需要指定文件名,如outpath = 'save_dir/test.png'
    # 如果想实现标注的个性化(边框颜色之类),需要重写render_sample_data方法
    # nusc.render_sample_data(sensor['token'],with_anns=True,out_path='') # with_anns表示带标注
    shutil.copy(per_img, tar_path)

上記のコード スニペットは、まず抽出するセンサーのリストを作成し、保存パスを指定して、データを保存するために保存パスの下にsample_tokenという名前のフォルダーを作成します。次に、各センサーに対応するデータが対応するパスにコピーされ、実行時の効果は次のとおりです。

4. ステップ 1 ~ 3 の完全なコード スニペット

import os
import shutil
from nuscenes.nuscenes import NuScenes
import json
# 导入数据集
nuscenes_mini_path = 'D:/数据集/目标检测系列/v1.0-mini/'
nusc = NuScenes(version='v1.0-mini', dataroot=nuscenes_mini_path, verbose=True)

# 读取nuScenes数据集数据标注文件
with open('sample_data.json', encoding='utf-8') as data_file:
    datas = json.load(data_file)

length = len(datas)
# 文件名,留意下nuScenes的文件名组织,最重要的是时间戳得找对
find_file_name = 'n008-2018-08-01-15-16-36-0400__LIDAR_TOP__1533151604048025'
sample_token = None
find_sample = None
# 以下是根据部分文件名定位出具体的一条数据,然后提取其中的sample_token
for data in datas:
    if data['filename'].find(find_file_name):
        sample_token = data['sample_token']
        break

if sample_token is None:
    print('没有找到')
else:
    find_sample = nusc.get('sample', sample_token)  # 根据sample_token 获取到整个sample
    print(find_sample)

# 需要提取的传感器
sensors = ['CAM_FRONT', 'CAM_FRONT_RIGHT', 'CAM_BACK_RIGHT', 'CAM_BACK', 'CAM_BACK_LEFT', 'CAM_FRONT_LEFT']
# 保存路径
save_path = 'save_dir/'
tar_path = save_path + sample_token

# 在save_path下,创捡名为sample_token的文件夹
if not os.path.exists(tar_path):
    os.makedirs(tar_path)

for sensor in sensors:
    sensor = nusc.get('sample_data', find_sample['data'][sensor])
    per_img = nuscenes_mini_path + sensor['filename']
    shutil.copy(per_img, tar_path) #复制操作

おすすめ

転載: blog.csdn.net/u014295602/article/details/128070515
おすすめ