使用 Amazon Bedrock 和 AWS Step Functions 自动执行更改图像背景的过程 |亚马逊网络服务

使用 Amazon Bedrock 和 AWS Step Functions 自动执行更改图像背景的过程 |亚马逊网络服务

许多客户,包括创意广告、媒体和娱乐、电子商务和时尚行业的客户,经常需要更改大量图像的背景。通常,这涉及使用照片软件手动编辑每个图像。这可能需要付出很大的努力,尤其是对于大批量图像。然而, 亚马逊基岩AWS步骤功能 使大规模自动化此过程变得简单。

Amazon Bedrock 提供生成式 AI 基础模型 亚马逊泰坦图像生成器 G1,它可以使用一种称为的技术自动更改图像的背景 外涂。 Step Functions 允许您创建与 Amazon Bedrock 和其他 AWS 服务无缝连接的自动化工作流程。 Amazon Bedrock 和 Step Functions 共同简化了跨多个图像自动更改背景的整个过程。

这篇文章介绍了一种解决方案,可以简化在多个图像中更改背景的过程。通过利用 生成式人工智能 借助 Amazon Bedrock 和 Titan Image Generator G1 模型,再结合 Step Functions,该解决方案可有效生成具有所需背景的图像。这篇文章深入了解该解决方案的内部工作原理,并帮助您了解为构建自己的自定义解决方案而做出的设计选择。

查看 GitHub存储库 有关部署此解决方案的详细说明。

解决方案概述

在深入研究特定元素和所使用的 AWS 服务之前,让我们先看看该解决方案如何在较高层面上工作。下图提供了解决方案架构的简化视图并突出显示了关键元素。

解决方案架构

工作流程包括以下步骤:

  1. 用户将多张图像上传到 亚马逊简单存储服务 通过 Streamlit Web 应用程序的 (Amazon S3) 存储桶。
  2. Streamlit Web 应用程序调用 Amazon API网关 REST API 端点与集成 亚马逊重新认识 检测标签 API,它检测每个图像的标签。
  3. 提交后,Streamlit Web 应用程序会更新 Amazon DynamoDB 带有图像详细信息的表。
  4. DynamoDB 更新会触发 AWS Lambda 函数,它启动 Step Functions 工作流程。
  5. Step Functions 工作流程对每个图像运行以下步骤:
    5.1 构造 Amazon Bedrock 的请求负载 InvokeModel API。
    5.2 调用亚马逊基岩 InvokeModel API 操作。
    5.3 从响应中解析图像并将其保存到 S3 位置。
    5.4 更新 DynamoDB 表中的映像状态。
  6. Step Functions 工作流调用 Lambda 函数来生成状态报告。
  7. 该工作流程使用以下方式发送电子邮件 亚马逊简单通知服务 (亚马逊 SNS)。

如下图所示,Streamlit Web 应用程序允许您上传图像并输入文本提示来指定所需的背景、负面提示和图像生成的绘制模式。您还可以查看和删除与您不希望保留在最终生成的图像中的每个上传图像关联的不需要的标签。

Streamlit Web 应用程序

在本例中,背景提示是“伦敦城市背景”。自动化过程会根据原始上传的图像生成以伦敦为背景的新图像。

生成的图像

Streamlit Web 应用程序和图像上传

Streamlit Web 应用程序充当此解决方案的前端。为了保护应用程序免受未经授权的访问,它集成了 亚马逊Cognito 用户池。 API网关使用 Amazon Cognito 授权者 来验证请求。 Web 应用程序完成以下步骤:

  1. 对于每个选定的图像,它使用 API Gateway REST API 终端节点通过 Amazon Rekognition 检索标签。
  2. 提交后,应用程序会将图像上传到 S3 存储桶。
  3. 该应用程序使用另一个 API Gateway REST API 端点更新 DynamoDB 表,其中包含每个图像的相关参数、图像名称和关联标签。

图像处理工作流程

当 DynamoDB 表更新时, DynamoDB流 触发 Lambda 函数来启动新的 Step Functions 工作流程。以下是工作流程的示例请求:

{
  "Id": "621fa85a-38bb-4d98-a656-93bbbcf5477f",
  "S3Bucket": "<Image Bucket>",
  "InputS3Prefix": "image-files/<year>/<month>/<day>/<timestamp>",
  "OutputS3Prefix": "generated-image-files/<year>/<month>/<day>/<timestamp>",
  "StatusS3Prefix": "status-report-files/<year>/<month>/<day>/<timestamp>",
  "Prompt": "london city background",
  "NegativePrompt": "low quality, low resolution",
  "Mode": "PRECISE",
  "Images": [
    {
      "ImageName": "bus.png",
      "Labels": "Bus, Person"
    },
    {
      "ImageName": "cop.png",
      "Labels": "Person, Adult, Male, Man, Helmet, Jacket"
    },
    {
      "ImageName": "iguana-2.png",
      "Labels": "Lizard”
    },
    {
      "ImageName": "dog.png",
      "Labels": "Dog"
    }
  ]
}

Step Functions 工作流程随后执行以下三个步骤:

  1. 替换所有图像的背景。
  2. 生成状态报告。
  3. 通过 Amazon SNS 发送电子邮件。

以下屏幕截图说明了 Step Functions 工作流程。

AWS Step Functions 工作流程

让我们更详细地看看每个步骤。

替换所有图像的背景

