diff --git a/README.md b/README.md index 9090e04..a8abd0f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@

- | Documentation | + Documentation

@@ -118,74 +118,101 @@ cargo run -r --example yolo # blip, clip, yolop, svtr, db, ... [dependencies] usls = { git = "https://github.com/jamjamjon/usls", rev = "commit-sha" } ``` - + - #### Follow the pipeline - Build model with the provided `models` and `Options` - Load images, video and stream with `DataLoader` - Do inference - - Annotate inference results with `Annotator` - Retrieve inference results from `Vec` - - ```rust - use usls::{models::YOLO, Annotator, DataLoader, Nms, Options, Vision, YOLOTask, YOLOVersion}; + - Annotate inference results with `Annotator` + - Display images and write them to video with `Viewer` + +
+

+ example code - fn main() -> anyhow::Result<()> { - // Build model with Options - let options = Options::new() - .with_trt(0) - .with_model("yolo/v8-m-dyn.onnx")? - .with_yolo_version(YOLOVersion::V8) // YOLOVersion: V5, V6, V7, V8, V9, V10, RTDETR - .with_yolo_task(YOLOTask::Detect) // YOLOTask: Classify, Detect, Pose, Segment, Obb - .with_i00((1, 2, 4).into()) - .with_i02((0, 640, 640).into()) - .with_i03((0, 640, 640).into()) - .with_confs(&[0.2]); - let mut model = YOLO::new(options)?; - - // Build DataLoader to load image(s), video, stream - let dl = DataLoader::new( - // "./assets/bus.jpg", // local image - // "images/bus.jpg", // remote image - // "../images-folder", // local images (from folder) - // "../demo.mp4", // local video - // "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4", // online video - "rtsp://admin:kkasd1234@192.168.2.217:554/h264/ch1/", // stream - )? - .with_batch(2) // iterate with batch_size = 2 - .build()?; - - // Build annotator - let annotator = Annotator::new() - .with_bboxes_thickness(4) - .with_saveout("YOLO-DataLoader"); - - // Run and annotate results - for (xs, _) in dl { - let ys = model.forward(&xs, false)?; - annotator.annotate(&xs, &ys); - - // Retrieve inference results - for y in ys { - // bboxes - if let Some(bboxes) = y.bboxes() { - for bbox in bboxes { - println!( - "Bbox: {}, {}, {}, {}, {}, {}", - bbox.xmin(), - bbox.ymin(), - bbox.xmax(), - bbox.ymax(), - bbox.confidence(), - bbox.id(), - ); - } + ```rust + use usls::{models::YOLO, Annotator, DataLoader, Nms, Options, Vision, YOLOTask, YOLOVersion}; + + fn main() -> anyhow::Result<()> { + // Build model with Options + let options = Options::new() + .with_trt(0) + .with_model("yolo/v8-m-dyn.onnx")? + .with_yolo_version(YOLOVersion::V8) // YOLOVersion: V5, V6, V7, V8, V9, V10, RTDETR + .with_yolo_task(YOLOTask::Detect) // YOLOTask: Classify, Detect, Pose, Segment, Obb + .with_ixx(0, 0, (1, 2, 4).into()) + .with_ixx(0, 2, (0, 640, 640).into()) + .with_ixx(0, 3, (0, 640, 640).into()) + .with_confs(&[0.2]); + let mut model = YOLO::new(options)?; + + // Build DataLoader to load image(s), video, stream + let dl = DataLoader::new( + // "./assets/bus.jpg", // local image + // "images/bus.jpg", // remote image + // "../images-folder", // local images (from folder) + // "../demo.mp4", // local video + // "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4", // online video + "rtsp://admin:kkasd1234@192.168.2.217:554/h264/ch1/", // stream + )? + .with_batch(2) // iterate with batch_size = 2 + .build()?; + + // Build annotator + let annotator = Annotator::new() + .with_bboxes_thickness(4) + .with_saveout("YOLO-DataLoader"); + + // Build viewer + let mut viewer = Viewer::new().with_delay(10).with_scale(1.).resizable(true); + + // Run and annotate results + for (xs, _) in dl { + let ys = model.forward(&xs, false)?; + // annotator.annotate(&xs, &ys); + let images_plotted = annotator.plot(&xs, &ys, false)?; + + // show image + viewer.imshow(&images_plotted)?; + + // check out window and key event + if !viewer.is_open() || viewer.is_key_pressed(usls::Key::Escape) { + break; + } + + // write video + viewer.write_batch(&images_plotted)?; + + // Retrieve inference results + for y in ys { + // bboxes + if let Some(bboxes) = y.bboxes() { + for bbox in bboxes { + println!( + "Bbox: {}, {}, {}, {}, {}, {}", + bbox.xmin(), + bbox.ymin(), + bbox.xmax(), + bbox.ymax(), + bbox.confidence(), + bbox.id(), + ); } } } - - Ok(()) } - ``` + + // finish video write + viewer.finish_write()?; + + Ok(()) + } + ``` + +
+
+ ## 📌 License