Crate nuscenes_data
source ·Expand description
nuScenes dataset loader.
Tutorial
This section gives a brief overview of this crate. It assumes the dataset is located at “/path/to/dataset” directory. It contains a “v1.0-trainval” directory, which name is also the version number.
Load nuScenes Dataset
Import Dataset type and use it to load the data directory. The dataset version is “v1.0-trainval” in this example. You should able to find the “/path/to/dataset/v1.0-trainval” directory.
use nuscenes_data::Dataset;
let dataset = Dataset::load("v1.0-trainval", "/path/to/dataset")?;
Traverse Scenes and Samples in the Dataset
The dataset contains many scenes. Use dataset.scene_iter()
to
iterate over scenes in the dataset. Scenes contain samples. Use
scene.sample_iter()
to iterate them.
for scene dataset.scene_iter() {
for sample in scene.sample_iter() {
for annotation in sample.annotatoin_iter() { /* omit */ }
for data in sample.sample_data_iter() { /* omit */ }
}
}
Look-up Samples using Tokens
It supports data query using tokens. The usage is straightforward.
let sample_token = Token::from_str("24fa5b014824491f9bd2f9e4a1a1b5b8").unwrap();
let sample = dataset.sample(sample_token).unwrap();
let sensor_token = Token::from_str("1f69f87a4e175e5ba1d03e2e6d9bcd27").unwrap();
let sensor = dataset.sensor(sensor_token).unwrap();
Associated Data Query
It’s easy to search to associated data in the dataset.
let scene = dataset.scene_iter().first().unwrap();
let sample = scene.sample_iter().first().unwrap();
let data = sample.sample_data_iter().first().unwrap();
let ego_pose = data.ego_pose();
let calibrated_sensor = data.calibrated_sensor();
Integration with nalgebra
Add this extension crate to enable nalgebra support.
cargo add nuscenes-data-nalgebra
It add extra methods to existing types. This example obtains an nalgebra transformation from an ego_pose object.
use nuscenes_data_nalgebra::prelude::*;
use nalgebra as na;
let ego_pose = dataset.ego_pose(token).unwrap();
let transform: na::Isometry3<f64> = ego_pose.na_transform();
let old_point = na::Point3::new(0.0, 0.0, 0.0);
let new_point = &transform * &old_point;
Load Data Files
This crate supports integration with opencv, image and pcd-rs crates. Add these extension crates to enable this.
cargo add nuscenes-data-opencv
cargo add nuscenes-data-image
cargo add nuscenes-data-pcd
It adds data loading methods on sample data objects.
// image
use nuscenes_data_image::prelude::*;
let image_sample = dataset.sample_data(token).unwrap();
let image: image::DynamicImage = image_sample.load_dynamic_image()?.unwrap();
// opencv
use nuscenes_data_opencv::prelude::*;
let image_sample = dataset.sample_data(token).unwrap();
let image: opencv::core::Mat = image_sample.load_opencv_mat()?.unwrap();
// pcd-rs
use nuscenes_data_pcd::{prelude::*, PointCloud};
let pcd_sample = dataset.sample_data(token).unwrap();
let pcd: PointCloud = pcd_sample.load_pcd()?.unwrap();
match pcd {
PointCloud::Pcd(points) => { /* Loaded from a .pcd file */ }
PointCloud::Bin(points) => { /* Loaded from a .bin file */ }
PointCloud::NotSupported => {}
}
Re-exports
pub use crate::dataset::Dataset;
pub use crate::loader::DatasetLoader;
pub use crate::serializable::Token;