使用扩绘功能扩展图片内容

本页面介绍了如何使用扩绘功能将图片的内容扩展到更大的区域或者具有不同尺寸的区域。

以下模型支持扩绘:

扩绘示例

扩绘是一种基于蒙版的修改方法,可扩展基础图片的内容,以适合更大或不同大小的蒙版画布。

示例基础图片
通过图片填充与蒙版图片(目标)大小匹配的原始图片。
图片来源:Unsplash 用户 Kari Shea
示例蒙版图片
使用目标输出的尺寸遮盖图片,并标记原始图片像素尺寸和位置。
示例输出图片
扩绘输出图片(无提示)。

查看 Imagen for Editing and Customization 模型卡片

准备工作

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  4. 为您的环境设置身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    Python

    如需在本地开发环境中使用本页面上的 Python 示例,请安装并 初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭据。

    1. 安装 Google Cloud CLI。

    2. 配置 gcloud CLI 以使用您的联合身份。

      如需了解详情,请参阅使用联合身份登录 gcloud CLI

    3. 为您的用户账号创建本地身份验证凭证:

      gcloud auth application-default login

      如果返回了身份验证错误,并且您使用的是外部身份提供方 (IdP),请确认您已 使用联合身份登录 gcloud CLI

    如需了解详情,请参阅 身份验证文档中的 为本地开发环境设置 ADC Google Cloud

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的 凭证。

      安装 Google Cloud CLI,然后 使用联合身份登录 gcloud CLI

    如需了解详情,请参阅 身份验证文档中的使用 REST 时进行身份验证 。 Google Cloud

扩展图片的内容

使用以下代码示例扩展现有图片的内容。

控制台

  1. 在 Google Cloud 控制台中,依次前往 Vertex AI > Vertex AI Studio 页面。

    进入 Vertex AI Studio

  2. 点击生成媒体

  3. 点击图片

  4. 任务 列表中,选择 Outpaint

  5. 模型 列表中,选择要使用的 Imagen 模型。

  6. Input image 中,点击 Add 并选择要修改的图片进行上传。

  7. 提示 框中,输入提示,说明如何修改图片。

  8. 在宽高比菜单中,选择一个宽高比:

    • crop_square 正方形
    • crop_16_9 16:9
    • crop_9_16 9:16
    • crop_landscape 4:3
    • crop_portrait 3:4
    • fullscreen 自定义
  9. 在修改工具栏中,选择图片的放置位置:

    • 左对齐:
    • 水平居中对齐:
    • 右对齐:
    • 顶部对齐:
    • 垂直居中对齐:
    • 底端对齐:
  10. 点击运行

Python

安装

pip install --upgrade google-genai

如需了解详情,请参阅 SDK 参考文档

设置环境变量以将 Gen AI SDK 与 Vertex AI 搭配使用:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=us-central1
export GOOGLE_GENAI_USE_ENTERPRISE=True

from google import genai
from google.genai.types import (
    RawReferenceImage,
    MaskReferenceImage,
    MaskReferenceConfig,
    EditImageConfig,
)

client = genai.Client()

# TODO(developer): Update and un-comment below line
# output_file = "output-image.png"

raw_ref = RawReferenceImage(
    reference_image=Image.from_file(location="test_resources/living_room.png"),
    reference_id=0,
)
mask_ref = MaskReferenceImage(
    reference_id=1,
    reference_image=Image.from_file(location="test_resources/living_room_mask.png"),
    config=MaskReferenceConfig(
        mask_mode="MASK_MODE_USER_PROVIDED",
        mask_dilation=0.03,
    ),
)

image = client.models.edit_image(
    model="imagen-3.0-capability-001",
    prompt="A chandelier hanging from the ceiling",
    reference_images=[raw_ref, mask_ref],
    config=EditImageConfig(
        edit_mode="EDIT_MODE_OUTPAINT",
    ),
)

image.generated_images[0].image.save(output_file)

print(f"Created output image using {len(image.generated_images[0].image.image_bytes)} bytes")
# Example response:
# Created output image using 1234567 bytes

REST

如需详细了解 Imagen API,请参阅以下内容:

