## load data, you only have to do it once

DATA_PATH = r'C:\Users\storm\Documents\3d-object-detection-for-autonomous-vehicles\train_data' + os.sep
train = pd.read_csv(DATA_PATH + 'train.csv')
sample_submission = pd.read_csv(DATA_PATH + 'sample_submission.csv')
lyftdata = LyftDataset(data_path=DATA_PATH,
                       json_path=DATA_PATH + os.sep + 'data')

## show point cloud interactively

cat_token = lyftdata.category[0]['token']
train = pd.read_csv(DATA_PATH + os.sep + 'train.csv')
token0 = train.iloc[0]['Id']
my_sample = lyftdata.get('sample', token0)
lyftdata.render_sample_3d_interactive(my_sample['token'], render_sample=False)

## sensor information

sensor = 'CAM_FRONT'
cam_front = lyftdata.get('sample_data', my_sample['data'][sensor])
img = Image.open(DATA_PATH + cam_front['filename'])
lyftdata.render_sample_data(cam_front['token'], with_anns=False)

## look at the LIDAR data associated with my_sample

lidar_top = lyftdata.get(
    'sample_data',
    my_sample['data']['LIDAR_TOP'])  # selecting LIDAR_TOP out of all LIDARs
pc = LidarPointCloud.from_file(Path(DATA_PATH + lidar_top['filename']))
# Sample
sample = lyft_data.get('sample', first_sample_token)
# print("sample keys are, ", sample.keys())
print('list sample in the first sample token')
if button.LIST_SAMPLE: lyft_data.list_sample(sample['token'])
if button.REND_PC_IMG:
    lyft_data.render_pointcloud_in_image(sample_token=sample["token"],
                                         dot_size=1,
                                         pointsensor_channel='LIDAR_TOP',
                                         camera_channel='CAM_FRONT',
                                         out_path="./data/03")

# Sample lidar in 3d
if button.REND_LIDAR_3D:
    lyft_data.render_sample_3d_interactive(sample['token'])

# Sample data
sample_data = sample['data']
# print("sample data keys are, ", sample_data.keys())

# One sensor in sample data
# lidar: type 1
lidar_top_channel = 'LIDAR_TOP'
lidar_data = sample_data[lidar_top_channel]
lidar_token = lyft_data.get('sample_data', lidar_data)
# print("lidar data keys: \n", lidar_data.keys())
# start = time.time()
# lyft_data.render_sample_data(lidar_data['token'], out_path=cfg.data.image)
# print("lidar render time: {:.3f}".format(time.time() - start))
data_path, boxes, camera_intrinsic = lyft_data.get_sample_data(