使用修复功能从图片中移除对象

本页介绍了如何使用遮罩区域从图片中移除对象,此过程也称为“修复”。您可以提供自己的蒙版,也可以让 Imagen 为您生成蒙版。

内容移除示例

以下示例使用修复和图片蒙版从现有图片中移除内容:

输入

要修改的基础映像*

使用 Google Cloud 控制台中的工具指定的蒙版区域

文本提示

示例基本图片:一张红色沙发,右侧放着一袋柠檬,左角放着一个抱枕。沙发呈一定角度放置,一只脚放在白色地毯上。地毯上沙发的前面放着两个柠檬。 图中显示了红色沙发的基础图片示例,其中定义了沙发上的一袋柠檬和地毯上的两个柠檬的蒙版区域。

提示:从图片中移除选定对象

* 图片来源:Unsplash 用户 Inside Weather

在 Google Cloud 控制台中指定了一个蒙版区域后的输出

示例修改图片:输入示例中的沙发和地毯(不含柠檬) 示例修改图片:输入示例中的沙发和地毯(不含柠檬) 示例修改图片:输入示例中的沙发和地毯(不含柠檬)

查看 Imagen for Editing and Customization 模型卡片

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. 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

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

  4. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. 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

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

  7. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

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

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    Python

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

      安装 Google Cloud CLI。

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Google Cloud

    REST

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

      安装 Google Cloud CLI。

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

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

    使用定义的蒙版区域进行移除

    使用以下示例可指定通过修复移除内容。在这些示例中,您可以指定基础图片、文本提示和蒙版区域来修改基础图片。

    控制台

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

    <a href="https://console.cloud.google.com/vertex-ai/studio/media/generate;tab=image" class="button button-primary"
    target="console" track-name="consoleLink" track-type="task">Go to Media
    Studio</a>
    
    1. 点击上传。在显示的文件对话框中,选择要上传的文件。

    2. 点击修复

    3. 参数面板中,点击修复(移除)

    4. 执行下列其中一项操作:

      • 上传您自己的蒙版:

        1. 在电脑上创建蒙版。

        2. 点击上传蒙版。在显示的对话框中,选择要上传的蒙版。

      • 定义您自己的蒙版:在修改工具栏中,使用蒙版工具( 方框、 画笔或 masked_transitions 反转工具)指定要添加内容的一个或多个区域。

    5. 可选:在参数面板中,调整以下选项:

      • 模型:要使用的 Imagen 模型

      • 结果数量:要生成的结果数量

      • 否定提示:要避免生成的内容

    6. 在提示字段中,输入提示以修改图片。

    7. 点击 生成

    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_VERTEXAI=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/fruit.png"),
        reference_id=0,
    )
    mask_ref = MaskReferenceImage(
        reference_id=1,
        reference_image=Image.from_file(location="test_resources/fruit_mask.png"),
        config=MaskReferenceConfig(
            mask_mode="MASK_MODE_USER_PROVIDED",
            mask_dilation=0.01,
        ),
    )
    
    image = client.models.edit_image(
        model="imagen-3.0-capability-001",
        prompt="",
        reference_images=[raw_ref, mask_ref],
        config=EditImageConfig(
            edit_mode="EDIT_MODE_INPAINT_REMOVAL",
        ),
    )
    
    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

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

    • PROJECT_ID:您的 Google Cloud 项目 ID
    • LOCATION:您的项目的区域。 例如 us-central1europe-west2asia-northeast3。如需查看可用区域的列表,请参阅 Vertex AI 上的生成式 AI 位置
    • 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"
        }
      ]
    }
    

    使用自动蒙版检测进行移除

    使用以下示例可指定通过修复移除内容。在这些示例中,您需要指定基础图片和文本提示。Imagen 会自动检测并创建蒙版区域来修改基础图片。

    控制台

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

    <a href="https://console.cloud.google.com/vertex-ai/studio/media/generate;tab=image" class="button button-primary"
    target="console" track-name="consoleLink" track-type="task">Go to Media
    Studio</a>
    
    1. 点击上传。在显示的文件对话框中,选择要上传的文件。

    2. 点击修复

    3. 参数面板中,点击修复(移除)

    4. 在修改工具栏中,点击 background_replace 提取

      选择其中一个蒙版提取选项:

      • 背景元素:检测背景元素并创建一个围绕它们的蒙版。

      • 前景元素:检测前景对象并创建一个围绕它们的蒙版。

      • background_replace 人物:检测人物并创建一个围绕他们的蒙版。

    5. 可选:在参数面板中,调整以下选项:

      • 模型:要使用的 Imagen 模型

      • 结果数量:要生成的结果数量

      • 否定提示:要避免生成的内容

    6. 在提示字段中,输入新提示以修改图片。

    7. 点击发送生成

    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_VERTEXAI=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/fruit.png"),
        reference_id=0,
    )
    mask_ref = MaskReferenceImage(
        reference_id=1,
        reference_image=None,
        config=MaskReferenceConfig(
            mask_mode="MASK_MODE_FOREGROUND",
        ),
    )
    
    image = client.models.edit_image(
        model="imagen-3.0-capability-001",
        prompt="",
        reference_images=[raw_ref, mask_ref],
        config=EditImageConfig(
            edit_mode="EDIT_MODE_INPAINT_REMOVAL",
        ),
    )
    
    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

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

    • PROJECT_ID:您的 Google Cloud 项目 ID
    • LOCATION:您的项目的区域。 例如 us-central1europe-west2asia-northeast3。如需查看可用区域的列表,请参阅 Vertex AI 上的生成式 AI 位置
    • prompt:为获得最佳结果,在使用修复来移除时,请省略提示和 negativePrompt
    • B64_BASE_IMAGE:要修改或放大的基础图片。图片必须指定为 base64 编码的字节字符串。大小上限:10 MB。
    • MASK_MODE - 用于设置模型使用的自动蒙版创建类型的字符串。可用的值:
      • MASK_MODE_BACKGROUND:使用背景分割自动生成蒙版。使用此设置来修改背景内容。
      • MASK_MODE_FOREGROUND:使用前景分割自动生成蒙版。使用此设置来修改前景内容,例如移除这些前景对象(使用修复进行移除)。
      • MASK_MODE_SEMANTIC:根据您在 maskImageConfig.maskClasses 数组中指定的分割类,使用语义分割自动生成蒙版。例如:
                  "maskImageConfig": {
                    "maskMode": "MASK_MODE_SEMANTIC",
                    "maskClasses": [175, 176], // bicycle, car
                    "dilation": 0.01
                  }
                
    • MASK_DILATION - 浮点数。将此蒙版扩大的图像宽度的百分比。建议使用值 0.01 来弥补不完美的输入蒙版。
    • EDIT_STEPS - 整数。基本模型的采样步数。对于修复移除,请从 12 步数开始。如果质量不符合您的要求,请将步数增加到 75 的上限。增加步数也会增加请求延迟时间。
    • 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,
              "maskImageConfig": {
                "maskMode": "MASK_MODE",
                "dilation": MASK_DILATION
              }
            }
          ]
        }
      ],
      "parameters": {
        "editConfig": {
          "baseSteps": EDIT_STEPS
        },
        "editMode": "EDIT_MODE_INPAINT_REMOVAL",
        "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"
        }
      ]
    }
    

    限制

    以下部分将介绍 Imagen 的对象移除功能的一些局限性。

    修改后的像素

    模型生成的蒙版外区域的像素是采用模型的分辨率(例如 1024x1024)生成的,无法保证与输入完全相同。这可能会导致生成的图片发生细微变化。

    为了完美保留图片,建议您使用蒙版将生成的图片与输入图片相融合。如果输入图片的分辨率为 2K 或更高,通常需要进行融合。

    移除限制

    蒙版附近的小对象也可能会移除。为获得最佳效果,请尽可能精确地设置蒙版。

    移除室外图像中的大片天空区域可能会导致出现不必要的伪影。为获得最佳结果,我们建议您提供提示。

    后续步骤

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