insight_face_rs/
face_engine.rs1use 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}