Inserire oggetti in un'immagine utilizzando il riempimento

Questa pagina descrive l'inserimento di oggetti in un'immagine, chiamato anche inpainting. Imagen su Vertex AI consente di specificare un'area di maschera per inserire oggetti in un'immagine. Puoi portare la tua maschera oppure lasciare che Imagen su Vertex AI ne generi una per te.

Esempio di inserimento di contenuti

Con il riempimento per inserire contenuti, puoi utilizzare un'immagine base, una maschera dell'immagine e un prompt di testo per aggiungere contenuti a un'immagine esistente.

Input

Immagine di base* da modificare Area mascherata specificata utilizzando gli strumenti nella console Google Cloud Prompt di testo
Un'immagine di base di esempio. Un barattolo di vetro contiene un liquido rosso con
           una fetta di limone sul lato e una cannuccia che spunta. Fette di limone
           visibili in primo piano a sinistra L'immagine di base di un barattolo di vetro, ora con un'area di maschera specificata nella
           console Cloud fragole

* Crediti immagine: Alex Lvrs su Unsplash.

Output dopo aver specificato un'area di mascheramento nella console Google Cloud

Screenshot di una modifica generata di un barattolo di vetro contenente un
           liquido rosso. In questo screenshot, le fette di limone precedentemente in primo piano
           nell'immagine vengono sostituite da due fragole direttamente davanti
           al barattolo. Screenshot di una modifica generata di un barattolo di vetro contenente un
           liquido rosso. In questo screenshot, le fette di limone precedentemente in primo piano
           nell'immagine vengono sostituite da tre fragole appena a sinistra
           del barattolo. Screenshot di una modifica generata di un barattolo di vetro contenente un
           liquido rosso. In questo screenshot, le fette di limone precedentemente in primo piano
           nell'immagine vengono sostituite da due fragole, leggermente davanti
           e a sinistra del barattolo.

Visualizzare la scheda del modello Imagen per la modifica e la personalizzazione

