33 lines
1.4 KiB
C++
33 lines
1.4 KiB
C++
#pragma once
|
||
#include "types.hpp"
|
||
|
||
#include <memory>
|
||
#include <vector>
|
||
|
||
// ── IFaceEmbedder ─────────────────────────────────────────────────────────────
|
||
// Backend-agnostic ArcFace embedder interface. The core application produces
|
||
// 512-d L2-normalised embeddings through this interface without knowing whether
|
||
// the implementation is ONNX Runtime or raw TensorRT.
|
||
//
|
||
// The concrete implementation is selected at compile time by CMake
|
||
// (SAE_INFERENCE_BACKEND): exactly one of backends/ort_backend.cpp or
|
||
// backends/trt_backend.cpp is compiled and provides make_face_embedder().
|
||
|
||
struct Config;
|
||
|
||
struct IFaceEmbedder {
|
||
virtual ~IFaceEmbedder() = default;
|
||
// Embed a batch of 112×112 BGR crops → one L2-normalised 512-d embedding
|
||
// each, parallel to the input.
|
||
virtual std::vector<Embedding> embed(const std::vector<cv::Mat>& crops) = 0;
|
||
// Largest batch the backend accepts in a single embed() call. TRT engines
|
||
// are capped by their build profile; ORT reports the configured batch size.
|
||
virtual int max_batch() const = 0;
|
||
|
||
Embedding embed_one(const cv::Mat& crop) { return embed({crop}).front(); }
|
||
};
|
||
|
||
// Construct the embedder for the compiled-in backend. Reads cfg.arcface_model,
|
||
// cfg.arcface_engine, cfg.embed_batch_size and cfg.trt.
|
||
std::unique_ptr<IFaceEmbedder> make_face_embedder(const Config& cfg);
|