Sostituire lo sfondo di un'immagine

Questa pagina descrive la sostituzione dello sfondo di un'immagine. Imagen su Vertex AI consente di utilizzare la segmentazione automatica degli oggetti per mantenere i contenuti durante la modifica di altri contenuti dell'immagine. Con Imagen 3 puoi anche fornire la tua area di maschera per un maggiore controllo durante la modifica.

I seguenti modelli supportano la sostituzione degli sfondi delle immagini:

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

Esempio di modifica dell'immagine prodotto

Il seguente caso d'uso mette in evidenza il miglioramento di un'immagine prodotto modificando lo sfondo di un'immagine, ma preservando l'aspetto di un prodotto all'interno dell'immagine.

Esempio di immagine generata nella console
Immagine generata con la funzionalità di modifica delle immagini prodotto di Imagen dal prompt: su un tavolo in una boutique. Fonte dell'immagine originale: Irene Kredenets su Unsplash.

Prima di iniziare

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  4. Enable the Vertex AI API.

    Roles required to enable APIs

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

    Enable the API

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  7. Enable the Vertex AI API.

    Roles required to enable APIs

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

    Enable the API

  8. Configura l'autenticazione per il tuo ambiente.

    Seleziona la scheda relativa a come intendi utilizzare i campioni in questa pagina:

    Console

    Quando utilizzi la console Google Cloud per accedere ai servizi Google Cloud e alle API, non devi configurare l'autenticazione.

    Python

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

    1. Installa Google Cloud CLI.

    2. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

    3. Se utilizzi una shell locale, crea le credenziali di autenticazione locali per il tuo account utente:

      gcloud auth application-default login

      Non è necessario eseguire questa operazione se utilizzi Cloud Shell.

      Se viene restituito un errore di autenticazione e utilizzi un provider di identità (IdP) esterno, verifica di aver acceduto a gcloud CLI con la tua identità federata.

    Per saperne di più, consulta Configura ADC per un ambiente di sviluppo locale nella documentazione sull'autenticazione di 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.

      Installa Google Cloud CLI.

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

    Per saperne di più, consulta Autenticati per usare REST nella documentazione sull'autenticazione di Google Cloud .

Modificare con una maschera di sfondo rilevata automaticamente

Segui le istruzioni riportate di seguito per attivare e utilizzare la modifica delle immagini prodotto con il rilevamento automatico dello sfondo.

Console

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

    Vai a Vertex AI Studio

  2. Fai clic su Genera contenuti multimediali.

  3. Fai clic su Immagine.

  4. Dall'elenco Attività, seleziona Modifica dello sfondo del prodotto.

  5. Dall'elenco Modello, seleziona il modello Imagen da utilizzare.

  6. In Immagine di input, fai clic su Aggiungi e seleziona l'immagine che stai modificando da caricare.

  7. Nella casella Prompt, inserisci un prompt che descriva come modificare l'immagine.

  8. Seleziona una delle seguenti 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_replace People: rileva le persone e crea una maschera intorno a loro.
  9. Fai clic su Esegui.

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/suitcase.png"),
    reference_id=0,
)
mask_ref = MaskReferenceImage(
    reference_id=1,
    reference_image=None,
    config=MaskReferenceConfig(
        mask_mode="MASK_MODE_BACKGROUND",
    ),
)

image = client.models.edit_image(
    model="imagen-3.0-capability-001",
    prompt="A light blue suitcase in front of a window in an airport",
    reference_images=[raw_ref, mask_ref],
    config=EditImageConfig(
        edit_mode="EDIT_MODE_BGSWAP",
    ),
)

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 dell'API Modifica immagini.

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

  • PROJECT_ID: il tuo Google Cloud ID progetto.
  • LOCATION: la regione del progetto. Ad esempio, us-central1, europe-west2 o asia-northeast3. Per un elenco delle regioni disponibili, consulta Località dell'AI generativa su Vertex AI. Quando viene utilizzato un endpoint API regionale, la regione dell'URL dell'endpoint determina dove viene elaborata la richiesta e questo LOCATION nel percorso della risorsa viene ignorato in caso di conflitto.
  • TEXT_PROMPT: il prompt di testo che guida le immagini che il modello genera. Questo campo è obbligatorio sia per la generazione che per la modifica.
  • referenceType: una ReferenceImage è un'immagine che fornisce un contesto aggiuntivo per la modifica delle immagini. Un'immagine di riferimento non elaborata RGB normale (REFERENCE_TYPE_RAW) è necessaria per i casi d'uso di modifica. In una richiesta può esistere al massimo un'immagine di riferimento non elaborata. L'immagine di output ha la stessa altezza e larghezza dell'immagine di riferimento non elaborata. Per i casi d'uso di modifica mascherata è necessaria un'immagine di riferimento della maschera (REFERENCE_TYPE_MASK).
  • referenceId: l'ID intero dell'immagine di riferimento. In questo esempio, i due oggetti immagine di riferimento sono di tipi diversi, quindi hanno valori referenceId distinti (1 e 2).
  • B64_BASE_IMAGE: L'immagine di base da modificare o di cui aumentare la risoluzione. L'immagine deve essere specificata come stringa di byte con codifica base64. Dimensioni massime: 10 MB.
  • maskImageConfig.maskMode: La modalità maschera per la modifica della maschera. MASK_MODE_BACKGROUND viene utilizzato per mascherare automaticamente lo sfondo senza una maschera fornita dall'utente.
  • MASK_DILATION - float. La percentuale della larghezza dell'immagine in base alla quale dilatare questa maschera. Per evitare di estendere il prodotto in primo piano, è consigliabile un valore di 0.00. Minimo: 0, massimo: 1. Valore predefinito: 0,03.
  • EDIT_STEPS - numero intero. Il numero di passaggi di campionamento per il modello di base. Per la modifica delle immagini prodotto, inizia dai passaggi 75.
  • 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_BACKGROUND",
            "dilation": MASK_DILATION
          }
        }
      ]
    }
  ],
  "parameters": {
    "editConfig": {
      "baseSteps": EDIT_STEPS
    },
    "editMode": "EDIT_MODE_BGSWAP",
    "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 riguarda una richiesta di modifica dello sfondo di un prodotto. La risposta restituisce quattro 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"
    },
    {
      "bytesBase64Encoded": "BASE64_IMG_BYTES",
      "mimeType": "image/png"
    },
    {
      "bytesBase64Encoded": "BASE64_IMG_BYTES",
      "mimeType": "image/png"
    }
  ]
}

