インペイントを使用して画像からオブジェクトを削除する

このページでは、マスク領域を使用して画像からオブジェクトを削除する方法について説明します。このプロセスはインペインティングとも呼ばれます。独自のマスクを指定することも、Imagen にマスクを生成させることもできます。

コンテンツの削除の例

次の例では、インペインティングと画像マスクを使用して、既存の画像からコンテンツを削除します。

入力

編集対象のベース画像*

Google Cloud コンソールのツールで指定したマスク領域

テキスト プロンプト

右側にレモンの袋、左隅にクッションが置かれた赤いソファのベース画像の例。ソファは斜めに配置され、1 本の脚が白いラグの上に置かれています。ソファの前のラグの上にレモンが 2 個置かれています。 赤いソファのサンプルベース画像が描かれています。ソファのレモンの袋とラグの 2 つのレモンに対して、マスク領域が定義されています。

プロンプト: 画像から選択したオブジェクトを削除する

* 画像クレジット: Inside WeatherUnsplash より

Google Cloud コンソールでマスク領域を指定した後の出力

編集されたサンプル画像には、入力例のソファとラグがレモンなしで描かれています。 編集されたサンプル画像には、入力例のソファとラグがレモンなしで描かれています。 編集されたサンプル画像には、入力例のソファとラグがレモンなしで描かれています。

編集とカスタマイズ用 Imagen のモデルカードを表示する

始める前に

  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 をインストールします。

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して 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 認証ドキュメントのローカル開発環境の ADC の設定をご覧ください。

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールします。

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して 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 リファレンス ドキュメントをご覧ください。

    Vertex AI で Gen AI SDK を使用するための環境変数を設定します。

    # 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: 画像のアウトペインティングの場合は、空の文字列を指定して、編集した画像を作成できます。プロンプトを指定する場合は、最適な結果を得られるようにするために、マスクされた領域の説明を使用してください。たとえば、「青い空」ではなく「青い空を挿入」とします。
    • referenceType: ReferenceImage は、画像編集に追加のコンテキストを提供する画像です。編集のユースケースでは、通常の RGB の元の参照画像(REFERENCE_TYPE_RAW)が必要です。1 つのリクエストに存在できる元の参照画像は 1 つまでです。出力画像の高さと幅は、元の参照画像と同じです。マスク編集のユースケースでは、マスク参照画像(REFERENCE_TYPE_MASK)が必要です。元の参照画像が存在する場合、マスク画像の幅と高さは元の参照画像と同じにする必要があります。マスク参照画像が空で、maskModeMASK_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 メソッドと URL:

    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 でエンコードした 2 つの予測オブジェクトを返します。
    {
      "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. [send生成] をクリックします。

    Python

    インストール

    pip install --upgrade google-genai

    詳しくは、SDK リファレンス ドキュメントをご覧ください。

    Vertex AI で Gen AI SDK を使用するための環境変数を設定します。

    # 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 メソッドと URL:

    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 でエンコードした 2 つの予測オブジェクトを返します。
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    制限事項

    以降のセクションでは、Imagen のオブジェクト削除機能の制限事項について説明します。

    変更されたピクセル

    マスクに含まれていないモデルによって生成されたピクセルは、モデルの解像度(1024 x 1024 など)で生成され、入力と同一であるとは限りません。これにより、生成された画像に若干の変更が生じる可能性があります。

    画像を完全に保持したい場合は、マスクを使用して、生成された画像を入力画像とブレンドすることをおすすめします。通常、入力画像の解像度が 2K 以上の場合は、ブレンドが必要です。

    削除の制限

    マスクに隣接する小さなオブジェクトも削除されることがあります。最良の結果を得るには、マスクをできるだけ正確に作成します。

    屋外画像の空の領域で大きな領域を削除すると、不要なアーティファクトが発生する可能性があります。最良の結果を得るには、プロンプトを指定することをおすすめします。

    次のステップ

    Imagen や Vertex AI のその他の生成 AI プロダクトに関する次の記事を読む。