insight-face-rs 1.3.1

Face detection and recognition library using ONNX Runtime (Rust)
Documentation
use std::path::Path;

use crate::{FaceDetector, FaceRecognizer, Result, types::Face};
use image::RgbImage;

pub struct FaceEngine {
    det: FaceDetector,
    rec: FaceRecognizer,
}
impl FaceEngine {
    pub fn new(det_model_path: impl AsRef<Path>, rec_model_path: impl AsRef<Path>) -> Result<Self> {
        let det = FaceDetector::new(det_model_path, None, None, None)?;
        let rec = FaceRecognizer::new(rec_model_path, None)?;
        Ok(Self { det, rec })
    }

    pub fn run(&mut self, img: &RgbImage) -> Result<Vec<Face>> {
        let faces = self.det.detect(img)?;
        let embeddings = self.rec.extract_embedding(img, &faces)?;
        let results = faces
            .into_iter()
            .zip(embeddings.into_iter())
            .map(|(face, embedding)| Face::from(face, embedding))
            .collect();
        Ok(results)
    }
}