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
+ 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(())
+ }
+ ```
+
+