Bildinhalte mit Outpainting erweitern

Auf dieser Seite wird Outpainting beschrieben. Mit Outpainting können Sie Imagen verwenden, um den Inhalt eines Bildes auf einen größeren Bereich oder einen Bereich mit unterschiedlichen Abmessungen zu erweitern.

Beispiel für die Erweiterung

Das Outpainting ist eine maskenbasierte Bearbeitungsmethode, mit der Sie den Inhalt eines Basisbilds erweitern können, damit er in einen größeren oder unterschiedlich großen Maskenbereich passt.

Beispiel für Basisbild
Originalbild mit Bildabstand, der der Größe des Maskenbildes (Ziel) entspricht.
Bildquelle: Kari Shea auf Unsplash
Beispiel für ein Maskenbild
Maskenbild in den Abmessungen der Zielausgabe, wobei die Pixelabmessungen und der Ort des Originalbilds markiert sind.
Beispielausgabebild
Ausgabebild wird übermalt (kein Prompt).

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.

    Inhalte eines Bildes erweitern

    Verwenden Sie die folgenden Codebeispiele, um den Inhalt eines vorhandenen Bildes zu erweitern.

    Imagen 3

    Verwenden Sie die folgenden Beispiele, um eine Outpainting-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 Outpaint.
    4. Wählen Sie im Menü Outpaint eines der vordefinierten Seitenverhältnisse für das endgültige Bild aus oder klicken Sie auf Benutzerdefiniert, um benutzerdefinierte Abmessungen für das endgültige Bild festzulegen.
    5. Wählen Sie in der Bearbeitungssymbolleiste die Platzierung des Bildes aus:
      • Linksbündig:
      • Horizontal zentriert ausrichten:
      • Rechts ausrichten:
      • Oben ausrichten:
      • Vertikal zentriert ausrichten:
      • Unten ausrichten:
    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 Prompt zum Ändern des Bildes ein.
    8. 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/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

    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.
    • prompt: Beim Inpainting von Bildern können Sie einen leeren String angeben, um die bearbeiteten Bilder zu erstellen. Wenn Sie einen Prompt angeben, sollten Sie den maskierten Bereich beschreiben, um die besten Ergebnisse zu erzielen. Verwenden Sie beispielsweise „ein blauer Himmel“ anstelle von „füge einen blauen Himmel ein“.
    • referenceType: Ein ReferenceImage ist ein Bild, das zusätzlichen Kontext für die Bildbearbeitung liefert. Für Bearbeitungsanwendungsfälle ist ein normales RGB-Rohbild als Referenz (REFERENCE_TYPE_RAW) erforderlich. Eine Anfrage darf höchstens ein Rohreferenzbild enthalten. Das Ausgabebild hat dieselbe Höhe und Breite wie das RAW-Referenzbild. Für Anwendungsfälle mit maskierter Bearbeitung ist ein Maskenreferenzbild (REFERENCE_TYPE_MASK) erforderlich. Wenn ein rohes Referenzbild vorhanden ist, muss das Maskenbild dieselbe Höhe und Breite wie das rohe Referenzbild haben. Wenn das Maskenreferenzbild leer ist und maskMode nicht auf MASK_MODE_USER_PROVIDED festgelegt ist, wird die Maske anhand des Rohreferenzbilds berechnet.
    • 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_OUTPAINTING_MASK: Das Schwarz-Weiß-Bild, das Sie als Maskenebene zum Bearbeiten des Originalbilds verwenden möchten. Die Maske muss dieselbe Auflösung wie das Eingabebild haben. Das Ausgabebild hat dieselbe Auflösung wie das Eingabebild. Dieses Maskenbild 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. Für die Funktion „Bild erweitern“ wird ein Wert von 0.03 empfohlen. Wenn Sie "dilation": 0.0 festlegen, kann das zu sichtbaren Rändern am Erweiterungspunkt oder zu einem weißen Randeffekt führen.
    • EDIT_STEPS – Ganzzahl. Die Anzahl der Stichprobenschritte für das Basismodell. Für Outpainting beginnen Sie mit 35 Schritten. Erhöhen Sie die Anzahl der Schritte, wenn die Qualität nicht Ihren Anforderungen entspricht.
    • 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": "",
          "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
      }
    }
    

    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 Outpainting-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 Ihr lokal gespeichertes Produktbild zum Bearbeiten auszuwählen.

    4. Klicken Sie in der Bearbeitungssymbolleiste auf Erweitern.

    5. Wählen Sie eines der vordefinierten Seitenverhältnisse für das endgültige Bild aus oder klicken Sie auf Benutzerdefiniert, um benutzerdefinierte Abmessungen für das endgültige Bild festzulegen.

    6. Optional. Wählen Sie in der Bearbeitungssymbolleiste die horizontale Platzierung (links, horizontale Mitte oder rechtsbündig) und die vertikale Platzierung ( oben, vertikale Mitte oder unten) des Originalbilds im Canvas des zu generierenden Bildes.

    7. Optional. Passen Sie im Bereich Parameter die Anzahl der Ergebnisse oder andere Parameter an.

    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_file = "mask-image.png"
    # output_file = "output-image.png"
    # prompt = "" # The optional 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="outpainting",
    )
    
    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

    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.
    • prompt: Beim Inpainting von Bildern können Sie einen leeren String angeben, um die bearbeiteten Bilder zu erstellen.
    • 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_OUTPAINTING_MASK: Das Schwarz-Weiß-Bild, das Sie als Maskenebene zum Bearbeiten des Originalbilds verwenden möchten. Die Maske muss dieselbe Auflösung wie das Eingabebild haben. Das Ausgabebild hat dieselbe Auflösung wie das Eingabebild. Dieses Maskenbild muss als base64-codierter Bytestring angegeben werden. Größenbeschränkung: 10 MB.
    • EDIT_IMAGE_COUNT: Die Anzahl der bearbeiteten Bilder. Standardwert: 4

    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": "",
          "image": {
              "bytesBase64Encoded": "B64_BASE_IMAGE"
          },
          "mask": {
            "image": {
              "bytesBase64Encoded": "B64_OUTPAINTING_MASK"
            }
          }
        }
      ],
      "parameters": {
        "sampleCount": EDIT_IMAGE_COUNT,
        "editConfig": {
          "editMode": "outpainting"
        }
      }
    }
    

    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.

    
    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 EditImageOutpaintingMaskSample {
    
      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 optional text prompt describing what you want to see inserted.
    
        editImageOutpaintingMask(projectId, location, inputPath, maskPath, prompt);
      }
    
      // Edit an image using a mask file. Outpainting lets you expand the content of a base image to fit
      // a larger or differently sized mask canvas.
      public static PredictResponse editImageOutpaintingMask(
          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", "outpainting"); // [ "editMode", "outpainting" ]
          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.

    /**
     * TODO(developer): Update these variables before running the sample.
     */
    const projectId = process.env.CAIP_PROJECT_ID;
    const location = 'us-central1';
    const inputFile = 'resources/roller_skaters.png';
    const maskFile = 'resources/roller_skaters_mask.png';
    const prompt = 'city with skyscrapers';
    
    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 editImageOutpaintingMask() {
      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 optional text prompt describing what you want to see inserted
        editMode: 'outpainting',
        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 editImageOutpaintingMask();

    Beschränkungen

    Wenn das erweiterte Bild um 200 % oder mehr vergrößert wird, kann das Modell verzerrte Details erzeugen. Als Best Practice empfehlen wir, einen Nachbearbeitungsschritt hinzuzufügen, um Alpha-Blending auf ausgemalten Bildern auszuführen.

    Der folgende Code ist ein Beispiel für die Nachbearbeitung:

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

    Nächste Schritte

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