Skip to content

Commit de67c8c

Browse files
committed
post processing for yolo
1 parent 2f3372a commit de67c8c

1 file changed

Lines changed: 45 additions & 2 deletions

File tree

src/vision/gate_poles.rs

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
use anyhow::Result;
22
use derive_getters::Getters;
3-
use opencv::{core::Size, prelude::Mat};
3+
use itertools::MergeJoinBy;
4+
use opencv::core::{multiply, multiply_def, MatTraitManual, BORDER_CONSTANT, CV_8U};
5+
use opencv::imgproc::{get_structuring_element, morphology_default_border_value, MORPH_RECT};
6+
use opencv::{
7+
core::{in_range, merge, split, Point, Scalar, Size, Vector},
8+
imgproc::{
9+
self, contour_area_def, cvt_color_def, dilate, find_contours_def, min_area_rect,
10+
CHAIN_APPROX_SIMPLE, COLOR_BGR2YUV, LINE_8, RETR_EXTERNAL,
11+
},
12+
prelude::{Mat, MatTraitConst, MatTraitConstManual},
13+
};
414

515
use crate::load_onnx;
616

@@ -102,7 +112,40 @@ impl YoloProcessor for GatePoles<OnnxModel> {
102112
type Target = Target;
103113

104114
fn detect_yolo_v5(&mut self, image: &Mat) -> Vec<YoloDetection> {
105-
self.model.detect_yolo_v5(image, self.threshold)
115+
let mut channels = Vector::<Mat>::new();
116+
let _ = split(image, &mut channels).unwrap();
117+
let b = channels.get(0).unwrap();
118+
let g = channels.get(1).unwrap();
119+
let r = channels.get(2).unwrap();
120+
let mut mult_b = Mat::default();
121+
let _ = multiply(&b, &1.0, &mut mult_b, 1.0, -1).unwrap();
122+
let values = Vector::<Mat>::from_iter(vec![b, g, r]);
123+
let mut output_img = Mat::default();
124+
let _ = merge(&values, &mut output_img).unwrap();
125+
let mut dilated = Mat::default();
126+
// let kernel = Vector::<Vector<i32>>::from_iter(vec![
127+
// Vector::<i32>::from_iter(vec![1, 1, 1]),
128+
// Vector::<i32>::from_iter(vec![1, 1, 1]),
129+
// Vector::<i32>::from_iter(vec![1, 1, 1]),
130+
// ]);
131+
// let kernel =
132+
// get_structuring_element(MORPH_RECT, Size::new(3, 3), Point::new(-1, -1)).unwrap();
133+
let kernel = Mat::ones_size(Size::new(3, 3), CV_8U).unwrap();
134+
let _ = dilate(
135+
&output_img,
136+
&mut dilated,
137+
&kernel,
138+
Point::new(-1, -1),
139+
1,
140+
BORDER_CONSTANT,
141+
morphology_default_border_value().unwrap(),
142+
)
143+
.unwrap();
144+
145+
dbg!(image.dims());
146+
dbg!(dilated.dims());
147+
148+
self.model.detect_yolo_v5(&dilated, self.threshold)
106149
}
107150

108151
fn model_size(&self) -> Size {

0 commit comments

Comments
 (0)