Skip to main content

insight_face_rs/
face_engine.rs

1use std::path::Path;
2
3use crate::{FaceDetector, FaceRecognizer, Result, types::Face};
4use image::RgbImage;
5
6pub struct FaceEngine {
7    det: FaceDetector,
8    rec: FaceRecognizer,
9}
10impl FaceEngine {
11    pub fn new(det_model_path: impl AsRef<Path>, rec_model_path: impl AsRef<Path>) -> Result<Self> {
12        let det = FaceDetector::new(det_model_path, None, None, None)?;
13        let rec = FaceRecognizer::new(rec_model_path, None)?;
14        Ok(Self { det, rec })
15    }
16
17    pub fn run(&mut self, img: &RgbImage) -> Result<Vec<Face>> {
18        let faces = self.det.detect(img)?;
19        let embeddings = self.rec.extract_embedding(img, &faces)?;
20        let results = faces
21            .into_iter()
22            .zip(embeddings.into_iter())
23            .map(|(face, embedding)| Face::from(face, embedding))
24            .collect();
25        Ok(results)
26    }
27}