Step Functions 使用 分布式地图 在并行子工作流程中处理每个图像。分布式Map允许高并发处理。每个子工作流都有自己独立于父工作流的运行历史记录。

Step Functions 使用 针对 Amazon Bedrock 的 InvokeModel 优化 API 操作。 API 接受最大 25 MB 的请求和响应。但是,Step Functions 对状态负载输入和输出有 256 KB 的限制。为了支持更大的图像,该解决方案使用 S3 存储桶,其中 InvokeModel API 读取数据并将结果写入。以下是该项目的配置 InvokeModel 用于 Amazon Bedrock 集成的 API:

{
    "ModelId": "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-image-generator-v1",
    "ContentType": "application/json",
    "Input": {  
        "S3Uri": “s3://<Image Bucket>/image-files/<year>/<month>/<day>/<timestamp>/<Image name>.json",
    },  
    "Output": {  
        "S3Uri": “s3://<Image Bucket>/generated-image-files/<year>/<month>/<day>/<timestamp>/<Image name>.json”
    } 
}

Input S3Uri 参数指定检索输入数据的源位置。这 Output S3Uri 参数指定写入 API 响应的目的地。

Lambda 函数将请求负载保存为指定位置的 JSON 文件 Input S3Uri 地点。 这 InvokeModel API 使用此输入有效负载生成具有指定背景的图像:

{
    "taskType": "OUTPAINTING",
    "outPaintingParams": {
        "text": "london city background",
        "negativeText": "low quality, low resolution",        
        "image": "<base64-encoded string>",                         
        "maskPrompt": "Bus",                      
        "maskImage": "base64-encoded string",                             
        "outPaintingMode": "DEFAULT | PRECISE"                 
    },                                                 
    "imageGenerationConfig": {
        "numberOfImages": 1,
        "quality": "premium",
        "height": 1024,
        "width": 1024,
        "cfgScale": 8.0
    }
}

Titan Image Generator G1 型号支持以下图像生成参数:

  • 任务类型 – 指定替换图像背景的绘制方法。
  • 文本 – 定义背景的文本提示。
  • 负面文本 – 文本提示定义图像中不包含的内容。
  • 掩码提示 – 定义掩码的文本提示。它对应于您想要在最终生成的图像中保留的标签。
  • 蒙版图像 – 以 base64 编码的 JPEG 或 PNG 图像。
  • 输出绘画模式 – 指定是否允许修改蒙版内的像素。 DEFAULT 允许修改蒙版内的图像,以使其与重建的背景保持一致。 PRECISE 可防止掩模内图像的修改。
  • 图片数量 – 要生成的图像数量。
  • 质量 – 生成图像的质量: standard or premium.
  • cfg比例 – 指定生成的图像应遵循提示的程度。
  • 高度 – 图像的高度(以像素为单位)。
  • 宽度 – 图像的宽度(以像素为单位)。

亚马逊基岩 InvokeModel API 生成一个带有编码图像的响应 Output S3Uri 地点。另一个 Lambda 函数解析响应中的图像,从 Base64 进行解码,并将图像文件保存在以下位置: s3://<Image Bucket>/generated-image-file/<year>/<month>/<day>/<timestamp>/.

最后,子工作流程使用图像生成状态更新 DynamoDB 表,将其标记为 得手 or 失败,并包括诸如 ImageName, Cause, ErrorStatus.

生成状态报告

图像生成过程结束后,Lambda 函数从 DynamoDB 检索状态详细信息。它将这些详细信息动态编译成 JSON 格式的综合状态报告。然后,它将生成的状态报告保存在以下位置的 JSON 文件中: s3://<Image Bucket>/status-report-files/<year>/<month>/<day>/<timestamp>/。 ITops 团队可以将此报告与其现有的通知系统集成,以跟踪图像处理是否成功完成。对于商业用户,您可以进一步扩展它以生成 CSV 格式的报告。

通过 Amazon SNS 发送电子邮件

Step Functions 调用 Amazon SNS API 操作来发送电子邮件。该电子邮件包含详细信息,包括状态报告和最终图像文件的 S3 位置。以下是通知电子邮件示例。

通知电子邮件

结论

在这篇文章中,我们概述了一个示例解决方案,演示了使用 Amazon Bedrock 和 Step Functions 自动大规模更改图像背景。我们还详细解释了解决方案的每个要素。通过使用 Step Functions 与 Amazon Bedrock、分布式地图和 Titan Image Generator G1 模型的优化集成,该解决方案可以高效地并行替换图像背景,从而提高生产力和可扩展性。

要部署该解决方案,请参阅 GitHub存储库.

资源

要了解有关 Amazon Bedrock 的更多信息,请参阅以下资源:

要了解有关 Titan Image Generator G1 模型的更多信息,请参阅以下资源:

要了解有关将 Amazon Bedrock 与 Step Functions 结合使用的更多信息,请参阅以下资源:


关于作者

使用 Amazon Bedrock 和 AWS Step Functions 自动执行更改图像背景的过程 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。切坦·马克瓦纳 是 Amazon Web Services 的高级解决方案架构师。他与 AWS 合作伙伴和客户合作,为他们提供构建可扩展架构和实施策略以推动 AWS 服务采用的架构指导。他是一位技术爱好者和构建者,核心兴趣领域是生成式 AI、无服务器和 DevOps。工作之余,他喜欢看表演、旅行和音乐。 

时间戳记:

更多来自 AWS机器学习