Modificare con un'area mascherata definita

Puoi scegliere di mascherare l'area sostituita, anziché lasciare che Imagen rilevi automaticamente la maschera.

Console

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

    Vai a Vertex AI Studio

  2. Fai clic su Genera contenuti multimediali.

  3. Fai clic su Immagine.

  4. Dall'elenco Attività, seleziona Modifica dello sfondo del prodotto.

  5. Dall'elenco Modello, seleziona il modello Imagen da utilizzare.

  6. In Immagine di input, fai clic su Aggiungi e seleziona l'immagine che stai modificando da caricare.

  7. Nella casella Prompt, inserisci un prompt che descriva come modificare l'immagine.

  8. Per specificare una maschera, esegui una delle seguenti operazioni:

    • Carica la tua maschera:
      1. Crea una maschera sul computer.
      2. Fai clic su Carica Importa maschera e seleziona una maschera da caricare.
    • Definisci la maschera: nella barra degli strumenti di editing, utilizza gli strumenti maschera (riquadro, pennello o masked_transitions strumento Inverti) per specificare l'area o le aree a cui aggiungere contenuti.
  9. Fai clic su Esegui.

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/suitcase.png"),
    reference_id=0,
)
mask_ref = MaskReferenceImage(
    reference_id=1,
    reference_image=Image.from_file(location="test_resources/suitcase_mask.png"),
    config=MaskReferenceConfig(
        mask_mode="MASK_MODE_USER_PROVIDED",
        mask_dilation=0.0,
    ),
)

image = client.models.edit_image(
    model="imagen-3.0-capability-001",
    prompt="A light blue suitcase in an airport",
    reference_images=[raw_ref, mask_ref],
    config=EditImageConfig(
        edit_mode="EDIT_MODE_BGSWAP",
    ),
)

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ù sull'API Imagen, consulta le seguenti risorse:

  • Metodo: endpoints.predict
  • VisionGenerativeModelInstance
  • VisionGenerativeModelParams
  • VisionGenerativeModelResult

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

    • PROJECT_ID: il tuo Google Cloud ID progetto.
    • LOCATION: la regione del progetto. Ad esempio, us-central1, europe-west2 o asia-northeast3. Per un elenco delle regioni disponibili, consulta Località dell'AI generativa su Vertex AI. Quando viene utilizzato un endpoint API regionale, la regione dell'URL dell'endpoint determina dove viene elaborata la richiesta e questo LOCATION nel percorso della risorsa viene ignorato in caso di conflitto.
    • TEXT_PROMPT: il prompt di testo che guida le immagini che il modello genera. Questo campo è obbligatorio sia per la generazione che per la modifica.
    • referenceId: l'ID intero dell'immagine di riferimento. In questo esempio, i due oggetti immagine di riferimento sono di tipi diversi, quindi hanno valori referenceId distinti (1 e 2).
    • B64_BASE_IMAGE: L'immagine di base da modificare o di cui aumentare la 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. Per evitare di estendere il prodotto in primo piano, è consigliabile un valore di 0.00. Minimo: 0, massimo: 1. Valore predefinito: 0,03.
    • EDIT_STEPS - numero intero. Il numero di passaggi di campionamento per il modello di base. Per la modifica delle immagini prodotto, inizia dai passaggi 75.
    • 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": [
            {
              "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_BGSWAP",
        "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 riguarda una richiesta di modifica dello sfondo di un prodotto.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        },
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        }
      ]
    }
    

Limitazioni

Poiché le maschere a volte sono incomplete, il modello potrebbe tentare di completare l'oggetto in primo piano quando mancano parti estremamente piccole al confine. Come effetto collaterale raro, quando l'oggetto in primo piano è già completo, il modello potrebbe creare piccole estensioni.

Una soluzione alternativa consiste nel segmentare l'output del modello e poi combinarlo. Di seguito è riportato un esempio di snippet Python che mostra una soluzione alternativa:

blended = Image.composite(out_images[0].resize(image_expanded.size), image_expanded, mask_expanded)

Passaggi successivi

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