Menyisipkan objek ke dalam gambar menggunakan inpaint

Halaman ini menjelaskan cara menyisipkan objek ke dalam gambar, sebuah proses yang juga dikenal sebagai inpainting. Imagen di Vertex AI memungkinkan Anda menentukan area mask untuk menyisipkan objek ke dalam gambar. Anda dapat menggunakan masker Anda sendiri, atau Anda dapat membiarkan Imagen membuat masker untuk Anda.

Contoh penyisipan konten

Dengan inpainting, Anda dapat menggunakan gambar dasar, mask gambar, dan perintah teks untuk menambahkan konten ke gambar yang ada.

Input

Gambar dasar* yang akan diedit Area mask yang ditentukan menggunakan alat di konsol Google Cloud Perintah teks
Contoh gambar dasar. Terdapat cairan merah dalam botol kaca dengan irisan lemon di sampingnya dan sedotan yang menjulur keluar. Irisan lemon terlihat di latar depan kiri Gambar dasar botol kaca, kini dengan area mask yang ditentukan di
           konsol Cloud stroberi

* Kredit gambar: Alex Lvrs di Unsplash.

Output setelah menentukan area mask di konsol Google Cloud

Screenshot dari hasil edit yang dihasilkan dari sebuah botol kaca yang berisi cairan merah. Dalam screenshot ini, irisan lemon yang sebelumnya berada di latar depan
           gambar diganti dengan dua stroberi tepat di depan
           stoples. Screenshot dari hasil edit yang dihasilkan dari sebuah botol kaca yang berisi cairan merah. Dalam screenshot ini, irisan lemon yang sebelumnya berada di
           latar depan gambar diganti dengan tiga stroberi di sebelah kiri
           stoples. Screenshot dari hasil edit yang dihasilkan dari sebuah botol kaca yang berisi cairan merah. Dalam screenshot ini, irisan lemon yang sebelumnya berada di latar depan gambar diganti dengan dua stroberi, sedikit di depan dan di sebelah kiri toples.

Melihat kartu model Imagen untuk Pengeditan dan Penyesuaian

