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

Avis de fin de support : le 31 octobre 2025, le support d'Amazon Lookout for Vision AWS sera interrompu. Après le 31 octobre 2025, vous ne pourrez plus accéder à la console Lookout for Vision ni aux ressources Lookout for Vision. Pour plus d'informations, consultez ce billet de blog.

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 devez lancer DetectAnomaliesl'opération. Le résultat de DetectAnomalies inclut 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 DetectAnomalies doivent 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 sous forme d'images PNG ou les met en JPG forme. Nous recommandons que les images soient au 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 PNG formatées, appelez DetectAnomalies avec des images PNG formatées.

Avant d'appelerDetectAnomalies, vous devez d'abord démarrer l'StartModelopération sur votre modèle. Pour de plus amples 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 aucun modèle, utilisez l'StopModelopération pour arrêter votre modèle. Pour de plus amples informations, veuillez consulter Arrêter votre modèle Amazon Lookout for Vision.

Appel DetectAnomalies

Pour appelerDetectAnomalies, spécifiez les éléments suivants :

  • 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 sont image/png (PNGformat des images) et image/jpeg (JPGformat des images).

  • Body — 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 des exemples Python et Java pour appeler des fonctionsDéterminer si une image est anormale.

AWS CLI

Cette AWS CLI commande affiche le JSON résultat de l'DetectAnomaliesCLIopération. 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 sont image/png (PNGformat des images) et image/jpeg (JPGformat des images).

  • 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, voir GitHub.

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 de DetectAnomalies

La réponse de DetectAnomalies varie 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 est un DetectAnomalyResultobjet.

Modèle de classification

Si votre modèle est unModèle de classification d'images, le formulaire de réponse DetectAnomalies contient les éléments suivants :

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

  • Confiance : confiance d'Amazon Lookout for Vision quant à l'exactitude de la prédiction IsAnomalous des anomalies (). Confidenceest une valeur à virgule flottante comprise entre 0 et 1. Plus la valeur est élevée, plus le niveau de confiance est élevé.

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

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

Vous déterminez si une image présente une anomalie en vérifiant le IsAnomalous champ et en confirmant que la Confidence valeur est suffisamment élevée pour répondre à vos besoins.

Si vous trouvez que les valeurs de confiance renvoyées par DetectAnomalies sont trop faibles, pensez à entraîner à nouveau le modèle. Pour obtenir un exemple de code, consultez Classification.

Modèle de segmentation

Si votre modèle est unModèle de segmentation d'image, 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 la réponse ne contient pas d'informations de segmentation, vérifiez que la dernière version du AWS SDK est installée (AWS Command Line Interface si vous utilisez le AWS CLI). Pour un exemple de code, voir Segmentation etAffichage des informations de classification et de segmentation.

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

  • Confiance (classification) : confiance d'Amazon Lookout for Vision quant à l'exactitude de la classification de l'image IsAnomalous (). Confidenceest une valeur à virgule flottante comprise entre 0 et 1. Plus la valeur est élevée, plus le niveau de confiance est é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'apprentissage. Pour trouver le type d'anomalie à partir d'une couleur de masque, vérifiez Color le PixelAnomaly champ de chaque anomalie renvoyée dans la Anomalies liste. Pour obtenir un exemple de code, consultez 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 les informations relatives aux pixels (PixelAnomaly). TotalPercentageAreaest la zone en pourcentage de l'image couverte par l'anomalie. Colorest la couleur du masque pour 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 ensemble 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....." } }