From acf1cd93b14ee948cba23f9f1656b04bead25c75 Mon Sep 17 00:00:00 2001 From: Ruben van de Ven Date: Fri, 2 Oct 2020 13:48:01 +0200 Subject: [PATCH] make size of minimum face variable --- src/lib.rs | 3 ++- src/test.rs | 2 +- src/visualhaar.rs | 5 +++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 6d16404..d825179 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -43,6 +43,7 @@ pub extern "C" fn scan_image(haar: *mut visualhaar::HaarClassifier, input: *const u8, buffer: *mut u8, length: usize, + min_face_factor: usize, debug: bool) { if haar.is_null() || input.is_null() || buffer.is_null() { return; @@ -72,7 +73,7 @@ pub extern "C" fn scan_image(haar: *mut visualhaar::HaarClassifier, } } - let image = haar.scan_image(input_frame, &hm).unwrap().dynamic_img; + let image = haar.scan_image(input_frame, &hm,min_face_factor as u32).unwrap().dynamic_img; let rgb_img = image.to_rgb(); // image.save("/home/ruben/Documents/Projecten/2020/rust/lena_orig-output-lib.png"); info!("Scanning for faces took done"); diff --git a/src/test.rs b/src/test.rs index eefa669..b3bd3c5 100644 --- a/src/test.rs +++ b/src/test.rs @@ -47,7 +47,7 @@ fn main() { let i = ib.as_rgb8().unwrap().clone(); let hm = Some(heatmap::Heatmap::new(heatmap::ColorMaps::Plasma)); let mut sw = Stopwatch::start_new(); - let image = haar.scan_image(i, &hm).unwrap().dynamic_img; + let image = haar.scan_image(i, &hm, 4).unwrap().dynamic_img; info!("Scanning for faces took {}ms", sw.elapsed_ms()); image.save("test-output.png"); diff --git a/src/visualhaar.rs b/src/visualhaar.rs index 498b9ab..9e47939 100644 --- a/src/visualhaar.rs +++ b/src/visualhaar.rs @@ -342,7 +342,8 @@ impl HaarClassifier { // } /// take an ImageBuffer and scan it for faces. - pub fn scan_image(&self, frame: image::ImageBuffer, Vec>, heatmap: &Option) -> Result { + /// min_face_factor parameter gives starting size of scan window (frame height / factor). So higher number scans for smaller faces. + pub fn scan_image(&self, frame: image::ImageBuffer, Vec>, heatmap: &Option, min_face_factor: u32) -> Result { let sw = Stopwatch::start_new(); @@ -365,7 +366,7 @@ impl HaarClassifier { // let rect = integral.slice(s![3..5, 2..4]); // let min_size = self.width; - let min_size = frame.height() / 3; // TODO: Make min face size (or factor) variable + let min_size = frame.height() / min_face_factor; // TODO: Make min face size (or factor) variable let max_window_size = std::cmp::min(img_bw.dimensions().0, img_bw.dimensions().1) as usize; let mut window_size: usize = min_size.clone() as usize;