Add AMD support via ort alternative to trt
This commit is contained in:
@@ -1,39 +1,30 @@
|
||||
#pragma once
|
||||
#include "scrfd_decoder.hpp"
|
||||
#include "trt_scrfd_decoder.hpp"
|
||||
#include "config.hpp"
|
||||
#include "ort_provider.hpp"
|
||||
#include "inference/face_detector.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
// ── FaceDetectorFunc ──────────────────────────────────────────────────────────
|
||||
// KPN node: runs SCRFD-500MF to detect ALL faces in a frame.
|
||||
//
|
||||
// Backend selection:
|
||||
// --detector-engine <path> → TrtScrfdDecoder (raw TensorRT, no ORT)
|
||||
// otherwise → SCRFDDecoder (ONNX Runtime)
|
||||
// The inference backend (ONNX Runtime or raw TensorRT) is selected at compile
|
||||
// time; this node talks only to IFaceDetector via make_face_detector(cfg).
|
||||
|
||||
struct FaceDetectorFunc {
|
||||
static constexpr std::string_view label() { return "face_detector"; }
|
||||
|
||||
explicit FaceDetectorFunc(const Config& cfg, OrtProvider provider)
|
||||
: max_faces_(cfg.max_faces)
|
||||
explicit FaceDetectorFunc(const Config& cfg)
|
||||
: detector_(make_face_detector(cfg))
|
||||
, max_faces_(cfg.max_faces)
|
||||
, min_face_px_(cfg.min_face_px)
|
||||
{
|
||||
if (!cfg.detector_engine.empty()) {
|
||||
trt_ = std::make_unique<TrtScrfdDecoder>(
|
||||
cfg.detector_engine, cfg.detector_conf, cfg.detector_nms);
|
||||
} else {
|
||||
ort_ = std::make_unique<SCRFDDecoder>(
|
||||
cfg.detector_model, cfg.detector_conf, cfg.detector_nms, provider, cfg.trt);
|
||||
}
|
||||
}
|
||||
{}
|
||||
|
||||
SceneFrame operator()(Frame f) {
|
||||
if (f.eof) return {std::move(f), {}};
|
||||
|
||||
auto faces = trt_ ? trt_->detect(f.image) : ort_->detect(f.image);
|
||||
auto faces = detector_->detect(f.image);
|
||||
|
||||
// Drop faces below minimum pixel size (too small for reliable ArcFace alignment)
|
||||
faces.erase(
|
||||
@@ -54,8 +45,7 @@ struct FaceDetectorFunc {
|
||||
}
|
||||
|
||||
private:
|
||||
std::unique_ptr<SCRFDDecoder> ort_;
|
||||
std::unique_ptr<TrtScrfdDecoder> trt_;
|
||||
int max_faces_{10};
|
||||
float min_face_px_{40.f};
|
||||
std::unique_ptr<IFaceDetector> detector_;
|
||||
int max_faces_{10};
|
||||
float min_face_px_{40.f};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user