make size of minimum face variable

This commit is contained in:
Ruben van de Ven 2020-10-02 13:48:01 +02:00
parent 8262d3284f
commit acf1cd93b1
3 changed files with 6 additions and 4 deletions

View file

@ -43,6 +43,7 @@ pub extern "C" fn scan_image(haar: *mut visualhaar::HaarClassifier,
input: *const u8, input: *const u8,
buffer: *mut u8, buffer: *mut u8,
length: usize, length: usize,
min_face_factor: usize,
debug: bool) { debug: bool) {
if haar.is_null() || input.is_null() || buffer.is_null() { if haar.is_null() || input.is_null() || buffer.is_null() {
return; 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(); let rgb_img = image.to_rgb();
// image.save("/home/ruben/Documents/Projecten/2020/rust/lena_orig-output-lib.png"); // image.save("/home/ruben/Documents/Projecten/2020/rust/lena_orig-output-lib.png");
info!("Scanning for faces took done"); info!("Scanning for faces took done");

View file

@ -47,7 +47,7 @@ fn main() {
let i = ib.as_rgb8().unwrap().clone(); let i = ib.as_rgb8().unwrap().clone();
let hm = Some(heatmap::Heatmap::new(heatmap::ColorMaps::Plasma)); let hm = Some(heatmap::Heatmap::new(heatmap::ColorMaps::Plasma));
let mut sw = Stopwatch::start_new(); 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()); info!("Scanning for faces took {}ms", sw.elapsed_ms());
image.save("test-output.png"); image.save("test-output.png");

View file

@ -342,7 +342,8 @@ impl HaarClassifier {
// } // }
/// take an ImageBuffer and scan it for faces. /// take an ImageBuffer and scan it for faces.
pub fn scan_image(&self, frame: image::ImageBuffer<image::Rgb<u8>, Vec<u8>>, heatmap: &Option<heatmap::Heatmap>) -> Result<Outcome, String> { /// 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<image::Rgb<u8>, Vec<u8>>, heatmap: &Option<heatmap::Heatmap>, min_face_factor: u32) -> Result<Outcome, String> {
let sw = Stopwatch::start_new(); let sw = Stopwatch::start_new();
@ -365,7 +366,7 @@ impl HaarClassifier {
// let rect = integral.slice(s![3..5, 2..4]); // let rect = integral.slice(s![3..5, 2..4]);
// let min_size = self.width; // 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 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; let mut window_size: usize = min_size.clone() as usize;