pub struct Plan {}Expand description
Reconstruction plan (a value). It runs nothing and only holds “what to do and how”.
The default (Plan::default) is the aerial-formation preset + the cumulus3d stream defaults,
and the paths are placeholders (data/images, data/gps_ref.txt, out).
Fields§
§seed: Option<u64>RANSAC seed for two-view geometry and GPS alignment (if unset, differs from run to run).
threads: usizeNumber of rayon threads (0 = number of cores).
gps: Option<PathBuf>GPS record file (name latitude longitude altitude lines). Without it, alignment is impossible.
pairing: PairingPairing strategy.
input: SourceInput images.
zones: ZonesZone splitting.
align: AlignCoordinate alignment.
features: FeaturesFeature extraction.
matching: MatchingDescriptor matching.
sparse: SparseSparse reconstruction.
live: LiveLive throughput: feature extraction ahead, backlog batching, sparse previews.
dense: DenseDensification.
sinks: SinksOutput hooks.
Implementations§
Source§impl Plan
impl Plan
Sourcepub fn to_toml_annotated(&self) -> String
pub fn to_toml_annotated(&self) -> String
TOML with the profile’s effective dense defaults written as comments under empty
[dense.fusion] / [dense.filter] tables (what cumulus3d plan --print-default prints).
Comments do not change the plan: from_toml of the result equals self.
Sourcepub fn from_toml(s: &str) -> Result<Self, String>
pub fn from_toml(s: &str) -> Result<Self, String>
From a TOML string (missing items take defaults, unknown items are an error).
Sourcepub fn load(path: impl AsRef<Path>) -> Result<Self, String>
pub fn load(path: impl AsRef<Path>) -> Result<Self, String>
From a TOML file.
Examples found in repository?
53fn main() -> Result<(), String> {
54 let path = std::env::args().nth(1).ok_or("usage: frame_hook_plan <plan.toml>")?;
55 let plan = Plan::load(&path)?;
56 let seen = Arc::new(Mutex::new(Seen::default()));
57 let refined = Arc::new(Mutex::new(Vec::new()));
58 let t0 = Instant::now();
59 let (s, r) = (seen.clone(), refined.clone());
60 let recon = Recon::from_plan(plan)
61 .on_frame(move |f: &Arc<Frame>| {
62 let mut s = s.lock().unwrap();
63 let t = t0.elapsed().as_secs_f64();
64 s.first_s.get_or_insert(t);
65 s.last_s = t;
66 *s.per_camera.entry(f.camera.clone()).or_default() += 1;
67 *s.sizes.entry((f.width, f.height)).or_default() += 1;
68 s.bytes += f.rgb.len();
69 s.positions = s.positions.max(f.position + 1);
70 if f.rgb.len() != (f.width * f.height * 3) as usize || f.width == 0 {
71 s.bad += 1;
72 }
73 })
74 .on_zone_refined(move |z, cloud| r.lock().unwrap().push((z.zone, cloud.len())))
75 .build()
76 .map_err(|e| e.to_string())?;
77 let summary = recon.run()?;
78 let s = seen.lock().unwrap();
79 let total: usize = s.per_camera.values().sum();
80 println!(
81 "frame hook: {total} frames over {} positions, per camera {:?}, sizes {:?}, {:.1} MB RGB, bad {}",
82 s.positions,
83 s.per_camera,
84 s.sizes,
85 s.bytes as f64 / 1e6,
86 s.bad
87 );
88 println!(
89 "frame hook: first frame at {:.2}s, last at {:.2}s; run total {:.1}s",
90 s.first_s.unwrap_or(0.0),
91 s.last_s,
92 t0.elapsed().as_secs_f64()
93 );
94 println!("refined zones (zone, dense points): {:?}", refined.lock().unwrap());
95 println!("events {}, hook calls {}, hook panics {}", summary.events, summary.hook_calls, summary.hook_panics);
96 if total == 0 || s.bad > 0 || summary.hook_panics > 0 {
97 return Err("frame hook check failed".into());
98 }
99 Ok(())
100}Sourcepub fn from_stream(c: &StreamConfig) -> Self
pub fn from_stream(c: &StreamConfig) -> Self
The plan equivalent to the cumulus3d stream settings (<src>/images, <src>/gps_ref.txt, aerial-formation cameras).
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Plan
impl<'de> Deserialize<'de> for Plan
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl StructuralPartialEq for Plan
Auto Trait Implementations§
impl Freeze for Plan
impl RefUnwindSafe for Plan
impl Send for Plan
impl Sync for Plan
impl Unpin for Plan
impl UnsafeUnpin for Plan
impl UnwindSafe for Plan
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T, U> Imply<T> for U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
impl<T> Scalar for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.