AWS Nova Canvas升级:虚拟试穿与风格化图像生成技术详解

本文详细介绍了Amazon Nova Canvas新增的虚拟试穿功能与8种预设风格选项,通过具体代码示例展示如何调用Bedrock API实现服装合成与风格化图像生成,为零售业提供AI驱动的可视化解决方案。

Amazon Nova Canvas更新:虚拟试穿与风格选项现已可用

你是否曾希望能在购买前快速预览新衣服的上身效果?或者查看家具在客厅的实际摆放?今天我们兴奋地宣布,Amazon Nova Canvas推出了全新的虚拟试穿功能。此外,我们还新增了八种风格选项,通过文本到图像的风格提示提升风格一致性。这些功能扩展了Nova Canvas的AI图像生成能力,让创建逼真的产品可视化效果和风格化图像变得前所未有的简单,从而提升客户体验。

让我们快速了解如何立即开始使用这些功能。

开始使用

首先确保您已通过常规方式获得Nova Canvas模型的访问权限。前往Amazon Bedrock控制台,选择模型访问并为您的账户启用Amazon Nova Canvas,同时确保为工作负载选择合适区域。如果您已获得访问权限并正在使用Nova Canvas,新功能将自动可用,您可以立即开始使用。

虚拟试穿

第一个令人兴奋的新功能是虚拟试穿。通过此功能,您可以上传两张图片并要求Amazon Nova Canvas将它们以逼真的效果合成。这些图片可以是服装、配饰、家居用品等任何产品。例如,您可以提供一张人物图片作为源图像,一张服装图片作为参考图像,Nova Canvas将生成该人物穿着该服装的新图像。让我们试试看!

我的起点是选择两张图像:一张是我自己认为适合换装的姿势照片,另一张是AWS品牌连帽衫的图片。

请注意,Nova Canvas接受的图像最多包含410万像素(相当于2048x2048),因此必要时请缩放图像以适应这些限制。此外,如果您想运行本文中的Python代码,请确保已安装Python 3.9或更高版本以及boto3和pillow Python包。

为了将连帽衫应用到我的照片上,我使用Amazon Bedrock Runtime调用API。您可以在Amazon Nova用户指南中找到此API请求和响应结构的完整详细信息。代码很简单,只需要几个推理参数。我使用新的taskType"VIRTUAL_TRY_ON",然后使用virtualTryOnParams对象指定所需设置,包括源图像和参考图像,并设置一些必需参数。请注意,两张图像都必须转换为Base64字符串。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import base64

def load_image_as_base64(image_path): 
   """图像数据准备的辅助函数"""
   with open(image_path, "rb") as image_file:
      return base64.b64encode(image_file.read()).decode("utf-8")

inference_params = {
   "taskType": "VIRTUAL_TRY_ON",
   "virtualTryOnParams": {
      "sourceImage": load_image_as_base64("person.png"),
      "referenceImage": load_image_as_base64("aws-hoodie.jpg"),
      "maskType": "GARMENT",
      "garmentBasedMask": {"garmentClass": "UPPER_BODY"}
   }
}

Nova Canvas使用遮罩技术操作图像。这是一种让AI图像生成专注于图像的特定区域同时保留其他区域的技术,类似于使用 painter’s tape 保护不想涂漆的区域。

您可以使用三种不同的遮罩模式,通过设置maskType选择合适值。这里我使用"GARMENT",需要指定要遮罩的身体部位。我使用"UPPER_BODY",但您也可以使用"LOWER_BODY"、“FULL_BODY"或"FOOTWEAR"等选项。请参阅文档获取完整选项列表。

然后我调用invoke API,传入这些推理参数并将生成的图像保存到磁盘。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import base64
import io
import json
import boto3
from PIL import Image

# 创建Bedrock Runtime客户端
bedrock = boto3.client(service_name="bedrock-runtime", region_name="us-east-1")

# 准备调用负载
body_json = json.dumps(inference_params, indent=2)

# 调用Nova Canvas
response = bedrock.invoke_model(
   body=body_json,
   modelId="amazon.nova-canvas-v1:0",
   accept="application/json",
   contentType="application/json"
)

