亚马逊AWS官方博客
Amazon Nova Canvas 更新:推出虚拟“试穿”和样式选项
您是否想过在购买之前能快速想象出一套新衣服在您身上的样子? 或者是一件家具在您家客厅里的样子? 今天,我们很高兴在 Amazon Nova Canvas 中推出一项新的虚拟“试穿”功能,使之成为可能。此外,我们还添加了八个新的样式选项,用于提高基于文本到图像的样式提示的样式一致性。这些功能扩展了 Nova Canvas 基于人工智能的图像生成功能,使创建逼真的产品视觉效果和风格化图像比以往任何时候都更容易,从而增强客户体验。
现在就快速看一下如何开始使用它们。
开始使用
第一件事是确保可以通过常规方式访问 Nova Canvas 模型。前往 Amazon Bedrock 控制台,选择模型访问权限,为您的账户启用 Amazon Nova Canvas,确保为工作负载选择合适的区域。如果已经有访问权限并且一直在使用 Nova Canvas,则可以立即开始使用这些新功能,因为它们已自动提供给您。
虚拟“试穿”
第一个令人兴奋的新功能是虚拟“试穿”。用这个功能,您可以上传两张照片,并要求 Amazon Nova Canvas 将它们放在一起,得到真实的结果。可以是服装、配饰、家居用品和任何其他产品(包括服装)的图片。例如,可以提供人类的照片作为源图片,将服装的图片作为参考图片,Amazon Nova Canvas 就会创建一个新图像,显示的是该人穿着该服装。我们来试一下吧!
首先,我选择两张图像。我选择了我自己的一张图像,我觉得图像中的姿势很适合换衣服,还有一张 AWS 品牌连帽衫的图片。
请注意,Nova Canvas 接受最多包含 410 万像素的图像(相当于 2,048 x 2,048 像素),因此,必要时请务必缩放图像以符合这些限制要求。另外,如果想运行本文中介绍的 Python 代码,请确保已经安装了 Python 3.9 或更高版本以及 Python 包 boto3 和 pillow。
为了将连帽衫应用到我的照片上,我使用了 Amazon Bedrock Runtime 调用 API。您可以在 Amazon Nova 用户指南中找到有关此 API 的请求和响应结构的完整详细信息。代码很简单,只需要几个推理参数。我使用新的 taskType
“VIRTUAL_TRY_ON”
。然后,我指定所需的设置,包括源图像和参考图像,使用 virtualTryOnParams
对象设置一些必需的参数。请注意,两个图像都必须转换为 Base64 字符串。
import base64
def load_image_as_base64(image_path):
"""Helper function for preparing image data."""
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 图像,同时保留其他区域,类似于使用画家的胶带保护不想绘制的区域。
可以使用三种不同的掩蔽模式,可以通过将 maskType
设置为正确的值来选择这些模式。在这种情况下,我使用的是 “GARMENT”
,它要求我指定要掩盖身体的哪个部位。我使用的是 “UPPER_BODY”
,但您可以使用其他参数,比如 “LOWER_BODY”
、“FULL_BODY”
,如果您想专门瞄准双脚,可以使用 “FOOTWEAR”
。请参阅文档获取选项的完整列表。
然后我调用调用 API,传递这些推理参数并将生成的图像保存到磁盘。
# 注意:下面引用了上面的 inference_params 变量。
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 超级英雄的图像。为此,我指定了 “TEXT_IMAGE”
为 taskType
,还指定了一个包含 text
和 style
参数的 textToImageParams
对象。text
参数包含描述我要创建的图像的提示,在本例中是“a superhero in a yellow outfit with a big AWS logo and a cape”。 style
参数指定预定义的样式值之一。我在这里使用的是 “3D_ANIMATED_FAMILY_FILM”
,但您可以在 Nova Canvas 用户指南中找到完整列表。
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
}
}
然后,我像前面的示例一样调用调用 API。(为简洁起见,此处省略了该代码。) 结果如何? 好吧,您可自己判断,但我不得不说,这位 AWS 超级英雄穿着我最喜欢的颜色、符合我所设想的 3D 动画家庭电影风格,我感到非常满意。
真正酷的是,我可以保持我的代码和提示完全相同,只更改样式属性的值即可生成样式完全不同的图像。我们来试一下。我将 style
设置为 PHOTOREALISM
。
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
}
}
结果令人印象深刻! 这个超级英雄与我所描述的一样逼真,与之前生成的动画片大相径庭,而且只需要修改一行代码就能实现。
注意事项
可用性 – 美国东部(弗吉尼亚州北部)、亚太地区(东京)和欧洲地区(爱尔兰)的 Amazon Nova Canvas 提供虚拟“试穿”和样式选项。Amazon Nova Canvas 的当前用户无需迁移到新模型即可立即使用这些功能。
定价 – 请参阅 Amazon Bedrock 定价页面了解费用详细信息。
要预览服装的虚拟”试穿”效果,您可以访问 nova.amazon.com,在那里可以上传人物和服装的图像,来呈现不同的服装组合。
如果已准备好开始,请查看 Nova Canvas 用户指南或访问 AWS 管理控制台。
Matheus Guimaraes | @codingmatheus
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。