use ultralytics_inference::YOLOModel;
#[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)]
fn main() -> Result<(), Box<dyn std::error::Error>> {
let model_path = std::env::args()
.nth(1)
.unwrap_or_else(|| "yolo26n.onnx".to_string());
let mut model = YOLOModel::load(&model_path)?;
let results = model.predict_default()?;
for result in &results {
if let Some(masks) = &result.masks {
println!("segment: {} instance masks", masks.len());
println!(" raw data shape {:?}", masks.data.shape());
println!("{:?}", masks.data);
} else if let Some(keypoints) = &result.keypoints {
println!("pose: {} sets of keypoints", keypoints.len());
} else if let Some(obb) = &result.obb {
println!("obb: {} oriented boxes", obb.len());
} else if let Some(probs) = &result.probs {
let top1 = probs.top1();
let name = result.names.get(&top1).map_or("unknown", String::as_str);
println!("classify: top1 {name} {:.2}", probs.top1conf());
} else if let Some(sem) = &result.semantic_mask {
println!("semantic: class map shape {:?}", sem.data.shape());
println!("{:?}", sem.data);
} else if let Some(depth) = &result.depth {
println!(
"depth: map shape {:?}, range {:?}..{:?}",
depth.data.shape(),
depth.min_depth(),
depth.max_depth()
);
println!("{:?}", depth.data);
} else if let Some(boxes) = &result.boxes {
println!("detect: {} objects", boxes.len());
for i in 0..boxes.len() {
let cls = boxes.cls()[i] as usize;
let name = result.names.get(&cls).map_or("unknown", String::as_str);
println!(" {name} {:.2}", boxes.conf()[i]);
}
}
}
Ok(())
}