Insérer des objets dans une image à l'aide de l'inpainting

Cette page décrit comment insérer des objets dans une image, un processus également appelé inpainting. Imagen sur Vertex AI vous permet de spécifier une zone de masque pour insérer des objets dans une image. Vous pouvez fournir votre propre masque ou laisser Imagen en générer un.

Exemple d'insertion de contenu

Avec l'inpainting, vous pouvez utiliser une image de base, un masque d'image et une requête textuelle pour ajouter du contenu à une image existante.

Entrées

Image de base* à modifier Zone de masque spécifiée à l'aide d'outils de la console Google Cloud Requête textuelle
Exemple d'image de base. Un bocal en verre contient un liquide rouge avec une tranche de citron sur le côté et une paille qui dépasse. Des tranches de citron sont visibles au premier plan à gauche. Image de base d'un bocal en verre, avec une zone de masque spécifiée dans la console Cloud fraises

Crédit image : Alex Lvrs sur Unsplash.

Sortie après avoir spécifié une zone de masque dans la console Google Cloud

Capture d'écran d'une modification générée d'un bocal en verre contenant un liquide rouge. Dans cette capture d'écran, les tranches de citron qui se trouvaient auparavant au premier plan de l'image sont remplacées par deux fraises placées directement devant le bocal. Capture d'écran d'une modification générée d'un bocal en verre contenant un liquide rouge. Sur cette capture d'écran, les tranches de citron qui se trouvaient au premier plan de l'image ont été remplacées par trois fraises, juste à gauche du bocal. Capture d'écran d'une modification générée d'un bocal en verre contenant un liquide rouge. Dans cette capture d'écran, les tranches de citron qui se trouvaient au premier plan de l'image ont été remplacées par deux fraises, légèrement devant et à gauche du bocal.

Afficher la fiche de modèle Imagen pour la modification et la personnalisation

Avant de commencer

  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. Configurez l'authentification pour votre environnement.

    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

    Pour utiliser les exemples Python de cette page dans un environnement de développement local, installez et initialisez la gcloud CLI, puis configurez le service Identifiants par défaut de l'application avec vos identifiants utilisateur.

      Installez la Google Cloud CLI.

      Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

      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.

    Pour en savoir plus, consultez la section Configurer les ADC pour un environnement de développement local dans la documentation sur l'authentification Google Cloud .

    REST

    Pour utiliser les exemples API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à la gcloud CLI.

      Installez la Google Cloud CLI.

      Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

    Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Google Cloud .

    Insérer avec une zone de masque définie

    Utilisez les exemples suivants pour envoyer une requête d'inpainting à l'aide du modèle Imagen 3.

    Console

    1. Dans la console Google Cloud , accédez à la page 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. Cliquez sur Importer, puis sélectionnez un fichier à importer.

    2. Cliquez sur Réparation.

      Effectuez l'une des opérations suivantes :

      • Importez votre propre masque :

        1. Créez un masque sur votre ordinateur.

        2. Cliquez sur Importer un masque, puis sélectionnez un masque à importer.

      • Définissez votre masque : dans la barre d'outils de modification, utilisez les outils de masque (zone, pinceau ou outil d'inversion masked_transitions) pour spécifier la ou les zones dans lesquelles vous souhaitez ajouter du contenu.

    3. (Facultatif) Dans le panneau Paramètres, ajustez les options suivantes :

      • Modèle : modèle Imagen à utiliser.

      • Nombre de résultats : nombre de résultats à générer.

      • Requête négative : décrivez ce que vous souhaitez exclure des images générées.

    4. Dans le champ du prompt, saisissez un prompt pour modifier l'image.

    5. Cliquez sur Générer.

    Python

    Installer

    pip install --upgrade google-genai

    Pour en savoir plus, consultez la documentation de référence du SDK.

    Définissez des variables d'environnement pour utiliser le SDK Gen AI avec 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

    Avant d'utiliser les données de requête, effectuez les remplacements suivants :

    • REGION : région dans laquelle se trouve votre projet. Pour en savoir plus sur les régions compatibles, consultez Emplacements de l'IA générative sur Vertex AI.
    • PROJECT_ID : ID de votre projet Google Cloud .
    • TEXT_PROMPT : Facultatif. Une requête textuelle pour guider les images que le modèle génère. Pour de meilleurs résultats, décrivez la zone masquée et évitez les requêtes d'un seul mot. Par exemple, utilisez "un corgi mignon" au lieu de "corgi".
    • B64_BASE_IMAGE : image encodée en base64 de l'image en cours de modification, dont la taille ne dépasse pas 10 Mo. Pour en savoir plus sur l'encodage en base64, consultez Encoder et décoder des fichiers en Base64.
    • B64_MASK_IMAGE : image de masque en noir et blanc encodée en base64, dont la taille ne dépasse pas 10 Mo.
    • MASK_DILATION : Facultatif. Valeur flottante comprise entre 0 et 1 (inclus) représentant le pourcentage de la largeur de l'image à utiliser pour agrandir le masque. L'utilisation de dilation permet de compenser les masques imprécis. Nous vous recommandons de définir une valeur de 0.01.
    • EDIT_STEPS : facultatif. Entier représentant le nombre d'étapes d'échantillonnage. Une valeur plus élevée améliore la qualité de l'image, tandis qu'une valeur plus faible améliore la latence.

      Nous vous recommandons de commencer par 35 étapes. Si la qualité ne répond pas à vos exigences, nous vous recommandons d'augmenter la valeur jusqu'à la limite supérieure de 75.

    • SAMPLE_COUNT : Facultatif. Entier qui décrit le nombre d'images à générer. La plage de valeurs acceptée est comprise entre 1 et 4. La valeur par défaut est 4.

    Méthode HTTP et URL :

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

    Corps JSON de la requête :

    {
      "instances": [
        {
          "prompt": "TEXT_PROMPT",
          "referenceImages": [
            {
              "referenceType": "REFERENCE_TYPE_RAW",
              "referenceId": 1,
              "referenceImage": {
                "bytesBase64Encoded": "B64_BASE_IMAGE"
              }
            },
            {
              "referenceType": "REFERENCE_TYPE_MASK",
              "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": SAMPLE_COUNT
      }
    }
    

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/publishers/google/models/imagen-3.0-capability-001:predict"

    PowerShell

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    $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://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/publishers/google/models/imagen-3.0-capability-001:predict" | Select-Object -Expand Content
    L'exemple de réponse suivant concerne une requête avec "sampleCount": 2. La réponse renvoie deux objets de prédiction, avec les octets d'image générés encodés en base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Insérer avec la détection automatique de masque

    Utilisez les exemples suivants pour insérer du contenu par inpainting. Dans ces exemples, vous spécifiez une image de base et un prompt textuel. Imagen détecte et crée automatiquement une zone de masque pour modifier l'image de base.

    Console

    1. Dans la console Google Cloud , accédez à la page 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. Cliquez sur Importer, puis sélectionnez un fichier à importer.

    2. Cliquez sur Réparation.

    3. Dans la barre d'outils de modification, cliquez sur background_replaceExtraire le masque.

    4. Sélectionnez l'une des options d'extraction de masque :

      • Éléments d'arrière-plan : détecte les éléments d'arrière-plan et crée un masque autour de ces éléments.

      • Éléments de premier plan : détecte les objets au premier plan et crée un masque autour d'eux.

      • background_replace Personnes : détecte les personnes et crée un masque autour d'elles.

    5. Facultatif : Dans le panneau Paramètres, ajustez les options suivantes :

      • Modèle : modèle Imagen à utiliser.

      • Nombre de résultats : nombre de résultats à générer.

      • Prompt négatif : décrivez ce que vous souhaitez exclure des images générées.

    6. Dans le champ du prompt, saisissez un prompt pour modifier l'image.

    7. Cliquez sur sendGénérer.

    Python

    Installer

    pip install --upgrade google-genai

    Pour en savoir plus, consultez la documentation de référence du SDK.

    Définissez des variables d'environnement pour utiliser le SDK Gen AI avec 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

    Avant d'utiliser les données de requête, effectuez les remplacements suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • LOCATION : région de votre projet (us-central1, europe-west2 ou asia-northeast3, par exemple). Pour obtenir la liste des régions disponibles, consultez IA générative sur les emplacements Vertex AI.
    • TEXT_PROMPT : prompt textuel qui guide le modèle pour la génération d'images. Lorsque vous utilisez un prompt pour une insertion par inpainting, décrivez la zone de masque pour obtenir de meilleurs résultats. Évitez les prompts à un seul mot. Par exemple, saisissez un corgi mignon au lieu de corgi.
    • B64_BASE_IMAGE : image de base à modifier ou à améliorer. L'image doit être spécifiée en tant que chaîne d'octets encodés en base64. Limite de taille : 10 Mo.
    • MASK_MODE : chaîne qui définit le type de création automatique de masque utilisé par le modèle. Valeurs disponibles :
      • MASK_MODE_BACKGROUND : génère automatiquement un masque à l'aide de la segmentation de l'arrière-plan.
      • MASK_MODE_FOREGROUND : génère automatiquement un masque à l'aide de la segmentation du premier plan.
      • MASK_MODE_SEMANTIC : génère automatiquement un masque à l'aide d'une segmentation sémantique basée sur les classes de segmentation que vous spécifiez dans le tableau maskImageConfig.maskClasses. Par exemple :
                  "maskImageConfig": {
                    "maskMode": "MASK_MODE_SEMANTIC",
                    "maskClasses": [175, 176], // bicycle, car
                    "dilation": 0.01
                  }
                
    • MASK_DILATION : float. Pourcentage de la largeur de l'image à utiliser pour dilater ce masque. Nous vous recommandons de définir 0.01 comme valeur pour compenser les masques d'entrée imparfaits.
    • EDIT_STEPS : entier. Nombre d'étapes d'échantillonnage pour le modèle de base. Pour effectuer une insertion par inpainting, commencez avec 35 étapes. Augmentez le nombre d'étapes jusqu'à la limite maximale de 75 si la qualité ne répond pas à vos exigences. L'augmentation du nombre d'étapes augmente également la latence des requêtes.
    • EDIT_IMAGE_COUNT : nombre d'images modifiées. Valeurs entières acceptées : 1 à 4. Valeur par défaut : 4.

    Méthode HTTP et URL :

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

    Corps JSON de la requête :

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

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    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

    Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

    $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
    L'exemple suivant représente la réponse à une requête avec "sampleCount": 2. La réponse renvoie deux objets de prédiction, avec les octets d'image générés encodés en base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Limites

    Les sections suivantes expliquent les limites de la fonctionnalité Supprimer des objets d'Imagen.

    Pixels modifiés

    Le modèle génère des pixels à sa propre résolution (par exemple, 1 024 x 1 024), qui peut être différente de celle de l'image d'entrée. Cela signifie que l'image générée peut présenter de légères modifications par rapport à l'image d'origine.

    Pour préserver parfaitement l'image, nous vous recommandons de fusionner l'image générée avec l'image d'entrée à l'aide du masque. En règle générale, si la résolution de l'image d'entrée est de 2K ou plus, il est nécessaire de fusionner l'image générée et l'image d'entrée.

    Insérer une limite

    Bien que l'objet inséré corresponde généralement au style de l'image de base, certains mots clés peuvent produire des résultats de type dessin animé au lieu d'un rendu photoréaliste.

    Par exemple, si vous demandez une "girafe jaune", vous obtiendrez peut-être une image de style dessin animé, car les girafes sont naturellement brunes et beiges. Il peut être difficile de générer des images photoréalistes avec des couleurs non naturelles.

    Étapes suivantes

    Consultez des articles concernant Imagen et d'autres produits d'IA générative sur Vertex AI :