Class 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());
public sealed class SharedImageCoordinator
- Inheritance
-
SharedImageCoordinator
- Inherited Members
Constructors
SharedImageCoordinator()
Construit un coordinateur avec la factory CPU par défaut.
public SharedImageCoordinator()
SharedImageCoordinator(ISharedImageContextFactory)
Construit un coordinateur avec une factory explicite. À utiliser pour la voie GPU
(CudaSharedImageContextFactory du projet NT2I.ONNX.Hub.Cuda) ou pour
l'injection en test.
public SharedImageCoordinator(ISharedImageContextFactory factory)
Parameters
factoryISharedImageContextFactoryFabrique de contextes ; non-null.
Exceptions
- ArgumentNullException
Si
factoryestnull.
Properties
Device
Périphérique cible des contextes produits par ce coordinateur.
public DataHandlingDeviceEnum Device { get; }
Property Value
ModelCount
Nombre de modèles actuellement enregistrés.
public int ModelCount { get; }
Property Value
Methods
CreateContext(byte[], ImageSize)
Surcharge pratique acceptant un ImageSize au lieu de dimensions séparées.
public ISharedImageContext CreateContext(byte[] bgrPackedImage, ImageSize size)
Parameters
Returns
CreateContext(byte[], int, int)
Crée un ISharedImageContext à partir d'une image BGR entrelacée (le périphérique est déterminé par la factory injectée), puis appelle BindFromContext(ISharedImageContext) sur chaque modèle enregistré.
public ISharedImageContext CreateContext(byte[] bgrPackedImage, int width, int height)
Parameters
bgrPackedImagebyte[]Image source en format BGR entrelacé (layout OpenCV).
widthintLargeur de l'image source en pixels.
heightintHauteur de l'image source en pixels.
Returns
- ISharedImageContext
Un ISharedImageContext lié à tous les modèles enregistrés. L'appelant est responsable du Dispose — utiliser un bloc
using.
Exceptions
- ArgumentNullException
Si
bgrPackedImageestnull.
CreateContext(byte[][], ImageSize)
Surcharge multi-image pour le cas où toutes les images partagent la même taille (cas vidéo standard : N frames de même résolution).
public ISharedImageContext CreateContext(byte[][] bgrPackedImages, ImageSize size)
Parameters
Returns
CreateContext(byte[][], int[], int[])
Crée un ISharedImageContext multi-image à partir de N images BGR de tailles potentiellement hétérogènes, puis appelle BindFromContext(ISharedImageContext) sur chaque modèle enregistré.
Le contexte impose un strict-match : un modèle qui demande un tenseur via
GetTensor(IModelInputRequirements) doit avoir req.BatchSize == N, sinon
une InvalidOperationException est levée. Pas de réplication implicite.
public ISharedImageContext CreateContext(byte[][] bgrPackedImages, int[] widths, int[] heights)
Parameters
bgrPackedImagesbyte[][]Tableau de N images BGR entrelacées.
widthsint[]Largeurs des N images (longueur N).
heightsint[]Hauteurs des N images (longueur N).
Returns
Exceptions
- ArgumentNullException
Si l'un des arguments est
null.- ArgumentException
Si les longueurs des tableaux ne correspondent pas, ou si N=0.
RebindAll(ISharedImageContext)
Re-binde tous les modèles enregistrés sur un contexte fourni. Utile pour le pattern
vidéo / production-line après un ctx.LoadFrame(...) qui invalide le cache.
public void RebindAll(ISharedImageContext context)
Parameters
contextISharedImageContextContexte cible (déjà à jour côté pixels).
Exceptions
- ArgumentNullException
Si
contextestnull.
RegisterModel(IImageConsumingArchitecture)
Enregistre une architecture pour qu'elle soit liée automatiquement lors de chaque
appel à CreateContext.
public void RegisterModel(IImageConsumingArchitecture model)
Parameters
modelIImageConsumingArchitectureArchitecture implémentant IImageConsumingArchitecture.
Remarks
Si la même instance est enregistrée deux fois, BindFromContext sera appelé deux
fois lors de chaque création de contexte. Vérifier l'unicité est à la charge de l'appelant.
Exceptions
- ArgumentNullException
Si
modelestnull.
UnregisterModel(IImageConsumingArchitecture)
Retire une architecture précédemment enregistrée.
public bool UnregisterModel(IImageConsumingArchitecture model)
Parameters
modelIImageConsumingArchitectureArchitecture à retirer.
Returns
- bool
truesi le modèle a été trouvé et retiré ;falsesinon.
WarmUp(int, int)
Préchauffage synchrone propagé à tous les modèles enregistrés. À appeler après RegisterModel(IImageConsumingArchitecture) et avant le premier CreateContext(byte[], int, int) pour stabiliser les sessions ONNX (notamment compilation TensorRT, allocation buffers).
public void WarmUp(int batchSize = 1, int iterations = 1)
Parameters
WarmUpAsync(int, int, CancellationToken)
Préchauffage asynchrone : lance WarmUpAsync sur chaque modèle enregistré et
attend la complétion de l'ensemble.
Note : sur GPU à stream CUDA unique, l'exécution réelle reste sérialisée côté driver ; la parallélisation se fait sur la création/initialisation des sessions ONNX (utile notamment pour TensorRT dont la compilation est longue).
public Task WarmUpAsync(int batchSize = 1, int iterations = 1, CancellationToken cancellationToken = default)
Parameters
batchSizeintiterationsintcancellationTokenCancellationToken