Prima di iniziare

  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. Configura l'autenticazione per il tuo ambiente.

    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

    Per utilizzare gli esempi di Java questa pagina in un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

    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.

    Per saperne di più, consulta Configura ADC per un ambiente di sviluppo locale nella documentazione sull'autenticazione Google Cloud .

    Node.js

    Per utilizzare gli esempi di Node.js questa pagina in un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

    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.

    Per saperne di più, consulta Configura ADC per un ambiente di sviluppo locale nella documentazione sull'autenticazione Google Cloud .

    Python

    Per utilizzare gli esempi di Python questa pagina in un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

    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.

    Per saperne di più, consulta Configura ADC per un ambiente di sviluppo locale nella documentazione sull'autenticazione Google Cloud .

    REST

    Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.

      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.

    Per saperne di più, consulta la sezione Autenticarsi per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud .

    Inserire con un'area di maschera definita

    Utilizza i seguenti esempi per specificare l'inpainting per inserire contenuti. In questi esempi, specifica un'immagine di base, un prompt di testo e un'area della maschera per modificare l'immagine di base.

    Imagen 3

    Utilizza i seguenti esempi per inviare una richiesta di inpainting utilizzando il modello Imagen 3.

    Console

    1. Nella console Google Cloud , vai alla pagina Vertex AI > Media Studio .

      Vai a Media Studio

    2. Fai clic su Carica. Nella finestra di dialogo dei file visualizzata, seleziona un file da caricare.
    3. Fai clic su Inpaint.
    4. Esegui una di queste operazioni:

      • Caricare la propria maschera:
        1. Crea una maschera sul computer.
        2. Fai clic su Carica maschera. Nella finestra di dialogo visualizzata, seleziona una maschera da caricare.
      • Definisci la maschera:nella barra degli strumenti di modifica, utilizza gli strumenti maschera (casella , pennello o strumento Inverti masked_transitions) per specificare l'area o le aree a cui aggiungere contenuti.
    5. (Facoltativo) Nel riquadro Parametri, regola le seguenti opzioni:
      • Modello: il modello Imagen da utilizzare
      • Numero di risultati: il numero di risultati da generare
      • Prompt negativo: elementi da evitare di generare
    6. Nel campo del prompt, inserisci un prompt per modificare l'immagine.
    7. Fai clic su Genera.

    Python

    Installa

    pip install --upgrade google-genai

    Per saperne di più, consulta la documentazione di riferimento dell'SDK.

    Imposta le variabili di ambiente per utilizzare l'SDK Gen AI con Vertex AI:

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

    from google import genai
    from google.genai.types import RawReferenceImage, MaskReferenceImage, MaskReferenceConfig, EditImageConfig
    
    client = genai.Client()
    
    # TODO(developer): Update and un-comment below line
    # output_file = "output-image.png"
    
    raw_ref = RawReferenceImage(
        reference_image=Image.from_file(location='test_resources/fruit.png'), reference_id=0)
    mask_ref = MaskReferenceImage(
        reference_id=1,
        reference_image=Image.from_file(location='test_resources/fruit_mask.png'),
        config=MaskReferenceConfig(
            mask_mode="MASK_MODE_USER_PROVIDED",
            mask_dilation=0.01,
        ),
    )
    
    image = client.models.edit_image(
        model="imagen-3.0-capability-001",
        prompt="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

    Per saperne di più, consulta il riferimento API Modifica immagini.

    Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

    • PROJECT_ID: il tuo Google Cloud ID progetto.
    • LOCATION: la regione del tuo progetto. Ad esempio, us-central1, europe-west2 o asia-northeast3. Per un elenco delle regioni disponibili, consulta Località dell'AI generativa su Vertex AI.
    • TEXT_PROMPT: Il prompt di testo guida le immagini che il modello genera. Quando utilizzi un prompt per l'inserimento dell'inpainting, utilizza una descrizione dell'area mascherata per ottenere risultati ottimali. Evita i prompt di una sola parola. Ad esempio, utilizza "un simpatico corgi" anziché "corgi".
    • B64_BASE_IMAGE: L'immagine di base da modificare o aumentare di risoluzione. L'immagine deve essere specificata come stringa di byte con codifica base64. Dimensioni massime: 10 MB.
    • B64_MASK_IMAGE: L'immagine in bianco e nero che vuoi utilizzare come livello maschera per modificare l'immagine originale. L'immagine deve essere specificata come stringa di byte con codifica base64. Dimensioni massime: 10 MB.
    • MASK_DILATION - float. La percentuale della larghezza dell'immagine in base alla quale dilatare questa maschera. Un valore di 0.01 è consigliato per compensare le maschere di input imperfette.
    • EDIT_STEPS - numero intero. Il numero di passaggi di campionamento per il modello di base. Per l'inserimento dell'inpainting, inizia da 35 passaggi. Aumenta i passaggi fino al limite superiore di 75 se la qualità non soddisfa i tuoi requisiti. L'aumento dei passaggi aumenta anche la latenza delle richieste.
    • EDIT_IMAGE_COUNT: il numero di immagini modificate. Valori interi accettati: 1-4. Il valore predefinito è 4.

    Metodo HTTP e URL:

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

    Corpo JSON della richiesta:

    {
      "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
      }
    }
    

    Per inviare la richiesta, scegli una di queste opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    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

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    $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
    La seguente risposta di esempio è per una richiesta con "sampleCount": 2. La risposta restituisce due oggetti di previsione, con i byte dell'immagine generata codificati in base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Imagen 2

    Utilizza i seguenti esempi per inviare una richiesta di inpainting utilizzando il modello Imagen 2.

    Console

    1. Nella console Google Cloud , vai alla pagina Vertex AI > Media Studio .

      Vai a Media Studio

    2. Fai clic su Carica. Nella finestra di dialogo dei file visualizzata, seleziona un file da caricare.
    3. Fai clic su Inpaint.
    4. Esegui una di queste operazioni:

      • Caricare la propria maschera:
        1. Crea una maschera sul computer.
        2. Fai clic su Carica maschera. Nella finestra di dialogo visualizzata, seleziona una maschera da caricare.
      • Definisci la maschera:nella barra degli strumenti di modifica, utilizza gli strumenti maschera (casella , pennello o strumento masked_transitionsinverti) per specificare l'area o le aree a cui aggiungere contenuti.
    5. Facoltativo. Nel riquadro Parametri, modifica le seguenti opzioni:
      • Modello: il modello Imagen da utilizzare
      • Numero di risultati: il numero di risultati da generare
      • Prompt negativo: elementi da evitare di generare
    6. Nel campo del prompt, inserisci un nuovo prompt per modificare l'immagine.
    7. Fai clic su Genera.

    Python

    Per scoprire come installare o aggiornare l'SDK Vertex AI Python, consulta Installare l'SDK Vertex AI Python. Per saperne di più, consulta la documentazione di riferimento dell'API Python.

    
    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

    Per ulteriori informazioni sulle richieste del modello imagegeneration, consulta il riferimento API del modello imagegeneration.

    Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

    • PROJECT_ID: il tuo Google Cloud ID progetto.
    • LOCATION: la regione del tuo progetto. Ad esempio, us-central1, europe-west2 o asia-northeast3. Per un elenco delle regioni disponibili, consulta Località dell'AI generativa su Vertex AI.
    • TEXT_PROMPT: Il prompt di testo che guida le immagini generate dal modello. Questo campo è obbligatorio sia per la generazione che per la modifica.
    • B64_BASE_IMAGE: L'immagine di base da modificare o aumentare di risoluzione. L'immagine deve essere specificata come stringa di byte con codifica base64. Dimensioni massime: 10 MB.
    • B64_MASK_IMAGE: L'immagine in bianco e nero che vuoi utilizzare come livello maschera per modificare l'immagine originale. L'immagine deve essere specificata come stringa di byte con codifica base64. Dimensioni massime: 10 MB.
    • EDIT_IMAGE_COUNT: il numero di immagini modificate. Valore predefinito: 4.
    • GUIDANCE_SCALE_VALUE: Un parametro (numero intero) che controlla il grado di aderenza del modello al prompt di testo. Valori più elevati aumentano l'allineamento tra il prompt di testo e le immagini generate, ma potrebbero compromettere la qualità dell'immagine. Valori: 0 - 500. Predefinito: 60.

    Metodo HTTP e URL:

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

    Corpo JSON della richiesta:

    {
      "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
        }
      }
    }
    

    Per inviare la richiesta, scegli una di queste opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    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

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    $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
    La seguente risposta di esempio è per una richiesta con "sampleCount": 2. La risposta restituisce due oggetti di previsione, con i byte dell'immagine generata codificati in base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Java

    Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella guida rapida di Vertex AI per l'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Vertex AI Java.

    Per autenticarti in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

    In questo esempio, specifichi il modello come parte di un EndpointName. EndpointName viene passato al metodo predict, che viene chiamato su un PredictionServiceClient. Il servizio restituisce una versione modificata dell'immagine, che viene poi salvata localmente.

    Per saperne di più sulle versioni e sulle funzionalità dei modelli, consulta Modelli Imagen.

    
    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

    Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js nella guida rapida di Vertex AI per l'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Vertex AI Node.js.

    Per autenticarti in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configura l'autenticazione per un ambiente di sviluppo locale.

    In questo esempio, chiami il metodo predict su un PredictionServiceClient. Il servizio genera immagini che vengono poi salvate localmente. Per saperne di più sulle versioni e sulle funzionalità dei modelli, consulta Modelli Imagen.

    /**
     * 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();

    Inserire con il rilevamento automatico della maschera

    Utilizza i seguenti esempi per specificare l'inpainting per inserire contenuti. In questi esempi specifichi un'immagine di base e un prompt di testo. Imagen rileva e crea automaticamente un'area della maschera per modificare l'immagine di base.

    Imagen 3

    Utilizza i seguenti esempi per inviare una richiesta di inpainting utilizzando il modello Imagen 3.

    Console

    1. Nella console Google Cloud , vai alla pagina Vertex AI > Media Studio .

      Vai a Media Studio

    2. Fai clic su Carica. Nella finestra di dialogo dei file visualizzata, seleziona un file da caricare.
    3. Fai clic su Inpaint.
    4. Nella barra degli strumenti di modifica, fai clic su background_replaceEstrai maschera.
    5. Seleziona una delle opzioni di estrazione della maschera:

      • Elementi di sfondo: rileva gli elementi di sfondo e crea una maschera intorno a loro.
      • Elementi in primo piano: rileva gli oggetti in primo piano e crea una maschera intorno a loro.
      • background_replacePersone: rileva le persone e crea una maschera intorno a loro.
    6. (Facoltativo) Nel riquadro Parametri, regola le seguenti opzioni:
      • Modello: il modello Imagen da utilizzare
      • Numero di risultati: il numero di risultati da generare
      • Prompt negativo: elementi da evitare di generare
    7. Nel campo del prompt, inserisci un nuovo prompt per modificare l'immagine.
    8. Fai clic su InviaGenera.

    Python

    Installa

    pip install --upgrade google-genai

    Per saperne di più, consulta la documentazione di riferimento dell'SDK.

    Imposta le variabili di ambiente per utilizzare l'SDK Gen AI con Vertex AI:

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

    from google import genai
    from google.genai.types import RawReferenceImage, MaskReferenceImage, MaskReferenceConfig, EditImageConfig
    
    client = genai.Client()
    
    # TODO(developer): Update and un-comment below line
    # output_file = "output-image.png"
    
    raw_ref = RawReferenceImage(
        reference_image=Image.from_file(location='test_resources/fruit.png'), reference_id=0)
    mask_ref = MaskReferenceImage(
        reference_id=1,
        reference_image=None,
        config=MaskReferenceConfig(
            mask_mode="MASK_MODE_FOREGROUND",
            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

    Per ulteriori informazioni, consulta il riferimento all'API Modifica immagini.

    Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

    • PROJECT_ID: il tuo Google Cloud ID progetto.
    • LOCATION: la regione del tuo progetto. Ad esempio, us-central1, europe-west2 o asia-northeast3. Per un elenco delle regioni disponibili, consulta Località dell'AI generativa su Vertex AI.
    • TEXT_PROMPT: Il prompt di testo guida le immagini che il modello genera. Quando utilizzi un prompt per l'inserimento dell'inpainting, utilizza una descrizione dell'area mascherata per ottenere risultati ottimali. Evita i prompt di una sola parola. Ad esempio, utilizza "un simpatico corgi" anziché "corgi".
    • B64_BASE_IMAGE: L'immagine di base da modificare o aumentare di risoluzione. L'immagine deve essere specificata come stringa di byte con codifica base64. Dimensioni massime: 10 MB.
    • MASK_MODE: una stringa che imposta il tipo di creazione automatica della maschera utilizzata dal modello. Valori disponibili:
      • MASK_MODE_BACKGROUND: genera automaticamente una maschera utilizzando la segmentazione dello sfondo.
      • MASK_MODE_FOREGROUND: genera automaticamente una maschera utilizzando la segmentazione in primo piano.
      • MASK_MODE_SEMANTIC: genera automaticamente una maschera utilizzando la segmentazione semantica in base alle classi di segmentazione specificate nell'array maskImageConfig.maskClasses. Ad esempio:
                  "maskImageConfig": {
                    "maskMode": "MASK_MODE_SEMANTIC",
                    "maskClasses": [175, 176], // bicycle, car
                    "dilation": 0.01
                  }
                
    • MASK_DILATION - float. La percentuale della larghezza dell'immagine in base alla quale dilatare questa maschera. Un valore di 0.01 è consigliato per compensare le maschere di input imperfette.
    • EDIT_STEPS - numero intero. Il numero di passaggi di campionamento per il modello di base. Per l'inserimento dell'inpainting, inizia da 35 passaggi. Aumenta i passaggi fino al limite superiore di 75 se la qualità non soddisfa i tuoi requisiti. L'aumento dei passaggi aumenta anche la latenza delle richieste.
    • EDIT_IMAGE_COUNT: il numero di immagini modificate. Valori interi accettati: 1-4. Il valore predefinito è 4.

    Metodo HTTP e URL:

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

    Corpo JSON della richiesta:

    {
      "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
      }
    }
    

    Per inviare la richiesta, scegli una di queste opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    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

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    $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
    La seguente risposta di esempio è per una richiesta con "sampleCount": 2. La risposta restituisce due oggetti di previsione, con i byte dell'immagine generata codificati in base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Imagen 2

    Utilizza i seguenti esempi per inviare una richiesta di inpainting utilizzando il modello Imagen 2.

    Console

    1. Nella console Google Cloud , vai alla pagina Vertex AI > Media Studio .

      Vai a Media Studio

    2. Nel riquadro delle attività in basso, fai clic su Modifica immagine.

    3. Fai clic su Carica per selezionare l'immagine memorizzata localmente da modificare.

    4. Nella barra degli strumenti di modifica, fai clic su background_replaceEstrai.

    5. Seleziona una delle opzioni di estrazione della maschera:

      • Elementi di sfondo: rileva gli elementi di sfondo e crea una maschera intorno a loro.
      • Elementi in primo piano: rileva gli oggetti in primo piano e crea una maschera intorno a loro.
      • background_replacePersone: rileva le persone e crea una maschera intorno a loro.
    6. (Facoltativo) Nel riquadro Parametri, regola Numero di risultati, Prompt negativo, Guida al prompt di testo o altri parametri.

    7. Nel campo del prompt, inserisci un prompt per modificare l'immagine.

    8. Fai clic su Genera.

    Python

    Per scoprire come installare o aggiornare l'SDK Vertex AI Python, consulta Installare l'SDK Vertex AI Python. Per saperne di più, consulta la documentazione di riferimento dell'API Python.

    
    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

    Per ulteriori informazioni sulle richieste del modello imagegeneration, consulta il riferimento API del modello imagegeneration.

    Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

    • PROJECT_ID: il tuo Google Cloud ID progetto.
    • LOCATION: la regione del tuo progetto. Ad esempio, us-central1, europe-west2 o asia-northeast3. Per un elenco delle regioni disponibili, consulta Località dell'AI generativa su Vertex AI.
    • TEXT_PROMPT: Il prompt di testo che guida le immagini generate dal modello. Questo campo è obbligatorio sia per la generazione che per la modifica.
    • B64_BASE_IMAGE: L'immagine di base da modificare o aumentare di risoluzione. L'immagine deve essere specificata come stringa di byte con codifica base64. Dimensioni massime: 10 MB.
    • EDIT_IMAGE_COUNT: il numero di immagini modificate. Valore predefinito: 4.
    • MASK_TYPE: chiede al modello di generare una maschera senza che tu debba fornirne una. Di conseguenza, quando fornisci questo parametro, devi omettere un oggetto mask. Valori disponibili:
      • background: genera automaticamente una maschera per tutte le regioni, ad eccezione dell'oggetto, della persona o del soggetto principale dell'immagine.
      • foreground: genera automaticamente una maschera per l'oggetto, la persona o il soggetto principale dell'immagine.
      • semantic: utilizza la segmentazione automatica per creare un'area di maschera per una o più classi di segmentazione. Imposta le classi di segmentazione utilizzando il parametro classes e i valori class_id corrispondenti. Puoi specificare fino a 5 classi. Quando utilizzi il tipo di maschera semantica, l'oggetto maskMode dovrebbe avere il seguente aspetto:
        "maskMode": {
          "maskType": "semantic",
          "classes": [class_id1, class_id2]
        }
    • GUIDANCE_SCALE_VALUE: Un parametro (numero intero) che controlla il grado di aderenza del modello al prompt di testo. Valori più elevati aumentano l'allineamento tra il prompt di testo e le immagini generate, ma potrebbero compromettere la qualità dell'immagine. Valori: 0 - 500. Predefinito: 60.

    Metodo HTTP e URL:

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

    Corpo JSON della richiesta:

    {
      "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
        }
      }
    }
    

    Per inviare la richiesta, scegli una di queste opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    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

    Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

    $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
    La seguente risposta di esempio è per una richiesta con "sampleCount": 2. La risposta restituisce due oggetti di previsione, con i byte dell'immagine generata codificati in base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Limitazioni

    Le sezioni seguenti spiegano le limitazioni della funzionalità di rimozione degli oggetti di Imagen.

    Pixel modificati

    Non è garantito che i pixel generati dal modello che non si trovano nella maschera siano identici all'input e vengono generati alla risoluzione del modello (ad esempio 1024 x 1024). Nell'immagine generata potrebbero essere presenti modifiche minime.

    Se vuoi una conservazione perfetta dell'immagine, ti consigliamo di unire l'immagine generata con l'immagine di input utilizzando la maschera. In genere, se la risoluzione dell'immagine di input è 2K o superiore, è necessario combinare l'immagine generata e l'immagine di input.

    Inserisci limitazione

    L'inserimento in genere corrisponde allo stile dell'immagine di base. Tuttavia, alcune parole chiave potrebbero attivare output che assomigliano a stili di cartoni animati, nonostante la tua intenzione di creare un output fotorealistico.

    Un esempio che abbiamo notato in particolare sono i colori imprecisi. Ad esempio, "giraffa gialla" tende a produrre una giraffa dei cartoni animati, perché le giraffe fotorealistiche sono marroni e beige. Allo stesso modo, è difficile generare colori fotorealistici ma innaturali.

    Passaggi successivi

    Leggi gli articoli su Imagen e altri prodotti di AI generativa su Vertex AI: