选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

检测图像中的异常

聚焦模式
检测图像中的异常 - Amazon Lookout for Vision

终止支持通知:2025年10月31日, AWS 将停止对亚马逊 Lookout for Vision 的支持。2025 年 10 月 31 日之后,你将无法再访问 Lookout for Vision 主机或 Lookout for Vision 资源。如需更多信息,请访问此博客文章

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

终止支持通知:2025年10月31日, AWS 将停止对亚马逊 Lookout for Vision 的支持。2025 年 10 月 31 日之后,你将无法再访问 Lookout for Vision 主机或 Lookout for Vision 资源。如需更多信息,请访问此博客文章

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

要使用经过训练的 Amazon Lookout for Vision 模型检测图像中的异常,您可以调用该操作。DetectAnomaliesDetectAnomalies 的结果中包括一个布尔预测值,该预测会按照图像包含一个异常或多个异常来对其进行分类,此外还包括对所做预测的置信度值。如果模型是图像分割模型,则结果中还包括有色掩码,用于显示不同类型异常的位置。

在宽度和高度尺寸上,您提供给 DetectAnomalies 的图像必须与用于训练模型的图像相同。

DetectAnomalies 可以接受 PNG 或 JPG 格式的图像。我们建议图像的编码和压缩格式与用于训练模型的图像相同。例如,如果您使用 PNG 格式的图像来训练模型,请使用 PNG 格式的图像调用 DetectAnomalies

在调用 DetectAnomalies 之前,必须使用 StartModel 操作来启动模型。有关更多信息,请参阅 启动您的 Amazon Lookout for Vision 模型。您需要按照模型的运行时间量(以分钟为单位)以及模型使用的异常检测单位数量付费。如果不再使用模型,请使用 StopModel 操作停止您的模型。有关更多信息,请参阅 停止您的 Amazon Lookout for Vision 模型

正在呼叫 DetectAnomalies

要调用 DetectAnomalies,请指定以下内容:

  • 项目:包含要使用的模型的项目的名称。

  • ModelVersion— 您要使用的模型版本。

  • ContentType— 要分析的图像类型。有效值为 image/png(PNG 格式图像)和 image/jpeg(JPG 格式图像)。

  • 主体:用来表示图像的未编码二进制字节。

    图像必须与用于训练模型的图像尺寸相同。

以下示例显示了如何调用 DetectAnomalies。您可以使用 Python 和 Java 示例中的函数响应,在 确定图像是否异常 中调用函数。

AWS CLI

此 AWS CLI 命令显示 DetectAnomalies CLI 操作的 JSON 输出。更改以下输入参数的值:

  • project name 更改为要使用的项目的名称。

  • model version 更改为要使用的模型版本。

  • content type 更改为要使用的图像类型。有效值为 image/png(PNG 格式图像)和 image/jpeg(JPG 格式图像)。

  • file name 更改为要使用的图像的路径和文件名。确保文件类型与 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

有关完整的代码示例,请参阅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)); }

此 AWS CLI 命令显示 DetectAnomalies CLI 操作的 JSON 输出。更改以下输入参数的值:

  • project name 更改为要使用的项目的名称。

  • model version 更改为要使用的模型版本。

  • content type 更改为要使用的图像类型。有效值为 image/png(PNG 格式图像)和 image/jpeg(JPG 格式图像)。

  • file name 更改为要使用的图像的路径和文件名。确保文件类型与 content-type 的值相匹配。

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

了解来自的回应 DetectAnomalies

根据您训练的模型类型(分类模型或分割模型),DetectAnomalies 的响应会有所不同。在这两种情况下,响应都是一个DetectAnomalyResult对象。

分类模型

如果您的模型是 图像分类模型,则 DetectAnomalies 的响应会包含以下内容:

  • IsAnomalous— 表示图像包含一个或多个异常的布尔指示器。

  • 置信度:Amazon Lookout for Vision 对异常预测(IsAnomalous)准确度的信心。Confidence 是介于 0 和 1 之间的浮点值。值越高表示置信度越高。

  • 来源:与传递给 DetectAnomalies 的图像相关的信息。

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

通过检查 IsAnomalous 字段并确认 Confidence 值是否高到足以满足您的需求,您可以确定图像是否存在异常。

如果您发现 DetectAnomalies 返回的置信度值过低,请考虑重新训练模型。有关代码示例,请参阅 分类

分割模型

如果您的模型是 图像分割模型,则响应中将包括分类信息和分割信息,如图像掩码和异常类型。分类信息与分割信息分开进行计算,您不应假设它们之间存在关系。如果您在响应中未收到分段信息,请检查是否安装了最新版本的 AWS SDK(AWS Command Line Interface如果您使用的是 AWS CLI)。有关示例代码,请参阅 客户细分显示分类和分割信息

  • IsAnomalous(分类)-将图像分类为正常或异常的布尔指标。

  • 置信度(分类):Amazon Lookout for Vision 对图像分类(IsAnomalous)准确度的信心。Confidence 是介于 0 和 1 之间的浮点值。值越高表示置信度越高。

  • 来源:与传递给 DetectAnomalies 的图像相关的信息。

  • AnomalyMask(分割)— 覆盖分析图像中发现的异常的像素掩码。图像上可能存在多个异常。掩码贴图的颜色表示异常的类型。掩码颜色对应训练数据集中分配给各异常类型的颜色。要通过掩码颜色查找异常类型,请在 Anomalies 列表返回的每个异常的 PixelAnomaly 字段中检查 Color。有关代码示例,请参阅 显示分类和分割信息

  • 异常(分割):图像中发现的异常列表。每个异常都包括异常类型(Name)和像素信息(PixelAnomaly)。TotalPercentageArea 是图像中异常所覆盖的区域百分比。Color 是异常的掩码颜色。

    列表中的第一个元素始终是表示图像背景(BACKGROUND)的异常类型,不应将其视为异常。Amazon Lookout for Vision 会自动将背景异常类型添加到响应中。您无需在数据集中声明背景异常类型。

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

本页内容

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。