Sebelum memulai

  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. Siapkan autentikasi untuk lingkungan Anda.

    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

    Untuk menggunakan contoh Python di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      Instal Google Cloud CLI.

      Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

      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.

    Untuk mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal dalam dokumentasi autentikasi Google Cloud .

    REST

    Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

      Instal Google Cloud CLI.

      Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

    Untuk mengetahui informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud .

    Menyisipkan dengan area mask yang ditentukan

    Gunakan contoh berikut untuk mengirim permintaan inpainting menggunakan model Imagen 3.

    Konsol

    1. Di konsol Google Cloud , buka halaman 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. Klik Upload, lalu pilih file yang akan diupload.

    2. Klik Perbaiki.

      Lakukan salah satu hal berikut:

      • Mengupload masker Anda sendiri:

        1. Buat masker di komputer Anda.

        2. Klik Upload mask, lalu pilih mask yang akan diupload.

      • Tentukan mask Anda: di toolbar pengeditan, gunakan alat mask (kotak, kuas, atau masked_transitions invert) untuk menentukan area yang akan ditambahi konten.

    3. Opsional: Di panel Parameters, sesuaikan opsi berikut:

      • Model: model Imagen yang akan digunakan.

      • Jumlah hasil: jumlah hasil yang akan dibuat.

      • Perintah negatif: deskripsikan hal yang ingin Anda kecualikan dari gambar yang dibuat.

    4. Pada kolom perintah, masukkan perintah untuk mengubah gambar.

    5. Klik Generate.

    Python

    Instal

    pip install --upgrade google-genai

    Untuk mempelajari lebih lanjut, lihat dokumentasi referensi SDK.

    Tetapkan variabel lingkungan untuk menggunakan Gen AI SDK dengan 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

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • REGION: Region tempat project Anda berada. Untuk mengetahui informasi selengkapnya tentang region yang didukung, lihat Lokasi AI Generatif di Vertex AI.
    • PROJECT_ID: Google Cloud Project ID Anda.
    • TEXT_PROMPT: Opsional. Perintah teks untuk memandu gambar yang dihasilkan model. Untuk hasil terbaik, gunakan deskripsi area yang ditutupi dan hindari perintah satu kata. Misalnya, gunakan "corgi lucu" bukan "corgi".
    • B64_BASE_IMAGE: Gambar yang sedang diedit yang dienkode base64 dan berukuran 10 MB atau kurang. Untuk mengetahui informasi selengkapnya tentang encoding base64, lihat Mengenkode dan mendekode file base64.
    • B64_MASK_IMAGE: Gambar mask hitam putih berenkode base64 yang berukuran 10 MB atau kurang.
    • MASK_DILATION: Opsional. Nilai float antara 0 dan 1, inklusif, yang merepresentasikan persentase lebar gambar untuk memperbesar mask. Menggunakan dilation membantu mengimbangi mask yang tidak presisi. Sebaiknya tetapkan nilai 0.01.
    • EDIT_STEPS: Opsional. Bilangan bulat yang mewakili jumlah langkah pengambilan sampel. Nilai yang lebih tinggi menawarkan kualitas gambar yang lebih baik, sedangkan nilai yang lebih rendah menawarkan latensi yang lebih baik.

      Sebaiknya coba 35 langkah untuk memulai. Jika kualitas tidak memenuhi persyaratan Anda, sebaiknya naikkan nilai ke batas atas 75.

    • SAMPLE_COUNT: Opsional. Bilangan bulat yang menjelaskan jumlah gambar yang akan dibuat. Rentang nilai yang diterima adalah 1-4. Nilai defaultnya adalah 4.

    Metode HTTP dan URL:

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

    Meminta isi JSON:

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

    Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

    curl

    Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

    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

    Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

    $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
    Contoh respons berikut adalah untuk permintaan dengan "sampleCount": 2. Respons ini menampilkan dua objek prediksi, dengan byte gambar yang dihasilkan berenkode base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Menyisipkan dengan deteksi masker otomatis

    Gunakan contoh berikut untuk menentukan inpainting guna menyisipkan konten. Dalam contoh ini, Anda menentukan gambar dasar dan perintah teks. Imagen secara otomatis mendeteksi dan membuat area mask untuk mengubah gambar dasar.

    Konsol

    1. Di konsol Google Cloud , buka halaman 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. Klik Upload, lalu pilih file yang akan diupload.

    2. Klik Perbaiki.

    3. Di toolbar pengeditan, klik background_replaceEkstrak mask.

    4. Pilih salah satu opsi ekstraksi mask:

      • Elemen latar belakang: mendeteksi elemen latar belakang dan membuat mask di sekitarnya.

      • Elemen latar depan: mendeteksi objek latar depan dan membuat mask di sekitarnya.

      • background_replace Orang: mendeteksi orang dan membuat mask di sekelilingnya.

    5. Opsional: Di panel Parameters, sesuaikan opsi berikut:

      • Model: model Imagen yang akan digunakan.

      • Jumlah hasil: jumlah hasil yang akan dibuat.

      • Perintah negatif: jelaskan apa yang ingin Anda kecualikan dari gambar yang dibuat.

    6. Pada kolom perintah, masukkan perintah untuk mengubah gambar.

    7. Klik sendGenerate.

    Python

    Instal

    pip install --upgrade google-genai

    Untuk mempelajari lebih lanjut, lihat dokumentasi referensi SDK.

    Tetapkan variabel lingkungan untuk menggunakan Gen AI SDK dengan 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

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Project ID Anda. Google Cloud
    • LOCATION: Region project Anda. Misalnya, us-central1, europe-west2, atau asia-northeast3. Untuk mengetahui daftar region yang tersedia, lihat Lokasi AI Generatif di Vertex AI.
    • TEXT_PROMPT: Perintah teks memandu gambar yang dihasilkan model. Saat Anda menggunakan perintah untuk penyisipan inpainting, gunakan deskripsi area yang diberi mask untuk mendapatkan hasil terbaik. Hindari perintah satu kata. Misalnya, gunakan "corgi lucu" bukan "corgi".
    • B64_BASE_IMAGE: Gambar dasar yang akan diedit atau di-upscale. Gambar harus ditentukan sebagai string byte berenkode base64. Batas ukuran: 10 MB.
    • MASK_MODE - String yang menetapkan jenis pembuatan masker otomatis yang digunakan model. Nilai yang tersedia:
      • MASK_MODE_BACKGROUND: Membuat mask secara otomatis menggunakan segmentasi latar belakang.
      • MASK_MODE_FOREGROUND: Membuat mask secara otomatis menggunakan segmentasi latar depan.
      • MASK_MODE_SEMANTIC: Secara otomatis membuat mask menggunakan segmentasi semantik berdasarkan segmentasi kelas yang Anda tentukan dalam array maskImageConfig.maskClasses. Contoh:
                  "maskImageConfig": {
                    "maskMode": "MASK_MODE_SEMANTIC",
                    "maskClasses": [175, 176], // bicycle, car
                    "dilation": 0.01
                  }
                
    • MASK_DILATION - float. Persentase lebar gambar untuk memperlebar masker ini. Nilai 0.01 direkomendasikan untuk mengompensasi mask input yang tidak sempurna.
    • EDIT_STEPS - bilangan bulat. Jumlah langkah pengambilan sampel untuk model dasar. Untuk penyisipan inpainting, mulai dari 35 langkah. Tingkatkan langkah ke batas atas 75 jika kualitas tidak memenuhi persyaratan Anda. Meningkatkan langkah juga akan meningkatkan latensi permintaan.
    • EDIT_IMAGE_COUNT - Jumlah gambar yang diedit. Nilai bilangan bulat yang diterima: 1-4. Nilai default: 4.

    Metode HTTP dan URL:

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

    Meminta isi JSON:

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

    Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

    curl

    Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

    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

    Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

    $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
    Contoh respons berikut adalah untuk permintaan dengan "sampleCount": 2. Respons ini menampilkan dua objek prediksi, dengan byte gambar yang dihasilkan berenkode base64.
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        }
      ]
    }
    

    Batasan

    Bagian berikut menjelaskan batasan fitur hapus objek Imagen.

    Piksel yang dimodifikasi

    Model ini menghasilkan piksel pada resolusinya sendiri (misalnya, 1024x1024), yang mungkin berbeda dengan resolusi gambar input. Artinya, gambar yang dihasilkan mungkin memiliki perubahan kecil yang tidak ada pada gambar aslinya.

    Untuk mempertahankan gambar dengan sempurna, sebaiknya gabungkan gambar yang dihasilkan dengan gambar input menggunakan mask. Biasanya, jika resolusi gambar input adalah 2K atau lebih tinggi, gambar yang dihasilkan dan gambar input harus digabungkan.

    Batasan penyisipan

    Meskipun objek yang disisipkan biasanya cocok dengan gaya gambar dasar, beberapa kata kunci mungkin menghasilkan hasil seperti kartun, bukan output fotorealistik.

    Misalnya, perintah untuk "jerapah kuning" dapat menghasilkan gambar kartun karena jerapah secara alami berwarna cokelat dan krem. Membuat gambar fotorealistik dengan warna yang tidak alami bisa jadi sulit.

    Langkah berikutnya

    Baca artikel tentang Imagen dan produk AI Generatif lainnya di Vertex AI: