1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
//! 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.
//!
//! ```ignore
//! 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.
//!
//! ```ignore
//! 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.
//!
//! ```ignore
//! 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.
//!
//! ```ignore
//! 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](https://docs.rs/nalgebra)
//!
//! Add this extension crate to enable [nalgebra](https://docs.rs/nalgebra) support.
//!
//! ```sh
//! cargo add nuscenes-data-nalgebra
//! ```
//!
//! It add extra methods to existing types. This example obtains an
//! nalgebra transformation from an ego\_pose object.
//!
//! ```ignore
//! 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](https://docs.rs/opencv), [image](https://docs.rs/image)
//! and [pcd-rs](https://docs.rs/pcd-rs) crates. Add these extension
//! crates to enable this.
//!
//! ```sh
//! cargo add nuscenes-data-opencv
//! cargo add nuscenes-data-image
//! cargo add nuscenes-data-pcd
//! ```
//!
//! It adds data loading methods on sample data objects.
//!
//! ```ignore
//! // 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 => {}
//! }
//! ```
pub mod dataset;
pub mod error;
pub mod loader;
pub mod serializable;
pub mod utils;
pub use crate::{dataset::Dataset, loader::DatasetLoader, serializable::Token};