Detección de anomalías en una imagen - Amazon Lookout for Vision

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Detección de anomalías en una imagen

Para detectar anomalías en una imagen con un modelo entrenado de Amazon Lookout for Vision, se llama a la operación DetectAnomalies. El resultado de DetectAnomalies incluye una predicción booleana que clasifica la imagen como si contenga una o más anomalías y un valor de confianza para la predicción. Si el modelo es un modelo de segmentación de imágenes, el resultado también incluye una máscara de color que muestra las posiciones de los distintos tipos de anomalías.

Las imágenes que suministre DetectAnomalies deben tener las mismas dimensiones de ancho y alto que las imágenes que utilizó para entrenar el modelo.

DetectAnomaliesacepta imágenes en formato PNG o JPG. Recomendamos que las imágenes estén en el mismo formato de codificación y compresión que los utilizados para entrenar el modelo. Por ejemplo, si entrena el modelo con imágenes en formato PNG, llame DetectAnomalies con imágenes en formato PNG.

Antes de llamarDetectAnomalies, primero debe iniciar su modelo con la StartModel operación. Para obtener más información, consulte Inicio del modelo Amazon Lookout for Vision. Se le cobrará por la cantidad de tiempo, en minutos, que funcione un modelo y por el número de unidades de detección de anomalías que utilice su modelo. Si ya no utiliza el modelo, utilice la operación StopModel para detenerlo. Para obtener más información, consulte Paro del modelo Amazon Lookout for Vision.

Llamada a DetectAnomalies

Para llamar a DetectAnomalies, debe indicar lo siguiente:

  • Project – El nombre del proyecto que incluye el modelo que quiere usar.

  • ModelVersion – La versión del modelo que desea usar.

  • ContentType: el tipo de imagen que desea analizar. Los valores válidos son image/png (imágenes en formato PNG) e image/jpeg (imágenes en formato JPG).

  • Body: los bytes binarios no codificados que representan la imagen.

    Las imágenes deben tener las mismas dimensiones que las imágenes que utilizó para entrenar el modelo.

En el siguiente ejemplo, se muestra cómo llamar a DetectAnomalies. Puede utilizar la respuesta de la función de los ejemplos de Python y Java para llamar a las funciones de Determinar si una imagen es anómala.

AWS CLI

Este comando de la AWS CLI muestra la salida de JSON para la operación DetectAnomalies de la CLI. Cambie los valores de los siguientes parámetros de entrada:

  • project name con el nombre del proyecto que desea usar.

  • model version con la versión del modelo que desea utilizar.

  • content type con el tipo de imagen que desea utilizar. Los valores válidos son image/png (imágenes en formato PNG) e image/jpeg (imágenes en formato JPG).

  • file name con la ruta de acceso y el nombre de archivo de la imagen que desea utilizar. Asegúrese de que el tipo de archivo coincida con el valor de content-type.

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

Consulte el ejemplo completo en 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)); }

Comprensión de la respuesta de DetectAnomalies

La respuesta DetectAnomalies varía según el tipo de modelo que se entrene (modelo de clasificación o modelo de segmentación). En ambos casos, la respuesta es un objeto DetectAnomalyResult.

Modelo de clasificación

Si su modelo es un Ajuste de un modelo de clasificación de imágenes, la respuesta de DetectAnomalies contiene lo siguiente:

  • isAnomalous: indicador booleano de que la imagen contiene una o más anomalías.

  • Confianza: la confianza que Amazon Lookout for Vision tiene en la precisión de la predicción IsAnomalous de anomalías (). Confidencees un valor de punto flotante entre 0 y 1. Un valor más alto indica una confianza más alta.

  • Fuente: información sobre la imagen a la que se le ha pasado a DetectAnomalies.

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

Para determinar si una imagen es anómala, compruebe el IsAnomalous campo y confirme que el Confidence valor es lo suficientemente alto para sus necesidades.

Si observa que los valores de confianza devueltos por DetectAnomalies son demasiado bajos, considere la posibilidad de volver a entrenar el modelo. Para ver código de ejemplo, consulte Clasificación.

Modelo de segmentación

Si su modelo es un Métricas del modelo de segmentación de imágenes, la respuesta incluye información de clasificación y segmentación, como una máscara de imagen y tipos de anomalías. La información de clasificación se calcula por separado de la información de segmentación y no se debe suponer que existe una relación entre ambas. Si no aparece información de segmentación en la respuesta, compruebe que tiene instalada la última versión del AWS SDK (AWS Command Line Interface, si está utilizando el AWS CLI). Para ver código de ejemplo, consulte Segmentación y Mostrar información de clasificación y segmentación.

  • isAnomalous (clasificación): indicador booleano que clasifica la imagen como normal o anómala.

  • Confianza: la confianza que Amazon Lookout for Vision tiene en la precisión de la predicción de anomalías (IsAnomalous). Confidence es un valor de punto flotante entre 0 y 1. Un valor más alto indica una confianza más alta.

  • Fuente: información sobre la imagen a la que se le ha pasado a DetectAnomalies.

  • AnomalyMask (segmentación): máscara de píxeles que cubre las anomalías encontradas en la imagen analizada. Puede haber varias anomalías en la imagen. El color de los mapas de máscaras indica el tipo de anomalía. Los colores de la máscara se corresponden con los colores asignados a los tipos de anomalías en el conjunto de datos de entrenamiento. Para encontrar el tipo de anomalía a partir del color de una máscara, marca Color el PixelAnomaly campo de cada anomalía devuelta en la lista Anomalies. Para ver código de ejemplo, consulte Mostrar información de clasificación y segmentación.

  • Anomalías (segmentación): lista de las anomalías que se encuentran en la imagen. Cada anomalía incluye el tipo de anomalía () y la información de píxeles (Name). PixelAnomaly TotalPercentageAreaes el porcentaje de área de la imagen que cubre la anomalía. Colores el color de la máscara de la anomalía.

    El primer elemento de la lista es siempre un tipo de anomalía que representa el fondo de la imagen (BACKGROUND) y no debe considerarse una anomalía. Amazon Lookout for Vision añade automáticamente el tipo de anomalía de fondo a la respuesta. No es necesario declarar un tipo de anomalía de fondo en su conjunto de datos.

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