Scénario de test & Cas d'usage
Bildverarbeitung, -manipulation und -analyse.
Entdecken Sie alle Aktionen von imageErstellt eine simulierte Tabelle mit Bild-IDs und Annotationsdaten für Defekte. Jeder Defekt hat Koordinaten (x, y, Breite, Höhe) und einen Schweregrad. Es wird angenommen, dass die Bilder bereits in 'casuser.inspektionsbilder' geladen sind.
| 1 | DATA casuser.defekt_koordinaten; |
| 2 | LENGTH bild_id $50 defekt_typ $20; |
| 3 | INFILE DATALINES DLM=','; |
| 4 | INPUT bild_id $ schweregrad x y breite hoehe defekt_typ $; |
| 5 | DATALINES; |
| 6 | bauteil_001.jpg,1,50,50,100,80,Kratzer |
| 7 | bauteil_001.jpg,2,200,150,30,30,Loetfehler |
| 8 | bauteil_002.png,1,20,30,120,100,Kratzer |
| 9 | bauteil_003.jpg,3,300,250,50,50,Riss |
| 10 | ; |
| 11 | RUN; |
| 12 | |
| 13 | /* Annahme: Die Bildtabelle existiert bereits. Hier wird sie nur simuliert. */ |
| 14 | DATA casuser.inspektionsbilder; |
| 15 | LENGTH _name_ $50 _path_ $100; |
| 16 | _name_ = 'bauteil_001.jpg'; _path_='/path/bauteil_001.jpg'; OUTPUT; |
| 17 | _name_ = 'bauteil_002.png'; _path_='/path/bauteil_002.png'; OUTPUT; |
| 18 | _name_ = 'bauteil_003.jpg'; _path_='/path/bauteil_003.jpg'; OUTPUT; |
| 19 | RUN; |
| 20 | |
| 21 | PROC SQL; |
| 22 | CREATE TABLE casuser.bilder_mit_defekten AS |
| 23 | SELECT a.*, b.schweregrad, b.x, b.y, b.breite, b.hoehe, b.defekt_typ |
| 24 | FROM casuser.inspektionsbilder a |
| 25 | JOIN casuser.defekt_koordinaten b ON a._name_ = b.bild_id; |
| 26 | QUIT; |
| 1 | PROC CAS; |
| 2 | image.annotateImages / |
| 3 | images={TABLE={name='bilder_mit_defekten', where='schweregrad=1'}} |
| 4 | annotations={{ |
| 5 | /* Oben */ |
| 6 | {annotation={annotationType='LINES', representation={representationType='MULTI_COLUMN', x1='x', y1='y', x2_expr='x + breite', y2='y'}, r=255, g=255, b=0, thickness=2}}, |
| 7 | /* Unten */ |
| 8 | {annotation={annotationType='LINES', representation={representationType='MULTI_COLUMN', x1='x', y1_expr='y + hoehe', x2_expr='x + breite', y2_expr='y + hoehe'}, r=255, g=255, b=0, thickness=2}}, |
| 9 | /* Links */ |
| 10 | {annotation={annotationType='LINES', representation={representationType='MULTI_COLUMN', x1='x', y1='y', x2='x', y2_expr='y + hoehe'}, r=255, g=255, b=0, thickness=2}}, |
| 11 | /* Rechts */ |
| 12 | {annotation={annotationType='LINES', representation={representationType='MULTI_COLUMN', x1_expr='x + breite', y1='y', x2_expr='x + breite', y2_expr='y + hoehe'}, r=255, g=255, b=0, thickness=2}} |
| 13 | }} |
| 14 | casOut={name='annotierte_bilder_temp', caslib='CASUSER', replace=true}; |
| 15 | RUN; |
| 1 | PROC CAS; |
| 2 | image.annotateImages / |
| 3 | images={TABLE={name='bilder_mit_defekten', where='schweregrad > 1'}} |
| 4 | annotations={{ |
| 5 | {annotation={annotationType='LINES', representation={representationType='MULTI_COLUMN', x1='x', y1='y', x2_expr='x + breite', y2='y'}, r=255, g=0, b=0, thickness=3}}, |
| 6 | {annotation={annotationType='LINES', representation={representationType='MULTI_COLUMN', x1='x', y1_expr='y + hoehe', x2_expr='x + breite', y2_expr='y + hoehe'}, r=255, g=0, b=0, thickness=3}}, |
| 7 | {annotation={annotationType='LINES', representation={representationType='MULTI_COLUMN', x1='x', y1='y', x2='x', y2_expr='y + hoehe'}, r=255, g=0, b=0, thickness=3}}, |
| 8 | {annotation={annotationType='LINES', representation={representationType='MULTI_COLUMN', x1_expr='x + breite', y1='y', x2_expr='x + breite', y2_expr='y + hoehe'}, r=255, g=0, b=0, thickness=3}} |
| 9 | }} |
| 10 | casOut={name='annotierte_bilder_final', caslib='CASUSER', replace=true}; |
| 11 | RUN; |
Die finale Ausgabetabelle 'annotierte_bilder_final' enthält die Bilder mit den annotierten Defekten. Bilder mit mehreren Defekten unterschiedlichen Schweregrades zeigen sowohl gelbe als auch rote Rechtecke. Die Aktion verarbeitet erfolgreich die Koordinaten und Ausdrücke, um die Rechtecke korrekt zu zeichnen.