[{"data":1,"prerenderedAt":32},["ShallowReactive",2],{"chapter:vision-rs\u002Fcore-concepts\u002Fdetection-api.json":3},{"project":4,"route":5,"title":6,"titleHtml":6,"navTitle":6,"part":7,"sourcePath":8,"editUrl":9,"html":10,"toc":11,"hasMermaid":25,"prev":26,"next":29},"vision-rs","\u002Fvision-rs\u002Fcore-concepts\u002Fdetection-api","The Detection API","Core Concepts","core-concepts\u002Fdetection-api.md","https:\u002F\u002Fgithub.com\u002Fteenygrad\u002Fvision-rs\u002Fedit\u002Fmain\u002Fbook\u002Fsrc\u002Fcore-concepts\u002Fdetection-api.md","\u003Cp>\u003Ccode>vision_rs::detect\u003C\u002Fcode> is the model-agnostic entry point described in\n\u003Ca href=\"\u002Fvision-rs\u002Fgetting-started\u002Ffirst-detection\">Your First Detection\u003C\u002Fa>. This page\ncovers its shape in more depth.\u003C\u002Fp>\n\u003Ch2 id=\"detectorconfig\">\u003Ccode>DetectorConfig\u003C\u002Fcode>\u003C\u002Fh2>\n\u003Cpre data-lang=\"rust\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">pub\u003C\u002Fspan>\u003Cspan style=\"color:#FF5F9E\"> enum\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> DetectorConfig\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">    Yolo26\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">(\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">Yolo26DetectorConfig\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">),\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#8A9088\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>DetectorConfig\u003C\u002Fcode> is a tagged union over model families. Today it has one\nvariant, \u003Ccode>Yolo26\u003C\u002Fcode>; as vision-rs grows additional model families, they’ll be\nadded as new variants here rather than as separate top-level detector types\n— callers write against \u003Ccode>ObjectDetector\u003C\u002Fcode>\u002F\u003Ccode>DetectorConfig\u003C\u002Fcode> regardless of\nwhich model backs it.\u003C\u002Fp>\n\u003Ch2 id=\"yolo26detectorconfig\">\u003Ccode>Yolo26DetectorConfig\u003C\u002Fcode>\u003C\u002Fh2>\n\u003Cpre data-lang=\"rust\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">pub\u003C\u002Fspan>\u003Cspan style=\"color:#FF5F9E\"> struct\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> Yolo26DetectorConfig\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">    pub\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> variant\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">:\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> Yolo26Variant\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">    pub\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> weights\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">:\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> PathBuf\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">    pub\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> class_names\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">:\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> Vec\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">String\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">>,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">    pub\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> conf_threshold\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">:\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> f32\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">,\u003C\u002Fspan>\u003Cspan style=\"color:#7F877D;font-style:italic\">      \u002F\u002F default 0.25\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">    pub\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> nms_iou_threshold\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">:\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> f32\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">,\u003C\u002Fspan>\u003Cspan style=\"color:#7F877D;font-style:italic\">   \u002F\u002F default 0.45\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">    pub\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> img_size\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">:\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> usize\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">,\u003C\u002Fspan>\u003Cspan style=\"color:#7F877D;font-style:italic\">          \u002F\u002F default 640\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#8A9088\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>Yolo26DetectorConfig::new(variant, weights, class_names)\u003C\u002Fcode> fills in the\nthree threshold\u002Fsize fields with the defaults above; mutate them directly on\nthe returned struct if you need different behavior (e.g. a lower\n\u003Ccode>conf_threshold\u003C\u002Fcode> for a high-recall use case, or a different \u003Ccode>img_size\u003C\u002Fcode> if\nyour weights were trained at a non-standard resolution).\u003C\u002Fp>\n\u003Ch2 id=\"objectdetector\">\u003Ccode>ObjectDetector\u003C\u002Fcode>\u003C\u002Fh2>\n\u003Cpre data-lang=\"rust\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">pub\u003C\u002Fspan>\u003Cspan style=\"color:#FF5F9E\"> struct\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> ObjectDetector\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> {\u003C\u002Fspan>\u003Cspan style=\"color:#7F877D;font-style:italic\"> \u002F* ... *\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">impl\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> ObjectDetector\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">    pub\u003C\u002Fspan>\u003Cspan style=\"color:#FF5F9E\"> fn\u003C\u002Fspan>\u003Cspan style=\"color:#7FB6D9\"> new\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">(\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\">config\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">:\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> DetectorConfig\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">)\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> ->\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> anyhow\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">::\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">Result\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#FF5F9E\">Self\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">>;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">    pub\u003C\u002Fspan>\u003Cspan style=\"color:#FF5F9E\"> async\u003C\u002Fspan>\u003Cspan style=\"color:#FF5F9E\"> fn\u003C\u002Fspan>\u003Cspan style=\"color:#7FB6D9\"> detect\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">(&#x26;\u003C\u002Fspan>\u003Cspan style=\"color:#FF5F9E\">self\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">,\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> image_bytes\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">:\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> &#x26;[\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">u8\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">])\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> ->\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> anyhow\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">::\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">Result\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">Vec\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">Detection\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">>>;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#8A9088\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>new\u003C\u002Fcode> dispatches on the config variant to build the right underlying model.\n\u003Ccode>detect\u003C\u002Fcode> is \u003Ccode>async\u003C\u002Fcode> — model loading\u002Finference may involve device transfers\nand kernel launches — and takes raw encoded image bytes (JPEG or PNG)\nrather than a pre-decoded tensor, so callers don’t need a separate image\ndecoding dependency for the common case.\u003C\u002Fp>\n\u003Ch2 id=\"detection\">\u003Ccode>Detection\u003C\u002Fcode>\u003C\u002Fh2>\n\u003Cpre data-lang=\"rust\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">pub\u003C\u002Fspan>\u003Cspan style=\"color:#FF5F9E\"> struct\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> Detection\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">    pub\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> bbox\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">:\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> [\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">f32\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">;\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> 4\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">],\u003C\u002Fspan>\u003Cspan style=\"color:#7F877D;font-style:italic\">   \u002F\u002F [cx, cy, w, h], normalised to [0, 1]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">    pub\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> class\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">:\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> String\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">,\u003C\u002Fspan>\u003Cspan style=\"color:#7F877D;font-style:italic\">    \u002F\u002F resolved from the config's class_names\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">    pub\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> confidence\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">:\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> f32\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">,\u003C\u002Fspan>\u003Cspan style=\"color:#7F877D;font-style:italic\">  \u002F\u002F in [0, 1]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#8A9088\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Note that \u003Ccode>bbox\u003C\u002Fcode> is \u003Cstrong>normalised\u003C\u002Fstrong>, not pixel coordinates — multiply by the\noriginal image’s width\u002Fheight to get pixel-space boxes. \u003Ccode>class\u003C\u002Fcode> is already\nresolved to a string label (not a raw class index), using the\n\u003Ccode>class_names\u003C\u002Fcode> list passed into the config.\u003C\u002Fp>\n",[12,16,19,22],{"id":13,"text":14,"level":15},"detectorconfig","DetectorConfig",2,{"id":17,"text":18,"level":15},"yolo26detectorconfig","Yolo26DetectorConfig",{"id":20,"text":21,"level":15},"objectdetector","ObjectDetector",{"id":23,"text":24,"level":15},"detection","Detection",false,{"title":27,"titleHtml":27,"route":28},"Your First Detection","\u002Fvision-rs\u002Fgetting-started\u002Ffirst-detection",{"title":30,"titleHtml":30,"route":31},"The YOLO26 Model","\u002Fvision-rs\u002Fcore-concepts\u002Fyolo26-architecture",1786271830455]