image

annotateImages

##set_image

Description

L'action annotateImages permet d'enrichir et d'annoter des images stockées dans une table CAS en utilisant des métadonnéesInformations décrivant les données, les utilisateurs et les ressources dans SAS Viya. Elles assurent la traçabilité, la sécurité et la gouvernance au sein de l'architecture distribuée. présentes dans cette même table. C'est l'outil parfait (et un peu magique, on ne va pas se mentir) pour ajouter des boîtes englobantes, des points d'intérêt ou des masques de segmentation directement sur vos images avant de les visualiser ou de les utiliser pour l'entraînement d'un modèleReprésentation mathématique entraînée sur des données pour capturer des tendances, prédire des résultats ou classifier des observations via des algorithmes (Régression, Forêt aléatoire, Gradient Boosting). de vision par ordinateur .

Syntaxe Officielle
proc cas;
image.annotateImages /
annotations={{annotation={annotationType="LINES" | "POINTS" | "PROTOBUF" | "SEGMENTATION", ...}}}
casOut={caslib="string", name="string", replace=TRUE | FALSE}
copyVars={"variable-name-1", "variable-name-2"}
decode={convert=TRUE | FALSE, encodeType="string", value=TRUE | FALSE}
images={table={caslib="string", name="table-name"}, image="_image_", dimension="_dimension_"};
run;
quit;

Paramètres Clés

Nom du paramètre Description
annotations Spécifie les annotations à appliquer sur les images (comme LINES, POINTS, PROTOBUF ou SEGMENTATION) ainsi que leurs options visuelles (couleur r,g,b, épaisseur, etc.).
casOut Définit la table CAS de sortie qui contiendra vos images fièrement annotées.
copyVars Liste des variables (colonnes) à copier de la table d'entrée vers la table de sortie pour ne pas perdre vos informations précieuses.
decode Paramètres liés au décodage. L'option 'value=true' est très pratique pour écrire directement l'image décodée et annotée dans la table de sortie.
images Paramètre essentiel définissant la table d'entrée contenant vos images, ainsi que le nom des colonnes qui contiennent les métadonnées de l'image (comme la résolution, le chemin, ou l'identifiant).

Préparation des données

Chargement initial des images en mémoire

Avant de pouvoir annoter quoi que ce soit, il nous faut des images en mémoire. Utilisons l'action loadImages pour préparer le terrain.

1PROC CAS;
2 image.loadImages / path="mon_dossier_images" caslib="casuser" casOut={name="mes_images_brutes", replace=true} decode=true;
3RUN;
4QUIT;

Exemples d'utilisation

Annotation simple avec des points d'intérêt

Dessinons de jolis points rouges sur nos images en utilisant les coordonnées stockées dans la colonne '_points_'.

1PROC CAS;
2 image.annotateImages / images={TABLE={name="mes_images_brutes"}} annotations={{annotation={annotationType="POINTS", r=255, g=0, b=0, radius=5, representation={representationType="SINGLE_COLUMN", columnName="_points_"}}}} casOut={name="images_annotees", replace=true} decode={value=true};
3RUN;
4QUIT;
Résultat Attendu :
Une nouvelle table CAS nommée 'images_annotees' est créée. Elle contient les images sur lesquelles des points rouges ont été incrustés aux emplacements définis par la colonne de métadonnées.
Dessin de boîtes englobantes (Bounding Boxes) avec conservation de variables

Voici un exemple complet. Imaginons que vous ayez exécuté un modèle de détection d'objets et que les coordonnées soient dans la colonne '_lines_'. Nous voulons tracer des boîtes vertes de 3 pixels d'épaisseur tout en conservant l'ID et le chemin de l'image d'origine.

1PROC CAS;
2 image.annotateImages / images={TABLE={name="mes_images_brutes"}, image="_image_", resolution="_resolution_"} annotations={{annotation={annotationType="LINES", r=0, g=255, b=0, thickness=3, representation={representationType="SINGLE_COLUMN", columnName="_lines_"}}}} copyVars={"_id_", "_path_"} casOut={name="images_boxes", replace=true} decode={value=true, convert=true};
3RUN;
4QUIT;
Résultat Attendu :
La table 'images_boxes' est générée avec succès. Les images décodées arborent de magnifiques cadres verts identifiant vos objets, et les colonnes '_id_' et '_path_' ont bien suivi le voyage. Vous êtes paré pour l'analyse visuelle !