Objekte mit Inpainting in ein Bild einfügen

Auf dieser Seite wird beschrieben, wie Objekte in ein Bild eingefügt werden. Dieser Vorgang wird auch als Inpainting bezeichnet. Mit Imagen in Vertex AI können Sie einen Maskenbereich angeben, um Objekte in ein Bild einzufügen. Sie können Ihre eigene Maske verwenden oder Imagen in Vertex AI eine Maske für Sie generieren lassen.

Beispiel für das Einfügen von Inhalten

Beim Inpainting von Inhalten können Sie ein Basisbild, eine Bildmaske und einen Text-Prompt verwenden, um einem vorhandenen Bild Inhalte hinzuzufügen.

Eingaben

Basisbild* zum Bearbeiten Mit Tools in der Google Cloud Console angegebener Maskenbereich Text-Prompt
Ein Beispiel für ein Basis-Image. Ein Glas enthält eine rote Flüssigkeit mit einer Zitronenscheibe an der Seite und einem Strohhalm. Im linken Vordergrund sind Zitronenscheiben zu sehen. Das Basisbild eines Glasgefäßes, jetzt mit einem in der Cloud Console angegebenen Maskenbereich Erdbeeren

* Bildnachweis: Alex Lvrs auf Unsplash

Ausgabe nach Angabe eines Maskenbereichs in der Google Cloud -Konsole

Ein Screenshot einer generierten Bearbeitung eines Glasgefäßes mit einer roten Flüssigkeit. Auf diesem Screenshot wurden die Zitronenscheiben, die sich zuvor im Vordergrund des Bildes befanden, durch zwei Erdbeeren direkt vor dem Glas ersetzt. Ein Screenshot einer generierten Bearbeitung eines Glasgefäßes mit einer roten Flüssigkeit. Auf diesem Screenshot wurden die Zitronenscheiben, die sich zuvor im Vordergrund des Bildes befanden, durch drei Erdbeeren links neben dem Glas ersetzt. Ein Screenshot einer generierten Bearbeitung eines Glasgefäßes mit einer roten Flüssigkeit. Auf diesem Screenshot wurden die Zitronenscheiben, die sich zuvor im Vordergrund des Bildes befanden, durch zwei Erdbeeren ersetzt, die sich leicht vor und links vom Glas befinden.

Modellkarte für Imagen for Editing and Customization ansehen

