Namespace NT2I.ONNX.Hub

Classes

CpuSharedImageContext

Contexte d'image partagée sur chemin CPU.

Stocke une (mono-image) ou plusieurs (batch multi-image) images BGR brutes une seule fois, puis matérialise à la demande des tenseurs pré-traités selon les IModelInputRequirements fournis par chaque modèle. Les tenseurs sont mis en cache : deux modèles avec des requirements identiques partagent le même buffer float[].

Pipeline de pré-traitement (par image source) :

  1. Démultiplexage BGR entrelacé → canaux R, G, B séparés.
  2. Transformation géométrique par canal (Letterbox ou StretchResize).
  3. Assemblage planaire [R plane | G plane | B plane].
  4. Normalisation (Scale01 ou ImageNet mean/std).
En batch multi-image, les N images sont prétraitées indépendamment et concaténées dans le tenseur de sortie au layout [N, C, H, W]. Les tailles d'entrée sont hétérogènes (chaque image peut avoir ses propres width/height) ; toutes les sorties partagent la taille cible imposée par Requirements.

Strict-match BatchSize : requirements.BatchSize doit être égal au nombre d'images stockées dans le contexte (ImageCount). Toute incohérence lève une InvalidOperationException — pas de réplication automatique.

CpuSharedImageContextFactory

Factory par défaut pour SharedImageCoordinator. Produit des CpuSharedImageContext.

SharedImageCoordinator

Coordinateur du Hub d'images partagées.

Centralise les IImageConsumingArchitecture enregistrées et crée à la demande des ISharedImageContext qui pré-traitent l'image une seule fois pour l'ensemble des modèles inscrits.

Le périphérique cible (CPU, GPU CUDA, …) est déterminé par la ISharedImageContextFactory injectée au constructeur. Par défaut, une CpuSharedImageContextFactory est utilisée. Pour la voie GPU CUDA, référencer NT2I.ONNX.Hub.Cuda et passer new CudaSharedImageContextFactory().

// CPU (default)
var coord = new SharedImageCoordinator();
coord.RegisterModel(yoloDetector);
coord.RegisterModel(samEncoder);

using var ctx = coord.CreateContext(bgrFrame, frameWidth, frameHeight);
// À ce stade, chaque modèle a déjà reçu son ISharedTensorHandle via BindFromContext.

// GPU CUDA
var coord = new SharedImageCoordinator(new CudaSharedImageContextFactory());