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.

Model berikut mendukung penyisipan objek ke dalam gambar:

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 samping dan sedotan yang menjulur keluar. Irisan lemon terlihat di latar depan kiri Gambar dasar botol kaca, sekarang 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 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 botol kaca yang berisi cairan merah. Dalam screenshot ini, irisan lemon yang sebelumnya berada di latar depan gambar diganti dengan tiga stroberi tepat di sebelah kiri toples. Screenshot dari hasil edit yang dihasilkan dari 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. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy 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. Siapkan autentikasi untuk lingkungan Anda.

    Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:

    Konsol

    Saat menggunakan konsol Google Cloud untuk mengakses layanan Google Cloud dan API, Anda tidak perlu menyiapkan autentikasi.

    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.

    1. Instal Google Cloud CLI.

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

    3. Jika Anda menggunakan shell lokal, buat kredensial autentikasi lokal untuk akun pengguna Anda:

      gcloud auth application-default login

      Anda tidak perlu melakukan langkah ini jika menggunakan Cloud Shell.

      Jika error autentikasi ditampilkan, dan Anda menggunakan penyedia identitas (IdP) eksternal, konfirmasi bahwa Anda telah login ke gcloud CLI dengan identitas gabungan Anda.

    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 > Vertex AI Studio .

    Buka Vertex AI Studio

  2. Klik Buat media.

  3. Klik Gambar.

  4. Dari daftar Task, pilih Inpaint-add.

  5. Dari daftar Model, pilih model Imagen yang akan digunakan.

  6. Di Gambar input, klik Tambahkan, lalu pilih gambar yang sedang Anda edit untuk diupload.

  7. Di kotak Perintah, masukkan perintah yang menjelaskan cara mengedit gambar.

  8. Lakukan salah satu hal berikut untuk menentukan mask:

    • Mengupload mask Anda sendiri:
      1. Buat masker di komputer Anda.
      2. Klik upload Impor 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.
  9. Klik Run.

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

Untuk mengetahui informasi selengkapnya tentang Imagen API, lihat bagian berikut:

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 kualitasnya 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 > Vertex AI Studio .

    Buka Vertex AI Studio

  2. Klik Buat media.

  3. Klik Gambar.

  4. Dari daftar Task, pilih Inpaint-add.

  5. Dari daftar Model, pilih model Imagen yang akan digunakan.

  6. Di Gambar input, klik Tambahkan, lalu pilih gambar yang sedang Anda edit untuk diupload.

  7. Di kotak Perintah, masukkan perintah yang menjelaskan cara mengedit gambar.

  8. Di toolbar pengeditan, klik background_replaceEkstrak mask.

  9. Pilih salah satu opsi ekstraksi mask:

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

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

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

  10. Klik Run.

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

Untuk mengetahui informasi selengkapnya tentang Imagen API, lihat bagian berikut:

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. Saat endpoint API regional digunakan, region dari URL endpoint menentukan tempat permintaan diproses, dan LOCATION di jalur resource ini diabaikan jika terjadi konflik.
  • 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: Otomatis membuat mask menggunakan segmentasi latar belakang.
    • MASK_MODE_FOREGROUND: Otomatis membuat mask menggunakan segmentasi latar depan.
    • MASK_MODE_SEMANTIC: Secara otomatis membuat mask menggunakan segmentasi semantik berdasarkan segmentasi kelas segmentation 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 sedikit perubahan 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.

Masukkan batasan

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

Misalnya, perintah untuk membuat "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: