[{"data":1,"prerenderedAt":27},["ShallowReactive",2],{"chapter:vision-rs\u002Fgetting-started\u002Ffirst-detection.json":3},{"project":4,"route":5,"title":6,"titleHtml":6,"navTitle":6,"part":7,"sourcePath":8,"editUrl":9,"html":10,"toc":11,"hasMermaid":19,"prev":20,"next":24},"vision-rs","\u002Fvision-rs\u002Fgetting-started\u002Ffirst-detection","Your First Detection","Getting Started","getting-started\u002Ffirst-detection.md","https:\u002F\u002Fgithub.com\u002Fteenygrad\u002Fvision-rs\u002Fedit\u002Fmain\u002Fbook\u002Fsrc\u002Fgetting-started\u002Ffirst-detection.md","\u003Cp>The \u003Ccode>vision_rs::detect\u003C\u002Fcode> module is the entry point for running inference. It\nwraps model-specific configuration and forward passes behind a single\n\u003Ccode>ObjectDetector\u003C\u002Fcode>\u002F\u003Ccode>DetectorConfig\u003C\u002Fcode> pair, so callers don’t need to touch the\nmodel internals for simple inference.\u003C\u002Fp>\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\">use\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> vision_rs\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">::\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">detect\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">::{\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">DetectorConfig\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">,\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> ObjectDetector\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:#FF5F9E\">use\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> vision_rs\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">::\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">models\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">::\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">yolo\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">::\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">yolo26\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\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">let\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:#7FB6D9\">Yolo26\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">(\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">Yolo26DetectorConfig\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">::\u003C\u002Fspan>\u003Cspan style=\"color:#7FB6D9\">new\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">(\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#6FBF98\">    Yolo26Variant\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">::\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">N\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#8A9088\">    \"\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\">weights\u002Fyolo26n.bin\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">    vec!\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">[\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\">car\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">.\u003C\u002Fspan>\u003Cspan style=\"color:#7FB6D9\">into\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">(),\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> \"\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\">truck\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">.\u003C\u002Fspan>\u003Cspan style=\"color:#7FB6D9\">into\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">(),\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> \"\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\">person\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">.\u003C\u002Fspan>\u003Cspan style=\"color:#7FB6D9\">into\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>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> detector \u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">=\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> ObjectDetector\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">::\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>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> image_bytes \u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">=\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\"> std\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">::\u003C\u002Fspan>\u003Cspan style=\"color:#6FBF98\">fs\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">::\u003C\u002Fspan>\u003Cspan style=\"color:#7FB6D9\">read\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">(\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\">frame.jpg\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">)?;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">let\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> detections \u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> detector\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">.\u003C\u002Fspan>\u003Cspan style=\"color:#7FB6D9\">detect\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">(&#x26;\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\">image_bytes\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">).\u003C\u002Fspan>\u003Cspan style=\"color:#FF5F9E\">await\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">?;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF5F9E\">for\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> d \u003C\u002Fspan>\u003Cspan style=\"color:#FF5F9E\">in\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> &#x26;\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\">detections \u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">    println!\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">(\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">\"{}\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> {\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\">:.2\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">}\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\"> {\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\">:?\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">}\"\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">,\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> d\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">.\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\">class\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">,\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> d\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">.\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\">confidence\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">,\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\"> d\u003C\u002Fspan>\u003Cspan style=\"color:#8A9088\">.\u003C\u002Fspan>\u003Cspan style=\"color:#E6E8E3\">bbox\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\u003Ch2 id=\"walking-through-it\">Walking through it\u003C\u002Fh2>\n\u003Col>\n\u003Cli>\u003Cstrong>Pick a variant.\u003C\u002Fstrong> \u003Ccode>Yolo26Variant\u003C\u002Fcode> has five sizes — \u003Ccode>N\u003C\u002Fcode> (nano) through\n\u003Ccode>XL\u003C\u002Fcode> — trading accuracy for speed\u002Fmemory. See\n\u003Ca href=\"\u002Fvision-rs\u002Fcore-concepts\u002Fyolo26-architecture\">The YOLO26 Model\u003C\u002Fa> for how they\ndiffer.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Build a config.\u003C\u002Fstrong> \u003Ccode>Yolo26DetectorConfig::new\u003C\u002Fcode> takes the variant, a\nweights file path, and the class label list (must match the model’s\ntraining classes, in class-index order). It fills in sensible defaults:\n\u003Ccode>conf_threshold: 0.25\u003C\u002Fcode>, \u003Ccode>nms_iou_threshold: 0.45\u003C\u002Fcode>, \u003Ccode>img_size: 640\u003C\u002Fcode>. Adjust\nthese fields directly on the returned config if your use case needs\ndifferent thresholds.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Construct the detector.\u003C\u002Fstrong> \u003Ccode>ObjectDetector::new\u003C\u002Fcode> takes ownership of the\nconfig and loads the model.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Run inference.\u003C\u002Fstrong> \u003Ccode>detect()\u003C\u002Fcode> takes raw JPEG or PNG bytes and returns\nevery \u003Ca href=\"https:\u002F\u002Fdocs.rs\u002Fvision-rs\u002Flatest\u002Fvision_rs\u002Fdetect\u002Fstruct.Detection.html\" target=\"_blank\" rel=\"noopener noreferrer\">\u003Ccode>Detection\u003C\u002Fcode>\u003C\u002Fa>\nthat clears \u003Ccode>conf_threshold\u003C\u002Fcode>, after non-maximum suppression. Each\n\u003Ccode>Detection\u003C\u002Fcode> has a \u003Ccode>bbox: [cx, cy, w, h]\u003C\u002Fcode> (normalised to \u003Ccode>[0, 1]\u003C\u002Fcode>), a\nresolved \u003Ccode>class\u003C\u002Fcode> label, and a \u003Ccode>confidence\u003C\u002Fcode> score.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"getting-a-model\">Getting a model\u003C\u002Fh2>\n\u003Cp>The \u003Ccode>yolo26\u003C\u002Fcode> example binary (\u003Ccode>examples\u002Fyolo26.rs\u003C\u002Fcode>) has a \u003Ccode>download\u003C\u002Fcode>\nsubcommand for fetching pretrained weights and a dataset config, and a\n\u003Ccode>bench\u003C\u002Fcode> subcommand for a throughput\u002Flatency smoke test:\u003C\u002Fp>\n\u003Cpre data-lang=\"bash\" class=\"shiki teeny-datasheet\" style=\"background-color:#16181a;color:#e6e8e3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">source\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> .env\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">cargo\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> build\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --release\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --example\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> yolo26\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --features\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> cuda\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">.\u002Ftarget\u002Frelease\u002Fexamples\u002Fyolo26\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> download\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --dataset\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> assets\u002Fdatasets\u002Fcoco128.toml\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#7FB6D9\">.\u002Ftarget\u002Frelease\u002Fexamples\u002Fyolo26\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> bench\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --model\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> ultralytics\u002Fyolo26n\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --dataset\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> assets\u002Fdatasets\u002Fcoco128.toml\u003C\u002Fspan>\u003Cspan style=\"color:#D8A76B\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B79AD4\">  --skip-map\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --warmup\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> 10\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> --runs\u003C\u002Fspan>\u003Cspan style=\"color:#B79AD4\"> 100\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>See \u003Ca href=\"\u002Fvision-rs\u002Fkernels-and-performance\u002Fbenchmarking\">Benchmarking &amp; Profiling\u003C\u002Fa>\nfor the full set of \u003Ccode>yolo26\u003C\u002Fcode> subcommands and profiling workflows.\u003C\u002Fp>\n",[12,16],{"id":13,"text":14,"level":15},"walking-through-it","Walking through it",2,{"id":17,"text":18,"level":15},"getting-a-model","Getting a model",false,{"title":21,"titleHtml":22,"route":23},"Installation & Toolchain","Installation &amp; Toolchain","\u002Fvision-rs\u002Fgetting-started\u002Finstallation",{"title":25,"titleHtml":25,"route":26},"The Detection API","\u002Fvision-rs\u002Fcore-concepts\u002Fdetection-api",1786271830431]