vision-rs / Core Concepts

The Detection API

vision_rs::detect is the model-agnostic entry point described in Your First Detection. This page covers its shape in more depth.

DetectorConfig

pub enum DetectorConfig {
    Yolo26(Yolo26DetectorConfig),
}

DetectorConfig is a tagged union over model families. Today it has one variant, Yolo26; as vision-rs grows additional model families, they’ll be added as new variants here rather than as separate top-level detector types — callers write against ObjectDetector/DetectorConfig regardless of which model backs it.

Yolo26DetectorConfig

pub struct Yolo26DetectorConfig {
    pub variant: Yolo26Variant,
    pub weights: PathBuf,
    pub class_names: Vec<String>,
    pub conf_threshold: f32,      // default 0.25
    pub nms_iou_threshold: f32,   // default 0.45
    pub img_size: usize,          // default 640
}

Yolo26DetectorConfig::new(variant, weights, class_names) fills in the three threshold/size fields with the defaults above; mutate them directly on the returned struct if you need different behavior (e.g. a lower conf_threshold for a high-recall use case, or a different img_size if your weights were trained at a non-standard resolution).

ObjectDetector

pub struct ObjectDetector { /* ... */ }

impl ObjectDetector {
    pub fn new(config: DetectorConfig) -> anyhow::Result<Self>;
    pub async fn detect(&self, image_bytes: &[u8]) -> anyhow::Result<Vec<Detection>>;
}

new dispatches on the config variant to build the right underlying model. detect is async — model loading/inference may involve device transfers and kernel launches — and takes raw encoded image bytes (JPEG or PNG) rather than a pre-decoded tensor, so callers don’t need a separate image decoding dependency for the common case.

Detection

pub struct Detection {
    pub bbox: [f32; 4],   // [cx, cy, w, h], normalised to [0, 1]
    pub class: String,    // resolved from the config's class_names
    pub confidence: f32,  // in [0, 1]
}

Note that bbox is normalised, not pixel coordinates — multiply by the original image’s width/height to get pixel-space boxes. class is already resolved to a string label (not a raw class index), using the class_names list passed into the config.