use ort::{session::builder::SessionBuilder, value::Value}; use ndarray::Array; use std::path::Path; fn main() -> anyhow::Result<()> { ort::set_api(ort_tract::api()); let mut session = SessionBuilder::new()? // путь к ONNX файлу .commit_from_file("./vision_model_int8.onnx")?; // 2) Загрузим картинку и конвертируем в тензор let img = image::open(Path::new("./example.png"))? .to_rgb8(); let resized = image::imageops::resize(&img, 224, 224, image::imageops::FilterType::Nearest); let input_tensor: Vec<f32> = resized .pixels() .flat_map(|p| { let [r, g, b] = p.0; // нормализация в float 0.0–1.0 vec![r as f32 / 255.0, g as f32 / 255.0, b as f32 / 255.0] }) .collect(); // ORT ожидaет форму, напр: [1, 3, H, W] let input_array = Array::from_shape_vec((1, 3, 224, 224), input_tensor)?; // 3) Создаём Ort Value let input_value = Value::from_array(input_array)?; // 4) Инференс let outputs = session.run(vec![("images", &input_value)])?; // 5) Забираем эмбеддинги/выход let embedding: Vec<f32> = outputs[0].try_extract_array()?.to_owned().into_raw_vec_and_offset().0; println!("Embeddings len: {}", embedding.len()); Ok(()) }