Scénario de test & Cas d'usage
Procesamiento, manipulación y análisis de imágenes.
Descubrir todas las acciones de imageGeneración de lotes masivos simulados. 'incoming_batch' (nuevas) y 'archive_catalog' (existentes). No hay ID común, se requiere fuerza bruta.
| 1 | |
| 2 | DATA casuser.incoming_batch; |
| 3 | LENGTH _path_ $100; |
| 4 | DO i=1 to 50; |
| 5 | _path_=cats('/uploads/new_', i, '.jpg'); |
| 6 | OUTPUT; |
| 7 | END; |
| 8 | |
| 9 | RUN; |
| 10 | |
| 11 | DATA casuser.archive_catalog; |
| 12 | LENGTH _path_ $100; |
| 13 | DO j=1 to 1000; |
| 14 | _path_=cats('/archive/img_', j, '.jpg'); |
| 15 | OUTPUT; |
| 16 | END; |
| 17 | |
| 18 | RUN; |
| 19 |
| 1 | |
| 2 | PROC CAS; |
| 3 | image.compareImages / TABLE={name='incoming_batch', caslib='casuser'}, referenceImages={TABLE={name='archive_catalog', caslib='casuser'}}, pairAll=true, method='PSNR', minimum=30, maximum=100, casOut={name='potential_duplicates', caslib='casuser', replace=true}; |
| 4 | |
| 5 | RUN; |
| 6 | |
| 7 | QUIT; |
| 8 |
La acción genera una tabla masiva 'potential_duplicates' que contiene SOLO los pares de imágenes donde el PSNR es mayor a 30 (indicando alta similitud). El uso de `pairAll=true` ignora cualquier columna de emparejamiento y fuerza la comparación de cada imagen nueva contra todas las del catálogo. El filtrado `minimum=30` previene que la tabla de salida crezca exponencialmente con ruido irrelevante.