在使用任何请求数据之前, 请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud 项目 ID
  • LOCATION:您的项目的区域。 例如, us-central1europe-west2asia-northeast3。如需查看可用区域的列表,请参阅 Vertex AI 上的生成式 AI 位置。使用区域 API 端点时,端点网址中的区域决定了请求的处理位置,如果资源路径中的此 LOCATION 发生冲突,系统会忽略它。
  • prompt:对于图片扩绘,您可以提供空字符串来创建 修改后的图片。如果您选择提供提示,请使用蒙版区域的说明,以获得最佳结果。例如,使用“蓝天”,而不是“插入蓝天”。
  • referenceTypeReferenceImage 是一种图片,可为图片修改提供更多上下文。修改应用场景需要使用常规 RGB 原始参考图片 (REFERENCE_TYPE_RAW)。一次请求中最多只能存在一张原始参考图片。 输出图片的高度和宽度与原始参考图片相同。蒙版修改应用场景需要蒙版参考图片 (REFERENCE_TYPE_MASK)。如果存在原始参考图片,蒙版图片的高度和宽度必须与原始参考图片相同。如果蒙版参考图片为空,并且 maskMode 未设置为 MASK_MODE_USER_PROVIDED,则系统会根据原始参考图片计算蒙版。
  • B64_BASE_IMAGE:要修改或放大的基础图片。图片必须指定为 base64 编码的字节字符串。大小上限:10 MB。
  • B64_OUTPAINTING_MASK:您要用作蒙版层来修改原始图片的黑白图片。蒙版的分辨率应与输入图片相同。 输出图片的分辨率将与输入图片相同。 此蒙版图片必须指定为 base64 编码的字节字符串。大小上限:10 MB。
  • MASK_DILATION - 浮点数。将此蒙版扩大的图像宽度的百分比。建议使用值 0.03,以进行扩绘。设置 "dilation": 0.0 可能会导致在扩展点出现明显的边框,或者可能会导致白色边框效果。
  • EDIT_STEPS - 整数。基本模型的采样步数。对于扩绘,从 35 步数开始。如果质量不符合您的要求,请增加步数。
  • EDIT_IMAGE_COUNT - 已修改图片的数量。接受的整数值:1-4。默认值:4。

HTTP 方法和网址:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagen-3.0-capability-001:predict

请求 JSON 正文:

{
  "instances": [
    {
      "prompt": "",
      "referenceImages": [
        {
          "referenceType": "REFERENCE_TYPE_RAW",
          "referenceId": 1,
          "referenceImage": {
            "bytesBase64Encoded": "B64_BASE_IMAGE"
          }
        },
        {
          "referenceType": "REFERENCE_TYPE_MASK",
          "referenceId": 2,
          "referenceImage": {
            "bytesBase64Encoded": "B64_OUTPAINTING_MASK"
          },
          "maskImageConfig": {
            "maskMode": "MASK_MODE_USER_PROVIDED",
            "dilation": MASK_DILATION
          }
        }
      ]
    }
  ],
  "parameters": {
    "editConfig": {
      "baseSteps": EDIT_STEPS
    },
    "editMode": "EDIT_MODE_OUTPAINT",
    "sampleCount": EDIT_IMAGE_COUNT
  }
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagen-3.0-capability-001:predict"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagen-3.0-capability-001:predict" | Select-Object -Expand Content
以下示例响应适用于包含 "sampleCount": 2 的请求。响应返回两个预测对象,其中生成的图片字节采用 base64 编码。
{
  "predictions": [
    {
      "bytesBase64Encoded": "BASE64_IMG_BYTES",
      "mimeType": "image/png"
    },
    {
      "mimeType": "image/png",
      "bytesBase64Encoded": "BASE64_IMG_BYTES"
    }
  ]
}

限制

如果扩绘后的图片扩大到原始图片大小的 200% 或更大,模型可能会生成失真的细节。根据最佳实践,我们建议添加一个后处理步骤,以对扩绘后的图片运行 Alpha 混合。

以下代码是后处理的示例:

parameters = {
   "editConfig": {
       "outpaintingConfig": {
         "blendingMode": "alpha-blending",
         "blendingFactor": 0.01,
       },
   },
}

后续步骤

阅读有关 Imagen 和其他 Vertex AI 上的生成式 AI 产品的文章: