Rimuovere oggetti da un'immagine utilizzando la pittura interna

Questa pagina descrive come rimuovere oggetti da un'immagine utilizzando un'area mascherata, un processo noto anche come inpainting. Puoi fornire la tua maschera o lasciare che Imagen ne generi una per te.

Esempio di rimozione dei contenuti

L'esempio seguente utilizza l'inpainting e una maschera immagine per rimuovere contenuti da un'immagine esistente:

Input

Immagine di base* da modificare

Area mascherata specificata utilizzando gli strumenti nella console Google Cloud

Prompt di testo

Immagine di base di esempio di un divano rosso con un sacchetto di limoni posizionato
           a destra e un cuscino decorativo nell'angolo a sinistra. Il divano è
           posizionato ad angolo, con un solo piede appoggiato su un tappeto bianco. Davanti
           al divano, sul tappeto, ci sono due limoni. Viene mostrata l'immagine di base di esempio del divano rosso, con le aree mascherate
           definite per il sacco di limoni sul divano e due limoni sul
           tappeto.

Prompt: rimuovi gli oggetti selezionati dall'immagine

* Crediti immagine: Inside Weather su Unsplash.

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

Un'immagine modificata di esempio mostra il divano e il tappeto nell'esempio di input senza limoni Un'immagine modificata di esempio mostra il divano e il tappeto nell'esempio di input senza limoni Un'immagine modificata di esempio mostra il divano e il tappeto nell'esempio di input senza limoni

Visualizza 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.

    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.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    Python

    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.

      Installa Google Cloud CLI.

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

      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, utilizza 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 .

    Rimuovere con un'area della maschera definita

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

    Console

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

    <a href="https://console.cloud.google.com/vertex-ai/studio/media/generate;tab=image" class="button button-primary"
    target="console" track-name="consoleLink" track-type="task">Go to Media
    Studio</a>
    
    1. Fai clic su Carica. Nella finestra di dialogo dei file visualizzata, seleziona un file da caricare.

    2. Fai clic su Inpaint.

    3. Nel riquadro Parametri, fai clic su Inpaint (Rimuovi).

    4. Esegui una delle seguenti 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 tua maschera:nella barra degli strumenti di modifica, utilizza gli strumenti maschera (casella, pennello o masked_transitionsinversione ) 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 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="",
        reference_images=[raw_ref, mask_ref],
        config=EditImageConfig(
            edit_mode="EDIT_MODE_INPAINT_REMOVAL",
        ),
    )
    
    image.generated_images[0].image.save(output_file)
    
    print(f"Created output image using {len(image.generated_images[0].image.image_bytes)} bytes")
    # Example response:
    # Created output image using 1234567 bytes
    

    REST

    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.
    • prompt: Per l'estensione delle immagini, puoi fornire una stringa vuota per creare le immagini modificate. Se scegli di fornire un prompt, utilizza una descrizione dell'area mascherata per ottenere risultati ottimali. Ad esempio, "un cielo blu" anziché "inserisci un cielo blu".
    • 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. Un'immagine di riferimento della maschera (REFERENCE_TYPE_MASK) è obbligatoria per i casi d'uso di modifica mascherata. Se è presente un'immagine di riferimento non elaborata, l'immagine della maschera deve avere la stessa altezza e larghezza dell'immagine di riferimento non elaborata. Se l'immagine di riferimento della maschera è vuota e maskMode non è impostato su MASK_MODE_USER_PROVIDED, la maschera viene calcolata in base all'immagine di riferimento non elaborata.
    • 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_OUTPAINTING_MASK: L'immagine in bianco e nero che vuoi utilizzare come livello di maschera per modificare l'immagine originale. La maschera deve avere la stessa risoluzione dell'immagine di input. L'immagine di output avrà la stessa risoluzione dell'immagine di input. Questa immagine della maschera 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 l'espansione dell'immagine è consigliabile un valore di 0.03. L'impostazione di "dilation": 0.0 potrebbe comportare bordi evidenti nel punto di estensione o potrebbe causare un effetto bordo bianco.
    • EDIT_STEPS - numero intero. Il numero di passaggi di campionamento per il modello di base. Per l'outpainting, inizia con 35 passaggi. Aumenta i passaggi se la qualità non soddisfa i tuoi requisiti.
    • 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": "",
          "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
      }
    }
    

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

    Rimuovere con il rilevamento automatico della maschera

    Utilizza i seguenti esempi per specificare l'inpainting per rimuovere i 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.

    Console

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

    <a href="https://console.cloud.google.com/vertex-ai/studio/media/generate;tab=image" class="button button-primary"
    target="console" track-name="consoleLink" track-type="task">Go to Media
    Studio</a>
    
    1. Fai clic su Carica. Nella finestra di dialogo dei file visualizzata, seleziona un file da caricare.

    2. Fai clic su Inpaint.

    3. Nel riquadro Parametri, fai clic su Inpaint (Rimuovi).

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

      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.

    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 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",
        ),
    )
    
    image = client.models.edit_image(
        model="imagen-3.0-capability-001",
        prompt="",
        reference_images=[raw_ref, mask_ref],
        config=EditImageConfig(
            edit_mode="EDIT_MODE_INPAINT_REMOVAL",
        ),
    )
    
    image.generated_images[0].image.save(output_file)
    
    print(f"Created output image using {len(image.generated_images[0].image.image_bytes)} bytes")
    # Example response:
    # Created output image using 1234567 bytes
    

    REST

    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.
    • prompt: per risultati ottimali, ometti un prompt e negativePrompt quando utilizzi l'inpainting per la rimozione.
    • 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.
    • 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. Utilizza questa impostazione per modificare i contenuti in background.
      • MASK_MODE_FOREGROUND: genera automaticamente una maschera utilizzando la segmentazione in primo piano. Utilizza questa impostazione per modificare i contenuti in primo piano, ad esempio rimuovendo questi oggetti in primo piano (rimozione tramite inpainting).
      • 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. Per compensare le maschere di input imperfette, è consigliabile un valore di 0.01.
    • EDIT_STEPS - numero intero. Il numero di passaggi di campionamento per il modello di base. Per la rimozione dell'inpainting, inizia con 12 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": "",
          "referenceImages": [
            {
              "referenceType": "REFERENCE_TYPE_RAW",
              "referenceId": 1,
              "referenceImage": {
                "bytesBase64Encoded": "B64_BASE_IMAGE"
              }
            },
            {
              "referenceType": "REFERENCE_TYPE_MASK",
              "referenceId": 2,
              "maskImageConfig": {
                "maskMode": "MASK_MODE",
                "dilation": MASK_DILATION
              }
            }
          ]
        }
      ],
      "parameters": {
        "editConfig": {
          "baseSteps": EDIT_STEPS
        },
        "editMode": "EDIT_MODE_INPAINT_REMOVAL",
        "sampleCount": EDIT_IMAGE_COUNT
      }
    }
    

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

    Limitazioni

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

    Pixel modificati

    I pixel generati dal modello che non si trovano nella maschera vengono generati alla risoluzione del modello (ad esempio, 1024 x 1024) e non è garantito che siano identici all'input. Ciò potrebbe comportare piccole modifiche all'immagine generata.

    Per una perfetta conservazione dell'immagine, ti consigliamo di unire l'immagine generata con l'immagine di input utilizzando la maschera. La fusione è in genere necessaria se la risoluzione dell'immagine di input è 2K o superiore.

    Limitazione della rimozione

    Potrebbero essere rimossi anche piccoli oggetti adiacenti alla maschera. Per risultati ottimali, rendi la maschera il più precisa possibile.

    La rimozione di grandi aree del cielo nelle immagini esterne potrebbe comportare artefatti indesiderati. Per risultati ottimali, ti consigliamo di fornire un prompt.

    Passaggi successivi

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