Détecter des anomalies dans une image - Amazon Lookout for Vision

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Détecter des anomalies dans une image

Pour détecter des anomalies dans une image à l'aide d'un modèle Amazon Lookout for Vision entraîné, vous appelez leDetectAnomaliesopération. Le résultat deDetectAnomaliesinclut une prédiction booléenne qui classe l'image comme contenant une ou plusieurs anomalies et une valeur de confiance pour la prédiction. Si le modèle est un modèle de segmentation d'image, le résultat inclut également un masque coloré indiquant les positions des différents types d'anomalies.

Les images que vous fournissez àDetectAnomaliesdoivent avoir les mêmes dimensions de largeur et de hauteur que les images que vous avez utilisées pour entraîner le modèle.

DetectAnomaliesaccepte les images au format PNG ou JPG. Nous recommandons que les images soient dans le même format de codage et de compression que ceux utilisés pour entraîner le modèle. Par exemple, si vous entraînez le modèle avec des images au format PNG, appelezDetectAnomaliesavec des images au format PNG.

Avant d'appelerDetectAnomalies, vous devez d'abord démarrer votre modèle avecStartModelopération. Pour plus d'informations, veuillez consulter Démarrage de votre modèle Amazon Lookout for Vision. Vous êtes facturé en fonction de la durée, en minutes, d'exécution d'un modèle et du nombre d'unités de détection d'anomalies utilisées par votre modèle. Si vous n'utilisez pas de modèle, utilisezStopModelopération pour arrêter votre modèle. Pour plus d'informations, veuillez consulter Arrêter votre modèle Amazon Lookout for Vision.

Appel de DetectAnomalies

Pour appelerDetectAnomalies, spécifiez ce qui suit :

  • Projet: nom du projet qui contient le modèle que vous souhaitez utiliser.

  • ModelVersion— La version du modèle que vous souhaitez utiliser.

  • ContentType— Le type d'image que vous souhaitez analyser. Les valeurs valides sontimage/png(images au format PNG) etimage/jpeg(Images au format JPG).

  • Corps— Les octets binaires non codés qui représentent l'image.

    L'image doit avoir les mêmes dimensions que les images utilisées pour entraîner le modèle.

L'exemple suivant montre comment appelerDetectAnomalies. Vous pouvez utiliser la réponse de fonction issue des exemples Python et Java pour appeler des fonctions dansDéterminer si une image est anormale.

AWS CLI

Cette commande de l'AWS CLI affiche la sortie JSON pour l'opération DetectAnomalies de l'interface de ligne de commande (CLI). Modifiez les valeurs des paramètres d'entrée suivants :

  • project nameavec le nom du projet que vous souhaitez utiliser.

  • model versionavec la version du modèle que vous souhaitez utiliser.

  • content typeavec le type d'image que vous souhaitez utiliser. Les valeurs valides sontimage/png(images au format PNG) etimage/jpeg(Images au format JPG).

  • file nameavec le chemin et le nom de fichier de l'image que vous souhaitez utiliser. Assurez-vous que le type de fichier correspond à la valeur decontent-type.

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

Pour l'exemple de code complet, voirGitHub.

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)); }

Comprendre la réponse deDetectAnomalies

La réponse deDetectAnomaliesvarie en fonction du type de modèle que vous entraînez (modèle de classification ou modèle de segmentation). Dans les deux cas, la réponse estDetectAnomalyResultobjet.

Modèle de classification

Si votre modèle est unModèle de classification d'une, la réponse deDetectAnomaliescontient les éléments suivants :

  • IsAnomalous— Indicateur booléen indiquant que l'image contient une ou plusieurs anomalies.

  • Confiance— La confiance d'Amazon Lookout for Vision dans la précision de la prédiction des anomalies (IsAnomalous).Confidenceest une valeur à virgule flottante comprise entre 0 et 1. Une valeur plus élevée indique un niveau de confiance plus élevé.

  • Source— Informations sur l'image transmise àDetectAnomalies.

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

Vous pouvez déterminer si une image présente des anomalies en vérifiantIsAnomalouset en confirmant queConfidencela valeur est suffisamment élevée pour vos besoins.

Si vous trouvez les valeurs de confiance renvoyées parDetectAnomaliessont trop faibles, pensez à réadapter le modèle. Pour obtenir un exemple de code, veuillez consulter Classification.

Modèle de segmentation

Si votre modèle est unModèle de segmentation, la réponse inclut des informations de classification et des informations de segmentation, telles qu'un masque d'image et des types d'anomalies. Les informations de classification sont calculées séparément des informations de segmentation et vous ne devez pas supposer qu'il existe une relation entre elles. Si vous ne trouvez pas d'informations de segmentation dans la réponse, vérifiez que vous disposez de la dernière version duAWSSDK installé (AWS Command Line Interface, si vous utilisezAWS CLI). Pour un exemple de code, voirSegmentationetAffichage des informations de classification et de segmentation.

  • IsAnomalous(classification) — Indicateur booléen qui classe l'image comme normale ou anormale.

  • Confiance(classification) — La confiance d'Amazon Lookout for Vision dans la précision de la classification de l'image (IsAnomalous).Confidenceest une valeur à virgule flottante comprise entre 0 et 1. Une valeur plus élevée indique un niveau de confiance plus élevé.

  • Source— Informations sur l'image transmise àDetectAnomalies.

  • AnomalyMask(segmentation) : masque de pixels couvrant les anomalies détectées dans l'image analysée. Il peut y avoir plusieurs anomalies sur l'image. La couleur d'une carte de masque indique le type d'anomalie. Les couleurs du masque correspondent aux couleurs attribuées aux types d'anomalies dans le jeu de données d'entraînement. Pour trouver le type d'anomalie à partir d'une couleur de masque, vérifiezColordans lePixelAnomalychamp de chaque anomalie renvoyée dansAnomaliesliste. Pour obtenir un exemple de code, veuillez consulter Affichage des informations de classification et de segmentation.

  • Anomalies(segmentation) — Liste des anomalies détectées dans l'image. Chaque anomalie inclut le type d'anomalie (Name) et des informations sur les pixels (PixelAnomaly).TotalPercentageAreaest le pourcentage de la zone de l'image couverte par l'anomalie.Colorest la couleur du masque correspondant à l'anomalie.

    Le premier élément de la liste est toujours un type d'anomalie représentant l'arrière-plan de l'image (BACKGROUND) et ne doit pas être considéré comme une anomalie. Amazon Lookout for Vision ajoute automatiquement le type d'anomalie d'arrière-plan à la réponse. Il n'est pas nécessaire de déclarer un type d'anomalie d'arrière-plan dans votre jeu de données.

{ "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....." } }