spatial-maker 0.3.2

Convert 2D images and videos to stereoscopic 3D spatial content for Apple Vision Pro using AI depth estimation
Documentation
use clap::Parser;
use spatial_maker::{generate_stereo_pair, model, output, OnnxDepthEstimator};

#[derive(Parser)]
#[command(name = "spatial-maker-onnx")]
#[command(about = "Convert a 2D photo to side-by-side stereo using ONNX Runtime")]
struct Args {
	input: String,

	#[arg(short, long)]
	output: String,

	#[arg(long, default_value = "30")]
	max_disparity: u32,

	#[arg(long, default_value = "s")]
	encoder_size: String,
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
	let args = Args::parse();

	let input_image = image::open(&args.input)?;

	let model_path = model::find_model(&args.encoder_size)?;

	let estimator = OnnxDepthEstimator::new(model_path.to_str().unwrap())?;

	let start = std::time::Instant::now();
	let depth_map = estimator.estimate(&input_image)?;
	let depth_time = start.elapsed();
	eprintln!("Depth estimation: {:?}", depth_time);

	let (left, right) = generate_stereo_pair(&input_image, &depth_map, args.max_disparity)?;

	let sbs = output::create_sbs_image(&left, &right);
	sbs.save(&args.output)?;

	eprintln!("Total time: {:?}", start.elapsed());

	Ok(())
}