insight-face-rs 1.4.0

Face detection and recognition library using ONNX Runtime (Rust)
const DIMS: usize = 512;

pub struct FaceEmbedding(pub [f32; DIMS]);
impl std::ops::Deref for FaceEmbedding {
    type Target = [f32];
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}

#[cfg(feature = "pgvector")]
impl From<pgvector::Vector> for FaceEmbedding {
    fn from(value: pgvector::Vector) -> Self {
        assert_eq!(
            value.as_slice().len(),
            512,
            "Vector must have exactly {} dimensions for FaceEmbedding",
            DIMS
        );
        let mut embedding = [0.0f32; DIMS];
        for (i, val) in value.as_slice().iter().enumerate() {
            embedding[i] = *val;
        }
        FaceEmbedding(embedding)
    }
}

#[cfg(feature = "pgvector")]
impl From<FaceEmbedding> for pgvector::Vector {
    fn from(value: FaceEmbedding) -> Self {
        pgvector::Vector::from(value.to_vec())
    }
}