Hinweise

  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.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Vertex AI API.

    Enable the API

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

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Vertex AI API.

    Enable the API

  8. Richten Sie die Authentifizierung für Ihre Umgebung ein.

    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.

    Java

    Wenn Sie die Java Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

    1. Install the Google Cloud CLI.

    2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    3. To initialize the gcloud CLI, run the following command:

      gcloud init
    4. 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.

    Weitere Informationen finden Sie in der Dokumentation zur Google Cloud -Authentifizierung unter ADC für eine lokale Entwicklungsumgebung einrichten.

    Node.js

    Wenn Sie die Node.js Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

    1. Install the Google Cloud CLI.

    2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    3. To initialize the gcloud CLI, run the following command:

      gcloud init
    4. 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.

    Weitere Informationen finden Sie in der Dokumentation zur Google Cloud -Authentifizierung unter ADC für eine lokale Entwicklungsumgebung einrichten.

    Python

    Wenn Sie die Python Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

    1. Install the Google Cloud CLI.

    2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    3. To initialize the gcloud CLI, run the following command:

      gcloud init
    4. 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.

    Weitere Informationen finden Sie in der Dokumentation zur Google Cloud -Authentifizierung unter ADC für eine lokale Entwicklungsumgebung einrichten.

    REST

    Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.

      After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    Weitere Informationen finden Sie in der Dokumentation zur Google Cloud -Authentifizierung unter Für die Verwendung von REST authentifizieren.

    Mit definiertem Maskenbereich einfügen

    Verwenden Sie die folgenden Beispiele, um ein Inpainting zum Einfügen von Inhalten anzugeben. In diesen Beispielen geben Sie ein Basisbild, einen Text-Prompt und einen Maskenbereich an, um das Basisbild zu ändern.

    Imagen 3

    Verwenden Sie die folgenden Beispiele, um eine Inpainting-Anfrage mit dem Imagen 3-Modell zu senden.

    Console

    1. Rufen Sie in der Google Cloud Console die Seite Vertex AI> Media Studio auf.

      Zu Media Studio

    2. Klicken Sie auf Hochladen. Wählen Sie im angezeigten Dateidialogfeld eine Datei zum Hochladen aus.
    3. Klicken Sie auf Inpaint (Bereich füllen).
    4. Führen Sie einen der folgenden Schritte aus:

      • Eigene Maske hochladen:
        1. Erstellen Sie eine Maske auf Ihrem Computer.
        2. Klicken Sie auf Maske hochladen. Wählen Sie im angezeigten Dialogfeld eine Maske zum Hochladen aus.
      • Maske definieren:Verwenden Sie in der Bearbeitungssymbolleiste die Maskentools (Feld, Pinsel oder masked_transitions-Invertierungstool), um den Bereich oder die Bereiche anzugeben, in denen Inhalte hinzugefügt werden sollen.
    5. Optional: Passen Sie im Bereich Parameter die folgenden Optionen an:
      • Modell: Das Imagen-Modell, das verwendet werden soll
      • Anzahl der Ergebnisse: Die Anzahl der zu generierenden Ergebnisse
      • Negativer Prompt: Elemente, die nicht generiert werden sollen
    6. Geben Sie im Prompt-Feld einen Prompt zum Ändern des Bildes ein.
    7. Klicken Sie auf Erstellen.

    Python

    Installieren

    pip install --upgrade google-genai

    Weitere Informationen finden Sie in der SDK-Referenzdokumentation.

    Umgebungsvariablen für die Verwendung des Gen AI SDK mit Vertex AI festlegen:

    # 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="A plate of cookies",
        reference_images=[raw_ref, mask_ref],
        config=EditImageConfig(
            edit_mode="EDIT_MODE_INPAINT_INSERTION",
        ),
    )
    
    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

    Weitere Informationen finden Sie in der API-Referenz unter Bilder bearbeiten.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud Projekt-ID.
    • LOCATION: Die Region Ihres Projekts. Beispiel: us-central1, europe-west2 oder asia-northeast3. Eine Liste der verfügbaren Regionen finden Sie unter Generative AI an Vertex AI-Standorten.
    • TEXT_PROMPT ist der Text-Prompt, der bestimmt, welche Bilder das Modell generiert. Wenn Sie einen Prompt für das Einfügen durch Inpainting verwenden, sollten Sie den maskierten Bereich beschreiben, um die besten Ergebnisse zu erzielen. Vermeiden Sie Prompts, die nur aus einem Wort bestehen. Verwenden Sie beispielsweise „ein süßer Corgi“ anstelle von „Corgi“.
    • B64_BASE_IMAGE: Das Basisbild, das bearbeitet oder hochskaliert werden soll. Das Bild muss als base64-codierter Bytestring angegeben werden. Größenbeschränkung: 10 MB.
    • B64_MASK_IMAGE: Das Schwarz-Weiß-Bild, das Sie als Maskenebene zum Bearbeiten des Originalbilds verwenden möchten. Das Bild muss als base64-codierter Bytestring angegeben werden. Größenbeschränkung: 10 MB.
    • MASK_DILATION – Gleitkommazahl. Der Prozentsatz der Bildbreite, um die diese Maske erweitert werden soll. Ein Wert von 0.01 wird empfohlen, um unvollkommene Eingabemasken zu kompensieren.
    • EDIT_STEPS – Ganzzahl. Die Anzahl der Stichprobenschritte für das Basismodell. Für das Einfügen durch Inpainting beginnen Sie bei 35 Schritten. Erhöhen Sie die Anzahl der Schritte auf das obere Limit von 75, wenn die Qualität nicht Ihren Anforderungen entspricht. Wenn Sie die Anzahl der Schritte erhöhen, steigt auch die Anfragelatenz.
    • EDIT_IMAGE_COUNT: Die Anzahl der bearbeiteten Bilder. Zulässige Ganzzahlwerte: 1–4. Standardwert: 4

    HTTP-Methode und URL:

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

    JSON-Text der Anfrage:

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

    Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

    curl

    Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

    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

    Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

    $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
    Die folgende Beispielantwort bezieht sich auf eine Anfrage mit "sampleCount": 2. Die Antwort gibt zwei Vorhersageobjekte zurück, wobei die generierten Bildbyte base64-codiert sind.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Imagen 2

    Verwenden Sie die folgenden Beispiele, um eine Inpainting-Anfrage mit dem Imagen 2-Modell zu senden.

    Console

    1. Rufen Sie in der Google Cloud Console die Seite Vertex AI> Media Studio auf.

      Zu Media Studio

    2. Klicken Sie auf Hochladen. Wählen Sie im angezeigten Dateidialogfeld eine Datei zum Hochladen aus.
    3. Klicken Sie auf Inpaint (Bereich füllen).
    4. Führen Sie einen der folgenden Schritte aus:

      • Eigene Maske hochladen:
        1. Erstellen Sie eine Maske auf Ihrem Computer.
        2. Klicken Sie auf Maske hochladen. Wählen Sie im angezeigten Dialogfeld eine Maske zum Hochladen aus.
      • Maske definieren:Verwenden Sie in der Bearbeitungssymbolleiste die Maskentools (Feld, Pinsel oder masked_transitions-Invertierungstool), um den Bereich oder die Bereiche anzugeben, in denen Inhalte hinzugefügt werden sollen.
    5. Optional. Passen Sie im Bereich Parameter die folgenden Optionen an:
      • Modell: Das Imagen-Modell, das verwendet werden soll
      • Anzahl der Ergebnisse: Die Anzahl der zu generierenden Ergebnisse
      • Negativer Prompt: Elemente, die nicht generiert werden sollen
    6. Geben Sie im Prompt-Feld einen neuen Prompt zum Ändern des Bildes ein.
    7. Klicken Sie auf Erstellen.

    Python

    Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Python-API-Referenzdokumentation.

    
    import vertexai
    from vertexai.preview.vision_models import Image, ImageGenerationModel
    
    # TODO(developer): Update and un-comment below lines
    # PROJECT_ID = "your-project-id"
    # input_file = "input-image.png"
    # mask_file = "mask-image.png"
    # output_file = "output-image.png"
    # prompt = "red hat" # The text prompt describing what you want to see inserted.
    
    vertexai.init(project=PROJECT_ID, location="us-central1")
    
    model = ImageGenerationModel.from_pretrained("imagegeneration@006")
    base_img = Image.load_from_file(location=input_file)
    mask_img = Image.load_from_file(location=mask_file)
    
    images = model.edit_image(
        base_image=base_img,
        mask=mask_img,
        prompt=prompt,
        edit_mode="inpainting-insert",
    )
    
    images[0].save(location=output_file, include_generation_parameters=False)
    
    # Optional. View the edited image in a notebook.
    # images[0].show()
    
    print(f"Created output image using {len(images[0]._image_bytes)} bytes")
    # Example response:
    # Created output image using 1400814 bytes
    

    REST

    Weitere Informationen zu imagegeneration-Modellanfragen finden Sie in der API-Referenz des imagegeneration-Modells.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud Projekt-ID.
    • LOCATION: Die Region Ihres Projekts. Beispiel: us-central1, europe-west2 oder asia-northeast3. Eine Liste der verfügbaren Regionen finden Sie unter Generative AI an Vertex AI-Standorten.
    • TEXT_PROMPT: Der Text-Prompt, der bestimmt, welche Bilder das Modell generiert. Dieses Feld ist sowohl zum Erstellen als auch zum Bearbeiten erforderlich.
    • B64_BASE_IMAGE: Das Basisbild, das bearbeitet oder hochskaliert werden soll. Das Bild muss als base64-codierter Bytestring angegeben werden. Größenbeschränkung: 10 MB.
    • B64_MASK_IMAGE: Das Schwarz-Weiß-Bild, das Sie als Maskenebene zum Bearbeiten des Originalbilds verwenden möchten. Das Bild muss als base64-codierter Bytestring angegeben werden. Größenbeschränkung: 10 MB.
    • EDIT_IMAGE_COUNT: Die Anzahl der bearbeiteten Bilder. Standardwert: 4
    • GUIDANCE_SCALE_VALUE: Ein Parameter (Ganzzahl), der steuert, wie sehr sich das Modell an den Text-Prompt hält. Größere Werte erhöhen die Übereinstimmung zwischen dem Textprompt und den generierten Bildern, können jedoch die Bildqualität beeinträchtigen. Werte: 0 - 500. Standard: 60.

    HTTP-Methode und URL:

    POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagegeneration@006:predict

    JSON-Text der Anfrage:

    {
      "instances": [
        {
          "prompt": "TEXT_PROMPT",
          "image": {
              "bytesBase64Encoded": "B64_BASE_IMAGE"
          },
          "mask": {
            "image": {
              "bytesBase64Encoded": "B64_MASK_IMAGE"
            }
          }
        }
      ],
      "parameters": {
        "sampleCount": EDIT_IMAGE_COUNT,
        "editConfig": {
          "editMode": "inpainting-insert",
          "guidanceScale": GUIDANCE_SCALE_VALUE
        }
      }
    }
    

    Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

    curl

    Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

    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/imagegeneration@006:predict"

    PowerShell

    Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

    $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/imagegeneration@006:predict" | Select-Object -Expand Content
    Die folgende Beispielantwort bezieht sich auf eine Anfrage mit "sampleCount": 2. Die Antwort gibt zwei Vorhersageobjekte zurück, wobei die generierten Bildbyte base64-codiert sind.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Java

    Bevor Sie dieses Beispiel anwenden, folgen Sie den Java-Einrichtungsschritten in der Vertex AI-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Java API.

    Richten Sie zur Authentifizierung bei Vertex AI Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

    In diesem Beispiel geben Sie das Modell als Teil eines EndpointName an. Der EndpointName wird an die Methode predict übergeben, die auf einem PredictionServiceClient aufgerufen wird. Der Dienst gibt eine bearbeitete Version des Bildes zurück, die dann lokal gespeichert wird.

    Weitere Informationen zu Modellversionen und ‑funktionen finden Sie unter Imagen-Modelle.

    
    import com.google.api.gax.rpc.ApiException;
    import com.google.cloud.aiplatform.v1.EndpointName;
    import com.google.cloud.aiplatform.v1.PredictResponse;
    import com.google.cloud.aiplatform.v1.PredictionServiceClient;
    import com.google.cloud.aiplatform.v1.PredictionServiceSettings;
    import com.google.gson.Gson;
    import com.google.protobuf.InvalidProtocolBufferException;
    import com.google.protobuf.Value;
    import com.google.protobuf.util.JsonFormat;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.util.Base64;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;
    
    public class EditImageInpaintingInsertMaskSample {
    
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "my-project-id";
        String location = "us-central1";
        String inputPath = "/path/to/my-input.png";
        String maskPath = "/path/to/my-mask.png";
        String prompt =
            ""; // The text prompt describing what you want to see inserted in the mask area.
    
        editImageInpaintingInsertMask(projectId, location, inputPath, maskPath, prompt);
      }
    
      // Edit an image using a mask file. Inpainting can insert the object designated by the prompt
      // into the masked area.
      public static PredictResponse editImageInpaintingInsertMask(
          String projectId, String location, String inputPath, String maskPath, String prompt)
          throws ApiException, IOException {
        final String endpoint = String.format("%s-aiplatform.googleapis.com:443", location);
        PredictionServiceSettings predictionServiceSettings =
            PredictionServiceSettings.newBuilder().setEndpoint(endpoint).build();
    
        // Initialize client that will be used to send requests. This client only needs to be created
        // once, and can be reused for multiple requests.
        try (PredictionServiceClient predictionServiceClient =
            PredictionServiceClient.create(predictionServiceSettings)) {
    
          final EndpointName endpointName =
              EndpointName.ofProjectLocationPublisherModelName(
                  projectId, location, "google", "imagegeneration@006");
    
          // Encode image and mask to Base64
          String imageBase64 =
              Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get(inputPath)));
          String maskBase64 =
              Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get(maskPath)));
    
          // Create the image and image mask maps
          Map<String, String> imageMap = new HashMap<>();
          imageMap.put("bytesBase64Encoded", imageBase64);
    
          Map<String, String> maskMap = new HashMap<>();
          maskMap.put("bytesBase64Encoded", maskBase64);
          Map<String, Map> imageMaskMap = new HashMap<>();
          imageMaskMap.put("image", maskMap);
    
          Map<String, Object> instancesMap = new HashMap<>();
          instancesMap.put("prompt", prompt); // [ "prompt", "<my-prompt>" ]
          instancesMap.put(
              "image", imageMap); // [ "image", [ "bytesBase64Encoded", "iVBORw0KGgo...==" ] ]
          instancesMap.put(
              "mask",
              imageMaskMap); // [ "mask", [ "image", [ "bytesBase64Encoded", "iJKDF0KGpl...==" ] ] ]
          instancesMap.put("editMode", "inpainting-insert"); // [ "editMode", "inpainting-insert" ]
          Value instances = mapToValue(instancesMap);
    
          // Optional parameters
          Map<String, Object> paramsMap = new HashMap<>();
          paramsMap.put("sampleCount", 1);
          Value parameters = mapToValue(paramsMap);
    
          PredictResponse predictResponse =
              predictionServiceClient.predict(
                  endpointName, Collections.singletonList(instances), parameters);
    
          for (Value prediction : predictResponse.getPredictionsList()) {
            Map<String, Value> fieldsMap = prediction.getStructValue().getFieldsMap();
            if (fieldsMap.containsKey("bytesBase64Encoded")) {
              String bytesBase64Encoded = fieldsMap.get("bytesBase64Encoded").getStringValue();
              Path tmpPath = Files.createTempFile("imagen-", ".png");
              Files.write(tmpPath, Base64.getDecoder().decode(bytesBase64Encoded));
              System.out.format("Image file written to: %s\n", tmpPath.toUri());
            }
          }
          return predictResponse;
        }
      }
    
      private static Value mapToValue(Map<String, Object> map) throws InvalidProtocolBufferException {
        Gson gson = new Gson();
        String json = gson.toJson(map);
        Value.Builder builder = Value.newBuilder();
        JsonFormat.parser().merge(json, builder);
        return builder.build();
      }
    }
    

    Node.js

    Bevor Sie dieses Beispiel anwenden, folgen Sie den Node.js-Einrichtungsschritten in der Vertex AI-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Node.js API.

    Richten Sie zur Authentifizierung bei Vertex AI Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

    In diesem Beispiel rufen Sie die Methode in einem predict PredictionServiceClient auf. Der Dienst generiert Bilder, die dann lokal gespeichert werden. Weitere Informationen zu Modellversionen und -funktionen finden Sie unter Imagen-Modelle.

    /**
     * TODO(developer): Update these variables before running the sample.
     */
    const projectId = process.env.CAIP_PROJECT_ID;
    const location = 'us-central1';
    const inputFile = 'resources/woman.png';
    const maskFile = 'resources/woman_inpainting_insert_mask.png';
    const prompt = 'hat';
    
    const aiplatform = require('@google-cloud/aiplatform');
    
    // Imports the Google Cloud Prediction Service Client library
    const {PredictionServiceClient} = aiplatform.v1;
    
    // Import the helper module for converting arbitrary protobuf.Value objects
    const {helpers} = aiplatform;
    
    // Specifies the location of the api endpoint
    const clientOptions = {
      apiEndpoint: `${location}-aiplatform.googleapis.com`,
    };
    
    // Instantiates a client
    const predictionServiceClient = new PredictionServiceClient(clientOptions);
    
    async function editImageInpaintingInsertMask() {
      const fs = require('fs');
      const util = require('util');
      // Configure the parent resource
      const endpoint = `projects/${projectId}/locations/${location}/publishers/google/models/imagegeneration@006`;
    
      const imageFile = fs.readFileSync(inputFile);
      // Convert the image data to a Buffer and base64 encode it.
      const encodedImage = Buffer.from(imageFile).toString('base64');
    
      const maskImageFile = fs.readFileSync(maskFile);
      // Convert the image mask data to a Buffer and base64 encode it.
      const encodedMask = Buffer.from(maskImageFile).toString('base64');
    
      const promptObj = {
        prompt: prompt, // The text prompt describing what you want to see inserted
        editMode: 'inpainting-insert',
        image: {
          bytesBase64Encoded: encodedImage,
        },
        mask: {
          image: {
            bytesBase64Encoded: encodedMask,
          },
        },
      };
      const instanceValue = helpers.toValue(promptObj);
      const instances = [instanceValue];
    
      const parameter = {
        // Optional parameters
        seed: 100,
        // Controls the strength of the prompt
        // 0-9 (low strength), 10-20 (medium strength), 21+ (high strength)
        guidanceScale: 21,
        sampleCount: 1,
      };
      const parameters = helpers.toValue(parameter);
    
      const request = {
        endpoint,
        instances,
        parameters,
      };
    
      // Predict request
      const [response] = await predictionServiceClient.predict(request);
      const predictions = response.predictions;
      if (predictions.length === 0) {
        console.log(
          'No image was generated. Check the request parameters and prompt.'
        );
      } else {
        let i = 1;
        for (const prediction of predictions) {
          const buff = Buffer.from(
            prediction.structValue.fields.bytesBase64Encoded.stringValue,
            'base64'
          );
          // Write image content to the output file
          const writeFile = util.promisify(fs.writeFile);
          const filename = `output${i}.png`;
          await writeFile(filename, buff);
          console.log(`Saved image ${filename}`);
          i++;
        }
      }
    }
    await editImageInpaintingInsertMask();

    Einfügen mit automatischer Maskenerkennung

    Verwenden Sie die folgenden Beispiele, um ein Inpainting zum Einfügen von Inhalten anzugeben. In diesen Beispielen geben Sie ein Basis-Image und einen Text-Prompt an. Imagen erkennt und erstellt automatisch einen Maskenbereich, um das Ausgangsbild zu verändern.

    Imagen 3

    Verwenden Sie die folgenden Beispiele, um eine Inpainting-Anfrage mit dem Imagen 3-Modell zu senden.

    Console

    1. Rufen Sie in der Google Cloud Console die Seite Vertex AI> Media Studio auf.

      Zu Media Studio

    2. Klicken Sie auf Hochladen. Wählen Sie im angezeigten Dateidialogfeld eine Datei zum Hochladen aus.
    3. Klicken Sie auf Inpaint (Bereich füllen).
    4. Klicken Sie in der Bearbeitungssymbolleiste auf background_replaceMaske extrahieren.
    5. Wählen Sie eine der Optionen zum Extrahieren von Masken aus:

      • Hintergrundelemente: Erkennt die Hintergrundelemente und erstellt eine Maske um diese Elemente.
      • Vordergrundelemente: Erkennt die Objekte im Vordergrund und erstellt eine Maske um diese herum.
      • background_replacePersonen: Erkennt Personen und erstellt eine Maske um sie herum.
    6. Optional: Passen Sie im Bereich Parameter die folgenden Optionen an:
      • Modell: Das Imagen-Modell, das verwendet werden soll
      • Anzahl der Ergebnisse: Die Anzahl der zu generierenden Ergebnisse
      • Negativer Prompt: Elemente, die nicht generiert werden sollen
    7. Geben Sie im Prompt-Feld einen neuen Prompt zum Ändern des Bildes ein.
    8. Klicken Sie auf SendenGenerieren.

    Python

    Installieren

    pip install --upgrade google-genai

    Weitere Informationen finden Sie in der SDK-Referenzdokumentation.

    Umgebungsvariablen für die Verwendung des Gen AI SDK mit Vertex AI festlegen:

    # 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",
            mask_dilation=0.1,
        ),
    )
    
    image = client.models.edit_image(
        model="imagen-3.0-capability-001",
        prompt="A small white ceramic bowl with lemons and limes",
        reference_images=[raw_ref, mask_ref],
        config=EditImageConfig(
            edit_mode="EDIT_MODE_INPAINT_INSERTION",
        ),
    )
    
    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

    Weitere Informationen finden Sie in der API-Referenz unter Bilder bearbeiten.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud Projekt-ID.
    • LOCATION: Die Region Ihres Projekts. Beispiel: us-central1, europe-west2 oder asia-northeast3. Eine Liste der verfügbaren Regionen finden Sie unter Generative AI an Vertex AI-Standorten.
    • TEXT_PROMPT ist der Text-Prompt, der bestimmt, welche Bilder das Modell generiert. Wenn Sie einen Prompt für das Einfügen durch Inpainting verwenden, sollten Sie den maskierten Bereich beschreiben, um die besten Ergebnisse zu erzielen. Vermeiden Sie Prompts, die nur aus einem Wort bestehen. Verwenden Sie beispielsweise „ein süßer Corgi“ anstelle von „Corgi“.
    • B64_BASE_IMAGE: Das Basisbild, das bearbeitet oder hochskaliert werden soll. Das Bild muss als base64-codierter Bytestring angegeben werden. Größenbeschränkung: 10 MB.
    • MASK_MODE: Ein String, der den Typ der automatischen Maskenerstellung festlegt, die vom Modell verwendet wird. Verfügbare Werte:
      • MASK_MODE_BACKGROUND: Generiert automatisch eine Maske mithilfe der Hintergrundsegmentierung.
      • MASK_MODE_FOREGROUND: Generiert automatisch eine Maske mithilfe der Vordergrundsegmentierung.
      • MASK_MODE_SEMANTIC: Generiert automatisch eine Maske mithilfe der semantischen Segmentierung basierend auf den Segmentierungsklassen, die Sie im maskImageConfig.maskClasses-Array angeben. Zum Beispiel:
                  "maskImageConfig": {
                    "maskMode": "MASK_MODE_SEMANTIC",
                    "maskClasses": [175, 176], // bicycle, car
                    "dilation": 0.01
                  }
                
    • MASK_DILATION – Gleitkommazahl. Der Prozentsatz der Bildbreite, um die diese Maske erweitert werden soll. Ein Wert von 0.01 wird empfohlen, um unvollkommene Eingabemasken zu kompensieren.
    • EDIT_STEPS – Ganzzahl. Die Anzahl der Stichprobenschritte für das Basismodell. Für das Einfügen durch Inpainting beginnen Sie bei 35 Schritten. Erhöhen Sie die Anzahl der Schritte auf das obere Limit von 75, wenn die Qualität nicht Ihren Anforderungen entspricht. Wenn Sie die Anzahl der Schritte erhöhen, steigt auch die Anfragelatenz.
    • EDIT_IMAGE_COUNT: Die Anzahl der bearbeiteten Bilder. Zulässige Ganzzahlwerte: 1–4. Standardwert: 4

    HTTP-Methode und URL:

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

    JSON-Text der Anfrage:

    {
      "instances": [
        {
          "prompt": "TEXT_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_INSERTION",
        "sampleCount": EDIT_IMAGE_COUNT
      }
    }
    

    Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

    curl

    Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

    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

    Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

    $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
    Die folgende Beispielantwort bezieht sich auf eine Anfrage mit "sampleCount": 2. Die Antwort gibt zwei Vorhersageobjekte zurück, wobei die generierten Bildbyte base64-codiert sind.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Imagen 2

    Verwenden Sie die folgenden Beispiele, um eine Inpainting-Anfrage mit dem Imagen 2-Modell zu senden.

    Console

    1. Rufen Sie in der Google Cloud Console die Seite Vertex AI> Media Studio auf.

      Zu Media Studio

    2. Klicken Sie im unteren Textbereich auf Bearbeiten.

    3. Klicken Sie auf Hochladen, um das lokal gespeicherte Bild zur Bearbeitung auszuwählen.

    4. Klicken Sie in der Bearbeitungssymbolleiste auf background_replaceExtraktion.

    5. Wählen Sie eine der Optionen zum Extrahieren von Masken aus:

      • Hintergrundelemente: Erkennt die Hintergrundelemente und erstellt eine Maske um diese Elemente.
      • Vordergrundelemente: Erkennt die Objekte im Vordergrund und erstellt eine Maske um diese herum.
      • background_replace Personen - Erkennt Personen und erstellt eine Maske um sie herum.
    6. Optional: Passen Sie im Bereich Parameter die Anzahl der Ergebnisse, den negativen Prompt und die Anleitung für Text-Prompts oder andere Parameter an.

    7. Geben Sie im Prompt-Feld einen Prompt zum Ändern des Bildes ein.

    8. Klicken Sie auf Erstellen.

    Python

    Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Python-API-Referenzdokumentation.

    
    import vertexai
    from vertexai.preview.vision_models import Image, ImageGenerationModel
    
    # TODO(developer): Update and un-comment below lines
    # PROJECT_ID = "your-project-id"
    # input_file = "input-image.png"
    # mask_mode = "background" # 'background', 'foreground', or 'semantic'
    # output_file = "output-image.png"
    # prompt = "beach" # The text prompt describing what you want to see inserted.
    
    vertexai.init(project=PROJECT_ID, location="us-central1")
    
    model = ImageGenerationModel.from_pretrained("imagegeneration@006")
    base_img = Image.load_from_file(location=input_file)
    
    images = model.edit_image(
        base_image=base_img,
        mask_mode=mask_mode,
        prompt=prompt,
        edit_mode="inpainting-insert",
    )
    
    images[0].save(location=output_file, include_generation_parameters=False)
    
    # Optional. View the edited image in a notebook.
    # images[0].show()
    
    print(f"Created output image using {len(images[0]._image_bytes)} bytes")
    # Example response:
    # Created output image using 1234567 bytes
    

    REST

    Weitere Informationen zu imagegeneration-Modellanfragen finden Sie in der API-Referenz des imagegeneration-Modells.

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT_ID: Ihre Google Cloud Projekt-ID.
    • LOCATION: Die Region Ihres Projekts. Beispiel: us-central1, europe-west2 oder asia-northeast3. Eine Liste der verfügbaren Regionen finden Sie unter Generative AI an Vertex AI-Standorten.
    • TEXT_PROMPT: Der Text-Prompt, der bestimmt, welche Bilder das Modell generiert. Dieses Feld ist sowohl zum Erstellen als auch zum Bearbeiten erforderlich.
    • B64_BASE_IMAGE: Das Basisbild, das bearbeitet oder hochskaliert werden soll. Das Bild muss als base64-codierter Bytestring angegeben werden. Größenbeschränkung: 10 MB.
    • EDIT_IMAGE_COUNT: Die Anzahl der bearbeiteten Bilder. Standardwert: 4
    • MASK_TYPE: Fordert das Modell auf, eine Maske zu generieren, anstatt dass Sie eine Maske angeben müssen. Wenn Sie diesen Parameter angeben, sollten Sie ein mask-Objekt weglassen. Verfügbare Werte:
      • background: Generiert automatisch eine Maske für alle Bereiche mit Ausnahme des primären Objekts, der primären Person oder des primären Motivs im Bild.
      • foreground: Generiert automatisch eine Maske für das primäre Objekt, die primäre Person oder das primäre Motiv im Bild.
      • semantic: Verwenden Sie die automatische Segmentierung, um einen Maskenbereich für eine oder mehrere Segmentierungsklassen zu erstellen. Legen Sie die Segmentierungsklassen mit dem Parameter classes und den entsprechenden class_id-Werten fest. Sie können bis zu 5 Klassen angeben. Wenn Sie den semantischen Maskentyp verwenden, sollte das maskMode-Objekt so aussehen:
        "maskMode": {
          "maskType": "semantic",
          "classes": [class_id1, class_id2]
        }
    • GUIDANCE_SCALE_VALUE: Ein Parameter (Ganzzahl), der steuert, wie sehr sich das Modell an den Text-Prompt hält. Größere Werte erhöhen die Übereinstimmung zwischen dem Textprompt und den generierten Bildern, können jedoch die Bildqualität beeinträchtigen. Werte: 0 - 500. Standard: 60.

    HTTP-Methode und URL:

    POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagegeneration@006:predict

    JSON-Text der Anfrage:

    {
      "instances": [
        {
          "prompt": "TEXT_PROMPT",
          "image": {
            "bytesBase64Encoded": "B64_BASE_IMAGE"
          }
        }
      ],
      "parameters": {
        "sampleCount": EDIT_IMAGE_COUNT,
        "editConfig": {
          "editMode": "inpainting-insert",
          "maskMode": {
            "maskType": "MASK_TYPE"
          },
          "guidanceScale": GUIDANCE_SCALE_VALUE
        }
      }
    }
    

    Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

    curl

    Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

    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/imagegeneration@006:predict"

    PowerShell

    Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

    $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/imagegeneration@006:predict" | Select-Object -Expand Content
    Die folgende Beispielantwort bezieht sich auf eine Anfrage mit "sampleCount": 2. Die Antwort gibt zwei Vorhersageobjekte zurück, wobei die generierten Bildbyte base64-codiert sind.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Beschränkungen

    In den folgenden Abschnitten werden die Einschränkungen der Funktion „Objekte entfernen“ von Imagen erläutert.

    Geänderte Pixel

    Pixel, die vom Modell generiert werden und sich nicht in der Maske befinden, sind nicht garantiert identisch mit der Eingabe und werden in der Auflösung des Modells generiert (z. B. 1024 × 1024). Das generierte Bild kann sich in Details vom Original unterscheiden.

    Wenn Sie das Bild perfekt erhalten möchten, empfehlen wir, das generierte Bild mithilfe der Maske mit dem Eingabebild zu kombinieren. Wenn die Auflösung des Eingabebilds in der Regel 2K oder höher ist, muss das generierte Bild mit dem Eingabebild verschmolzen werden.

    Einschränkung einfügen

    Die eingefügten Elemente entsprechen in der Regel dem Stil des Basis-Images. Bei bestimmten Keywords kann es jedoch vorkommen, dass Ausgaben im Cartoon-Stil generiert werden, obwohl Sie eine fotorealistische Ausgabe erstellen möchten.

    Ein Beispiel, das wir häufig gesehen haben, sind ungenaue Farben. Wenn Sie beispielsweise „gelbe Giraffe“ eingeben, wird in der Regel eine Cartoon-Giraffe generiert, da fotorealistische Giraffen braun und hellbraun sind. Ebenso schwierig ist es, fotorealistische, aber unnatürliche Farben zu generieren.

    Nächste Schritte

    Artikel zu Imagen und anderen Produkten für generative KI in Vertex AI: