Rilevamento di anomalie in un'immagine - Amazon Lookout per Vision

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Rilevamento di anomalie in un'immagine

Per rilevare anomalie in un'immagine con un modello Amazon Lookout for Vision addestrato, chiamiDetectAnomaliesoperazione. Il risultato diDetectAnomaliesinclude una previsione booleana che classifica l'immagine come contenente una o più anomalie e un valore di affidabilità per la previsione. Se il modello è un modello di segmentazione dell'immagine, il risultato include anche una maschera colorata che mostra le posizioni di diversi tipi di anomalie.

Le immagini che fornisci aDetectAnomaliesdeve avere le stesse dimensioni di larghezza e altezza delle immagini utilizzate per addestrare il modello.

DetectAnomaliesaccetta immagini in formato PNG o JPG. È consigliabile che le immagini abbiano lo stesso formato di codifica e compressione utilizzato per addestrare il modello. Ad esempio, se addestrate il modello con immagini in formato PNG, chiamateDetectAnomaliescon immagini in formato PNG.

Prima di chiamareDetectAnomalies, devi prima avviare il tuo modello conStartModeloperazione. Per ulteriori informazioni, consulta Avvio del modello Amazon Lookout for Vision. Ti viene addebitato il costo in base alla durata, in minuti, di funzionamento di un modello e al numero di unità di rilevamento delle anomalie utilizzate dal modello. Se non si utilizza un modello, utilizzare ilStopModeloperazione per fermare il modello. Per ulteriori informazioni, consulta Interruzione del modello Amazon Lookout for Vision.

Chiamata di DetectAnomalies

ChiamareDetectAnomalies, specificare quanto segue:

  • Progetto— Il nome del progetto che contiene il modello che si desidera utilizzare.

  • ModelVersion— La versione del modello che si desidera utilizzare.

  • ContentType— Il tipo di immagine che desideri analizzare. I valori validi sonoimage/png(immagini in formato PNG) eimage/jpeg(immagini in formato JPG).

  • Corpo— I byte binari non codificati che rappresentano l'immagine.

    L'immagine deve avere le stesse dimensioni delle immagini utilizzate per addestrare il modello.

L'esempio seguente mostra come chiamareDetectAnomalies. È possibile utilizzare la risposta della funzione degli esempi di Python e Java per chiamare le funzioni inDeterminare se un'immagine è anomala.

AWS CLI

Questo comando AWS CLI visualizza l'output JSON dell'operazione CLI DetectAnomalies. Modificate i valori dei seguenti parametri di input:

  • project namecon il nome del progetto che desideri utilizzare.

  • model versioncon la versione del modello che si desidera utilizzare.

  • content typecon il tipo di immagine che vuoi usare. I valori validi sonoimage/png(immagini in formato PNG) eimage/jpeg(immagini in formato JPG).

  • file namecon il percorso e il nome del file dell'immagine che si desidera utilizzare. Assicurati che il tipo di file corrisponda al valore dicontent-type.

aws lookoutvision detect-anomalies --project-name project name\ --model-version model version\ --content-type content type\ --body file name \ --profile lookoutvision-access
Python

Per l'esempio di codice completo, vedereGitHub.

