Namespace NT2I.ONNX.Abstractions.Interfaces.Hub

Structs

ModelInputRequirements

Implémentation immuable par défaut de IModelInputRequirements en tant que record struct, garantissant une égalité par valeur stable et un hash code cohérent — propriétés indispensables pour servir de clé de cache dans un Dictionary.

Interfaces

IImageConsumingArchitecture

Contrat implémenté par toute architecture (YOLO, SAM2 encoder, RF-DETR, …) capable d'être alimentée via un ISharedImageContext.

Ce contrat est volontairement additionnel : il n'oblige pas à abandonner les API autonomes existantes (SetInputImageBgr, EncodeImageBgr, …). Il permet simplement à un modèle de s'auto-décrire (Requirements) et de récupérer son tenseur d'entrée auprès d'un Hub partagé.

IModelInputRequirements

Décrit de manière déclarative les besoins d'un modèle ONNX en matière de tenseur d'entrée image.

Le SharedImageContext utilise cet objet comme clé de cache : deux modèles dont les IModelInputRequirements sont égaux (égalité de valeur) reçoivent le même ISharedTensorHandle, évitant la duplication du préprocessing.

Les implémentations doivent fournir une égalité par valeur stable (ex. via un record struct comme ModelInputRequirements).

ISharedImageContext

Contexte représentant la durée de vie d'une (ou d'un batch de) image(s) source partagée(s) entre plusieurs modèles ONNX d'une même frame.

Le contexte se charge :

  • D'uploader une seule fois l'image vers la mémoire cible (VRAM en mode CUDA, RAM en mode CPU).
  • De fournir à la demande des tenseurs préparés selon des IModelInputRequirements spécifiques (resize + normalisation + layout).
  • De mutualiser les tenseurs : deux demandes avec des Requirements identiques renvoient le même ISharedTensorHandle.
  • De libérer toutes les ressources (CPU/GPU) au Dispose().

Ce contrat couvre à la fois les usages mono-frame (création/destruction par appel) et pipeline vidéo (instance réutilisée entre frames via LoadFrame(byte[], int, int) / LoadFrames(byte[][], int[], int[])).

ISharedImageContextFactory

Fabrique des ISharedImageContext.

Permet à SharedImageCoordinator d'être agnostique du périphérique cible : la même API publique coord.CreateContext(...) produit un CpuSharedImageContext ou un CudaSharedImageContext en fonction de la factory injectée.

Implémentations connues :

  • CpuSharedImageContextFactory (par défaut, projet NT2I.ONNX.Hub).
  • CudaSharedImageContextFactory (projet NT2I.ONNX.Hub.Cuda).
ISharedTensorHandle

Handle léger refcompté représentant un tenseur de pré-traitement partagé entre plusieurs modèles ONNX. Le buffer sous-jacent (CPU float[] ou pointeur GPU) reste la propriété du SharedImageContext émetteur ; l'Dispose() du handle se contente de décrémenter le refcount, sans libérer la mémoire elle-même.

Le handle ne possède pas l'OrtValue qui le wrappera côté moteur d'inférence : chaque OnnxEngine consommateur crée son propre OrtValue par-dessus le pointeur (via OrtValueHelper.FromCudaPointer ou FromCpuBuffer). Cela évite tout problème de double-Dispose lié au ClearInput() de l'engine.

Utilisé conjointement avec GetTensor(IModelInputRequirements).