image annotateImages

Scénario Standard : Contrôle Qualité de Pièces Industrielles

Scénario de test & Cas d'usage

Contexte Métier

Une usine de fabrication utilise un système de vision par ordinateur pour identifier les défauts sur des pièces métalliques. Après détection par un modèle, ce scénario vise à annoter visuellement deux types de défauts : les 'rayures' (lignes) et les 'bosses' (points) directement sur les images des pièces pour une validation rapide par un opérateur humain. On souhaite également conserver l'ID de la pièce et le nom de l'opérateur dans la table finale.
À propos du Set : image

Traitement, manipulation et analyse d'images.

Découvrir toutes les actions de image
Préparation des Données

Crée une table CAS 'DEFAUTS_PIECES' contenant les métadonnées d'annotation. Cette table simule la sortie d'un modèle de détection de défauts. Elle contient l'ID de l'image, le nom de l'opérateur, et deux colonnes (_lines_ et _points_) contenant les coordonnées pour dessiner les lignes (rayures) et les points (bosses). Note : La table d'images 'IMAGES_PIECES_BRUTES' est supposée préexistante.

Copié !
1DATA casuser.DEFAUTS_PIECES;
2 LENGTH id_image $50 operateur $20 _lines_ $200 _points_ $100;
3 /* Pièce 1: une rayure, deux bosses */
4 id_image = 'piece_001.jpg'; operateur = 'OP_734';
5 _lines_ = '{ {10, 50, 150, 55} }'; /* Une ligne de (10,50) à (150,55) */
6 _points_ = '{ {200, 80}, {210, 85} }'; /* Deux points */
7 OUTPUT;
8 
9 /* Pièce 2: deux rayures, pas de bosse */
10 id_image = 'piece_002.jpg'; operateur = 'OP_734';
11 _lines_ = '{ {30, 100, 40, 250}, {32, 100, 42, 250} }'; /* Deux lignes parallèles */
12 _points_ = ''; /* Pas de point */
13 OUTPUT;
14 
15 /* Pièce 3: pas de rayure, une bosse */
16 id_image = 'piece_003.jpg'; operateur = 'OP_921';
17 _lines_ = ''; /* Pas de ligne */
18 _points_ = '{ {120, 120} }'; /* Un point */
19 OUTPUT;
20RUN;

Étapes de réalisation

1
Exécution de l'action 'annotateImages' pour superposer les lignes (rayures) et les points (bosses) en une seule passe. Les rayures sont dessinées en rouge avec une épaisseur de 2 pixels. Les bosses sont dessinées en bleu avec un rayon de 5 pixels.
Copié !
1PROC CAS;
2 image.annotateImages /
3 TABLE={name='DEFAUTS_PIECES', where='id_image is not null'}
4 casOut={name='PIECES_ANNOTEES_VALIDATION', replace=true}
5 copyVars={'id_image', 'operateur'}
6 annotations={
7 {annotation={annotationType='LINES', representation={representationType='SINGLE_COLUMN', columnName='_lines_'}, r=255, g=0, b=0, thickness=2}},
8 {annotation={annotationType='POINTS', representation={representationType='SINGLE_COLUMN', columnName='_points_'}, r=0, g=0, b=255, radius=5}}
9 }
10 images={id='id_image', image='_image_'};
11RUN;
12QUIT;
2
Vérification du contenu de la table de sortie pour s'assurer que les variables ont été copiées et que les images annotées ont été créées.
Copié !
1PROC CASUTIL;
2 contents casdata='PIECES_ANNOTEES_VALIDATION';
3 list rows=5 casdata='PIECES_ANNOTEES_VALIDATION';
4QUIT;

Résultat Attendu


La table CAS 'PIECES_ANNOTEES_VALIDATION' est créée. Elle contient les colonnes '_image_' (image annotée), 'id_image', et 'operateur'. Les images correspondantes aux pièces 001, 002 et 003 contiennent désormais des superpositions visuelles : des lignes rouges pour les rayures et/ou des points bleus pour les bosses, conformément aux données de la table 'DEFAUTS_PIECES'.