Class SharedImageCoordinator

Namespace
NT2I.ONNX.Hub
Assembly
NT2I.ONNX.Hub.dll

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

factory ISharedImageContextFactory

Fabrique de contextes ; non-null.

Exceptions

ArgumentNullException

Si factory est null.

Properties

Device

Périphérique cible des contextes produits par ce coordinateur.

public DataHandlingDeviceEnum Device { get; }

Property Value

DataHandlingDeviceEnum

ModelCount

Nombre de modèles actuellement enregistrés.

public int ModelCount { get; }

Property Value

int

Methods

CreateContext(byte[], ImageSize)

Surcharge pratique acceptant un ImageSize au lieu de dimensions séparées.

public ISharedImageContext CreateContext(byte[] bgrPackedImage, ImageSize size)

Parameters

bgrPackedImage byte[]
size ImageSize

Returns

ISharedImageContext

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

bgrPackedImage byte[]

Image source en format BGR entrelacé (layout OpenCV).

width int

Largeur de l'image source en pixels.

height int

Hauteur 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 bgrPackedImage est null.

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

bgrPackedImages byte[][]
size ImageSize

Returns

ISharedImageContext

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

bgrPackedImages byte[][]

Tableau de N images BGR entrelacées.

widths int[]

Largeurs des N images (longueur N).

heights int[]

Hauteurs des N images (longueur N).

Returns

ISharedImageContext

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

context ISharedImageContext

Contexte cible (déjà à jour côté pixels).

Exceptions

ArgumentNullException

Si context est null.

RegisterModel(IImageConsumingArchitecture)

Enregistre une architecture pour qu'elle soit liée automatiquement lors de chaque appel à CreateContext.

public void RegisterModel(IImageConsumingArchitecture model)

Parameters

model IImageConsumingArchitecture

Architecture 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 model est null.

UnregisterModel(IImageConsumingArchitecture)

Retire une architecture précédemment enregistrée.

public bool UnregisterModel(IImageConsumingArchitecture model)

Parameters

model IImageConsumingArchitecture

Architecture à retirer.

Returns

bool

true si le modèle a été trouvé et retiré ; false sinon.

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

batchSize int

Taille du batch attendue.

iterations int

Nombre d'itérations de warm-up par modèle.

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

batchSize int
iterations int
cancellationToken CancellationToken

Returns

Task