# 从响应中提取图像
response_body_json = json.loads(response.get("body").read())
images = response_body_json.get("images", [])

# 检查错误
if response_body_json.get("error"):
   print(response_body_json.get("error"))

# 将每个图像从Base64解码并保存为PNG文件
for index, image_base64 in enumerate(images):
   image_bytes = base64.b64decode(image_base64)
   image_buffer = io.BytesIO(image_bytes)
   image = Image.open(image_buffer)
   image.save(f"image_{index}.png")

我得到了非常令人兴奋的结果!就这样,我成了自豪的AWS品牌连帽衫穿着者!

除了"GARMENT"遮罩类型,您还可以使用"PROMPT"或"IMAGE"遮罩。使用"PROMPT"时,您同样提供源图像和参考图像,但需要提供自然语言提示来指定要替换的源图像部分。这与Nova Canvas中的"INPAINTING"和"OUTPAINTING"任务类似。如果想使用自己的图像遮罩,则选择"IMAGE"遮罩类型并提供黑白图像作为遮罩,其中黑色表示要在源图像上替换的像素,白色表示要保留的像素。

此功能对零售商特别有用。他们可以通过让客户在购买前查看产品效果来帮助做出更好的购买决策。

使用风格选项

我一直想知道自己作为动漫超级英雄会是什么样子。以前,我可以使用Nova Canvas操作自己的图像,但需要依赖良好的提示工程技能才能获得正确结果。现在,Nova Canvas提供了预训练风格,您可以将其应用于图像,获得符合所选艺术风格的高质量结果。共有八种可用风格:3D动画家庭电影、设计草图、扁平矢量插画、图像小说、极繁主义、中世纪复古、照片写实主义和柔和数字绘画。

应用这些风格就像向Nova Canvas API传递一个额外参数一样简单。让我们尝试一个例子。

我想使用3D动画家庭电影风格生成一个AWS超级英雄图像。为此,我指定taskType为"TEXT_IMAGE"和一个包含两个参数的textToImageParams对象:text和style。text参数包含描述我想要创建图像的提示,这里是"穿着黄色服装、带有大AWS标志和披风的超级英雄”。style参数指定预定义风格值之一。这里我使用"3D_ANIMATED_FAMILY_FILM",但您可以在Nova Canvas用户指南中找到完整列表。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
inference_params = {
   "taskType": "TEXT_IMAGE",
   "textToImageParams": {
      "text": "a superhero in a yellow outfit with a big AWS logo and a cape.",
      "style": "3D_ANIMATED_FAMILY_FILM",
   },
   "imageGenerationConfig": {
      "width": 1280,
      "height": 720,
      "seed": 321
   }
}

然后,我像上一个示例一样调用invoke API。(为简洁起见,此处省略代码。)结果如何?我让您自己判断,但我必须说,我对这个穿着我最喜欢颜色的AWS超级英雄非常满意,它完全按照我设想的3D动画家庭电影风格呈现。

真正酷的是,我可以保持代码和提示完全相同,只更改style属性的值来生成完全不同风格的图像。让我们试试这个。我将style设置为PHOTOREALISM。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
inference_params = { 
   "taskType": "TEXT_IMAGE", 
   "textToImageParams": { 
      "text": "a superhero in a yellow outfit with a big AWS logo and a cape.",
      "style": "PHOTOREALISM",
   },
   "imageGenerationConfig": {
      "width": 1280,
      "height": 720,
      "seed": 7
   }
}

结果令人印象深刻!一个完全如我描述的照片级真实超级英雄,与之前生成的卡通形象截然不同,而这一切只需要更改一行代码。

注意事项

可用性 - 虚拟试穿和风格选项在US East (N. Virginia)、Asia Pacific (Tokyo)和Europe (Ireland)区域的Amazon Nova Canvas中可用。当前Amazon Nova Canvas用户可以立即使用这些功能,无需迁移到新模型。

定价 - 有关成本详情,请参阅Amazon Bedrock定价页面。

要预览服装虚拟试穿,您可以访问nova.amazon.com,上传人物和服装图像以可视化不同的服装组合。

如果您准备开始使用,请查看Nova Canvas用户指南或访问AWS控制台。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计