def detect_anomalies(lookoutvision_client, project_name, model_version, photo): """ Calls DetectAnomalies using the supplied project, model version, and image. :param lookoutvision_client: A Lookout for Vision Boto3 client. :param project: The project that contains the model that you want to use. :param model_version: The version of the model that you want to use. :param photo: The photo that you want to analyze. :return: The DetectAnomalyResult object that contains the analysis results. """ image_type = imghdr.what(photo) if image_type == "jpeg": content_type = "image/jpeg" elif image_type == "png": content_type = "image/png" else: logger.info("Invalid image type for %s", photo) raise ValueError( f"Invalid file format. Supply a jpeg or png format file: {photo}") # Get images bytes for call to detect_anomalies with open(photo, "rb") as image: response = lookoutvision_client.detect_anomalies( ProjectName=project_name, ContentType=content_type, Body=image.read(), ModelVersion=model_version) return response['DetectAnomalyResult']
Java V2
public static DetectAnomalyResult detectAnomalies(LookoutVisionClient lfvClient, String projectName, String modelVersion, String photo) throws IOException, LookoutVisionException { /** * Creates an Amazon Lookout for Vision dataset from a manifest file. * Returns after Lookout for Vision creates the dataset. * * @param lfvClient An Amazon Lookout for Vision client. * @param projectName The name of the project in which you want to create a * dataset. * @param modelVersion The version of the model that you want to use. * * @param photo The photo that you want to analyze. * * @return DetectAnomalyResult The analysis result from DetectAnomalies. */ logger.log(Level.INFO, "Processing local file: {0}", photo); // Get image bytes. InputStream sourceStream = new FileInputStream(new File(photo)); SdkBytes imageSDKBytes = SdkBytes.fromInputStream(sourceStream); byte[] imageBytes = imageSDKBytes.asByteArray(); // Get the image type. Can be image/jpeg or image/png. String contentType = getImageType(imageBytes); // Detect anomalies in the supplied image. DetectAnomaliesRequest request = DetectAnomaliesRequest.builder().projectName(projectName) .modelVersion(modelVersion).contentType(contentType).build(); DetectAnomaliesResponse response = lfvClient.detectAnomalies(request, RequestBody.fromBytes(imageBytes)); /* * Tip: You can also use the following to analyze a local file. * Path path = Paths.get(photo); * DetectAnomaliesResponse response = lfvClient.detectAnomalies(request, path); */ DetectAnomalyResult result = response.detectAnomalyResult(); String prediction = "Prediction: Normal"; if (Boolean.TRUE.equals(result.isAnomalous())) { prediction = "Prediction: Anomalous"; } // Convert confidence to percentage. NumberFormat defaultFormat = NumberFormat.getPercentInstance(); defaultFormat.setMinimumFractionDigits(1); String confidence = String.format("Confidence: %s", defaultFormat.format(result.confidence())); // Log classification result. String photoPath = "File: " + photo; String[] imageLines = { photoPath, prediction, confidence }; logger.log(Level.INFO, "Image: {0}\nAnomalous: {1}\nConfidence {2}", imageLines); return result; } // Gets the image mime type. Supported formats are image/jpeg and image/png. private static String getImageType(byte[] image) throws IOException { InputStream is = new BufferedInputStream(new ByteArrayInputStream(image)); String mimeType = URLConnection.guessContentTypeFromStream(is); logger.log(Level.INFO, "Image type: {0}", mimeType); if (mimeType.equals("image/jpeg") || mimeType.equals("image/png")) { return mimeType; } // Not a supported file type. logger.log(Level.SEVERE, "Unsupported image type: {0}", mimeType); throw new IOException(String.format("Wrong image type. %s format isn't supported.", mimeType)); }

Comprendere la risposta diDetectAnomalies

La risposta diDetectAnomaliesvaria a seconda del tipo di modello da addestrare (modello di classificazione o modello di segmentazione). In entrambi i casi la risposta èDetectAnomalyResultoggetto.

Modello di classificazione

Se il tuo modello èModello di classificazione delle immagini, la risposta diDetectAnomaliescontiene quanto segue:

  • IsAnomalous— Un indicatore booleano che indica che l'immagine contiene una o più anomalie.

  • Fiducia— La fiducia che Amazon Lookout for Vision ripone nell'accuratezza della previsione delle anomalie (IsAnomalous).Confidenceè un valore in virgola mobile compreso tra 0 e 1. Un valore più alto indica una maggiore confidenza.

  • Fonte— Informazioni sull'immagine trasmessa aDetectAnomalies.

{ "DetectAnomalyResult": { "Source": { "Type": "direct" }, "IsAnomalous": true, "Confidence": 0.9996867775917053 } }

Si determina se in un'immagine è anomala controllando ilIsAnomalouscampo e confermando che ilConfidenceil valore è sufficientemente alto per le tue esigenze.

Se stai trovando i valori di confidenza restituiti daDetectAnomaliessono troppo bassi, considera la riqualificazione del modello. Per il codice di esempio, consulta Classificazione.

Modello di segmentazione

Se il tuo modello èModello di segmentazione delle immagini, la risposta include informazioni sulla classificazione e sulla segmentazione, come una maschera di immagine e tipi di anomalie. Le informazioni sulla classificazione vengono calcolate separatamente dalle informazioni sulla segmentazione e non si deve presumere una relazione tra di esse. Se non ricevi informazioni sulla segmentazione nella risposta, verifica di disporre della versione più recente diAWSSDK installato (AWS Command Line Interface, se si utilizzaAWS CLI). Ad esempio di codice, vediSegmentazioneeVisualizzazione delle informazioni su classificazione e segmentazione.

  • IsAnomalous(classificazione) — Un indicatore booleano che classifica l'immagine come normale o anomala.

  • Fiducia(classificazione) — La fiducia di Amazon Lookout for Vision nell'accuratezza della classificazione dell'immagine (IsAnomalous).Confidenceè un valore in virgola mobile compreso tra 0 e 1. Un valore più alto indica una maggiore confidenza.

  • Fonte— Informazioni sull'immagine trasmessa aDetectAnomalies.

  • AnomalyMask(segmentazione) — Una maschera di pixel che copre le anomalie rilevate nell'immagine analizzata. L'immagine può presentare più anomalie. Il colore di una mappa a maschera indica il tipo di anomalia. I colori della maschera corrispondono ai colori assegnati ai tipi di anomalia nel set di dati di addestramento. Per trovare il tipo di anomalia in base al colore di una maschera, controllaColornelPixelAnomalycampo di ciascuna anomalia restituita nelAnomalieselenco. Per il codice di esempio, consulta Visualizzazione delle informazioni su classificazione e segmentazione.

  • Anomalie(segmentazione) — Un elenco di anomalie rilevate nell'immagine. Ogni anomalia include il tipo di anomalia (Name) e informazioni sui pixel (PixelAnomaly).TotalPercentageAreaè l'area percentuale dell'immagine coperta dall'anomalia.Colorè il colore della maschera per l'anomalia.

    Il primo elemento dell'elenco è sempre un tipo di anomalia che rappresenta lo sfondo dell'immagine (BACKGROUND) e non deve essere considerata un'anomalia. Amazon Lookout for Vision aggiunge automaticamente il tipo di anomalia di sfondo alla risposta. Non è necessario dichiarare un tipo di anomalia di fondo nel set di dati.

{ "DetectAnomalyResult": { "Source": { "Type": "direct" }, "IsAnomalous": true, "Confidence": 0.9996814727783203, "Anomalies": [ { "Name": "background", "PixelAnomaly": { "TotalPercentageArea": 0.998999834060669, "Color": "#FFFFFF" } }, { "Name": "scratch", "PixelAnomaly": { "TotalPercentageArea": 0.0004034999874420464, "Color": "#7ED321" } }, { "Name": "dent", "PixelAnomaly": { "TotalPercentageArea": 0.0005966666503809392, "Color": "#4DD8FF" } } ], "AnomalyMask": "iVBORw0....." } }