Add AMD support via ort alternative to trt
This commit is contained in:
+17
-28
@@ -28,13 +28,10 @@
|
||||
// This binary is intentionally a thin wrapper around the same ONNX models
|
||||
// used by scene_analyze, so embeddings are guaranteed compatible.
|
||||
|
||||
#include "arcface_embedder.hpp"
|
||||
#include "trt_arcface_embedder.hpp"
|
||||
#include "trt_scrfd_decoder.hpp"
|
||||
#include "face_utils.hpp"
|
||||
#include "ort_provider.hpp"
|
||||
#include "scrfd_decoder.hpp"
|
||||
#include "config.hpp"
|
||||
#include "face_utils.hpp"
|
||||
#include "inference/face_detector.hpp"
|
||||
#include "inference/face_embedder.hpp"
|
||||
|
||||
#include <opencv2/imgcodecs.hpp>
|
||||
#include <opencv2/imgproc.hpp>
|
||||
@@ -203,30 +200,22 @@ int main(int argc, char** argv) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
const OrtProvider provider = detect_ort_provider();
|
||||
std::cerr << "[embed_faces] inference provider: " << provider_name(provider) << "\n";
|
||||
Config cfg;
|
||||
cfg.detector_model = detector_model;
|
||||
cfg.detector_engine = detector_engine;
|
||||
cfg.arcface_model = arcface_model;
|
||||
cfg.arcface_engine = arcface_engine;
|
||||
cfg.detector_conf = conf;
|
||||
cfg.detector_nms = nms;
|
||||
|
||||
std::unique_ptr<SCRFDDecoder> ort_det;
|
||||
std::unique_ptr<TrtScrfdDecoder> trt_det;
|
||||
std::function<std::vector<DetectedFace>(const cv::Mat&)> detect;
|
||||
if (!detector_engine.empty()) {
|
||||
trt_det = std::make_unique<TrtScrfdDecoder>(detector_engine, conf, nms);
|
||||
detect = [&](const cv::Mat& im) { return trt_det->detect(im); };
|
||||
} else {
|
||||
ort_det = std::make_unique<SCRFDDecoder>(detector_model, conf, nms, provider);
|
||||
detect = [&](const cv::Mat& im) { return ort_det->detect(im); };
|
||||
}
|
||||
// The compiled-in inference backend (ORT or TRT) is chosen by the factories.
|
||||
auto detector = make_face_detector(cfg);
|
||||
auto embedder = make_face_embedder(cfg);
|
||||
|
||||
std::unique_ptr<ArcFaceEmbedder> ort_emb;
|
||||
std::unique_ptr<TrtArcFaceEmbedder> trt_emb;
|
||||
std::function<Embedding(const cv::Mat&)> embed_one;
|
||||
if (!arcface_engine.empty()) {
|
||||
trt_emb = std::make_unique<TrtArcFaceEmbedder>(arcface_engine);
|
||||
embed_one = [&](const cv::Mat& c) { return trt_emb->embed({c})[0]; };
|
||||
} else {
|
||||
ort_emb = std::make_unique<ArcFaceEmbedder>(arcface_model, provider);
|
||||
embed_one = [&](const cv::Mat& c) { return ort_emb->embed_one(c); };
|
||||
}
|
||||
std::function<std::vector<DetectedFace>(const cv::Mat&)> detect =
|
||||
[&](const cv::Mat& im) { return detector->detect(im); };
|
||||
std::function<Embedding(const cv::Mat&)> embed_one =
|
||||
[&](const cv::Mat& c) { return embedder->embed_one(c); };
|
||||
|
||||
// Process images and build JSON output
|
||||
json output = json::array();
|
||||
|
||||
Reference in New Issue
Block a user