Menghapus objek dari gambar menggunakan inpaint

Halaman ini menjelaskan cara menghapus objek dari gambar. Imagen di Vertex AI memungkinkan Anda menentukan area mask, yang disebut inpainting, untuk menghapus objek dari gambar. Anda dapat menggunakan mask Anda sendiri, atau membiarkan Imagen di Vertex AI membuat mask untuk Anda.

Contoh penghapusan konten

Contoh berikut menggunakan inpainting untuk menghapus konten dari gambar yang ada menggunakan mask gambar:

Input

Gambar dasar* yang akan diedit

Area mask yang ditentukan menggunakan alat di konsol Google Cloud

Perintah teks

Contoh gambar dasar sofa merah dengan sekantong lemon di sebelah kanan dan bantal dekoratif di sudut kiri. Sofa
           diletakkan pada sudut, dengan satu kaki diletakkan di karpet putih. Di
           depan sofa di atas karpet area terdapat dua buah lemon. Gambar dasar contoh sofa merah ditampilkan, dengan area yang di-masking ditentukan untuk sekantong lemon di sofa dan dua lemon di karpet.

Perintah: (tidak ada perintah yang diberikan)

* Kredit gambar: Inside Weather di Unsplash.

Output setelah menentukan area mask di konsol Google Cloud

Contoh gambar yang diedit menampilkan sofa dan karpet dalam contoh input
           tanpa lemon Contoh gambar yang diedit menampilkan sofa dan karpet dalam contoh input
           tanpa lemon Contoh gambar yang diedit menampilkan sofa dan karpet dalam contoh input
           tanpa lemon

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.

    Go to project selector

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

  4. Enable the Vertex AI API.

    Enable the API

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

    Go to project selector

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

  7. Enable the Vertex AI API.

    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.

    Java

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

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

    Node.js

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

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

    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.

      Menginstal 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, Anda menggunakan kredensial yang Anda berikan ke gcloud CLI.

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

    Menghapus dengan area mask yang ditentukan

    Gunakan contoh berikut untuk menentukan inpainting guna menghapus konten. Dalam contoh ini, Anda menentukan gambar dasar, perintah teks, dan area mask untuk mengubah gambar dasar.

    Gambar 3

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

    Konsol

    1. Di Google Cloud konsol, buka halaman Vertex AI > Media Studio .

      Buka Media Studio

    2. Klik Upload. Di dialog file yang ditampilkan, pilih file yang akan diupload.
    3. Klik Perbaiki.
    4. Di panel Parameter, klik Inpaint (Hapus).
    5. Lakukan salah satu hal berikut:

      • Mengupload topeng Anda sendiri:
        1. Buat masker di komputer Anda.
        2. Klik Upload mask. Pada dialog yang ditampilkan, pilih mask yang akan diupload.
      • Menentukan mask Anda sendiri: di toolbar pengeditan, gunakan alat mask (kotak, kuas, atau alat inversi masked_transitions) untuk menentukan area yang akan ditambahi konten.
    6. Opsional: Di panel Parameters, sesuaikan opsi berikut:
      • Model: model Imagen yang akan digunakan
      • Jumlah hasil: jumlah hasil yang akan dibuat
      • Perintah negatif: item yang harus dihindari pembuatannya
    7. Pada kolom perintah, masukkan perintah untuk mengubah gambar.
    8. 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="",
        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

    Untuk mengetahui informasi selengkapnya, lihat referensi API Edit gambar.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Google Cloud Project ID Anda.
    • 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.
    • prompt: Untuk hasil terbaik, hilangkan perintah dan negativePrompt saat Anda menggunakan inpainting untuk penghapusan.
    • B64_BASE_IMAGE: Gambar dasar yang akan diedit atau di-upscale. Gambar harus ditentukan sebagai string byte berenkode base64. Batas ukuran: 10 MB.
    • B64_MASK_IMAGE: Gambar hitam putih yang ingin Anda gunakan sebagai lapisan mask untuk mengedit gambar asli. Gambar harus ditentukan sebagai string byte berenkode base64. Batas ukuran: 10 MB.
    • 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 penghapusan inpainting, mulai dari 12 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

    Isi JSON permintaan:

    {
      "instances": [
        {
          "prompt": "",
          "referenceImages": [
            {
              "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_INPAINT_REMOVAL",
        "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"
        }
      ]
    }
    

    Imagen 2

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

    Konsol

    1. Di Google Cloud konsol, buka halaman Vertex AI > Media Studio .

      Buka Media Studio

    2. Di panel tugas di bagian bawah, klik Edit gambar.

    3. Klik Upload untuk memilih gambar produk yang disimpan secara lokal yang akan diedit.

    4. Di toolbar pengeditan, gunakan alat mask (kotak, kuas, atau alat inversi masked_transitions) untuk menentukan area yang akan dihapus kontennya.

    5. Opsional. Di panel Parameters, sesuaikan Number of results, Negative prompt (opsional untuk penghapusan), Text prompt guidance, atau parameter lainnya.

    6. Biarkan kolom perintah kosong.

    7. Klik Generate.

    REST

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Google Cloud Project ID Anda.
    • 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.
    • B64_BASE_IMAGE: Gambar dasar yang akan diedit atau di-upscale. Gambar harus ditentukan sebagai string byte berenkode base64. Batas ukuran: 10 MB.
    • B64_MASK_IMAGE: Gambar hitam putih yang ingin Anda gunakan sebagai lapisan mask untuk mengedit gambar asli. Gambar harus ditentukan sebagai string byte berenkode base64. Batas ukuran: 10 MB.
    • EDIT_IMAGE_COUNT: Jumlah gambar yang diedit. Nilai default: 4.

    Metode HTTP dan URL:

    POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagegeneration@006:predict

    Isi JSON permintaan:

    {
      "instances": [
        {
          "prompt": "",
          "image": {
              "bytesBase64Encoded": "B64_BASE_IMAGE"
          },
          "mask": {
            "image": {
              "bytesBase64Encoded": "B64_MASK_IMAGE"
            }
          }
        }
      ],
      "parameters": {
        "sampleCount": EDIT_IMAGE_COUNT,
        "editConfig": {
          "editMode": "inpainting-remove"
        }
      }
    }
    

    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/imagegeneration@006: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/imagegeneration@006: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"
        }
      ]
    }
    

    Python

    Untuk mempelajari cara menginstal atau mengupdate Vertex AI SDK untuk Python, lihat Menginstal Vertex AI SDK untuk Python. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python.

    
    import vertexai
    from vertexai.preview.vision_models import Image, ImageGenerationModel
    
    # TODO(developer): Update and un-comment below lines
    # PROJECT_ID = "your-project-id"
    # input_file = "input-image.png"
    # mask_file = "mask-image.png"
    # output_file = "outpur-image.png"
    # prompt = "" # The text prompt describing the entire image.
    
    vertexai.init(project=PROJECT_ID, location="us-central1")
    
    model = ImageGenerationModel.from_pretrained("imagegeneration@006")
    base_img = Image.load_from_file(location=input_file)
    mask_img = Image.load_from_file(location=mask_file)
    
    images = model.edit_image(
        base_image=base_img,
        mask=mask_img,
        prompt=prompt,
        edit_mode="inpainting-remove",
        # Optional parameters
        # negative_prompt="", # Describes the object being removed (i.e., "person")
    )
    
    images[0].save(location=output_file, include_generation_parameters=False)
    
    # Optional. View the edited image in a notebook.
    # images[0].show()
    
    print(f"Created output image using {len(images[0]._image_bytes)} bytes")
    # Example response:
    # Created output image using 12345678 bytes
    

    Java

    Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Java Vertex AI.

    Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

    Dalam contoh ini, Anda menentukan model sebagai bagian dari EndpointName. EndpointName diteruskan ke metode predict yang dipanggil di PredictionServiceClient. Layanan ini menampilkan gambar yang telah diedit, yang kemudian disimpan secara lokal.

    Untuk mengetahui informasi selengkapnya tentang versi dan fitur model, lihat Model Imagen.

    
    import com.google.api.gax.rpc.ApiException;
    import com.google.cloud.aiplatform.v1.EndpointName;
    import com.google.cloud.aiplatform.v1.PredictResponse;
    import com.google.cloud.aiplatform.v1.PredictionServiceClient;
    import com.google.cloud.aiplatform.v1.PredictionServiceSettings;
    import com.google.gson.Gson;
    import com.google.protobuf.InvalidProtocolBufferException;
    import com.google.protobuf.Value;
    import com.google.protobuf.util.JsonFormat;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.util.Base64;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;
    
    public class EditImageInpaintingRemoveMaskSample {
    
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "my-project-id";
        String location = "us-central1";
        String inputPath = "/path/to/my-input.png";
        String maskPath = "/path/to/my-mask.png";
        String prompt = ""; // The text prompt describing the entire image.
    
        editImageInpaintingRemoveMask(projectId, location, inputPath, maskPath, prompt);
      }
    
      // Edit an image using a mask file. Inpainting can remove an object from the masked area.
      public static PredictResponse editImageInpaintingRemoveMask(
          String projectId, String location, String inputPath, String maskPath, String prompt)
          throws ApiException, IOException {
        final String endpoint = String.format("%s-aiplatform.googleapis.com:443", location);
        PredictionServiceSettings predictionServiceSettings =
            PredictionServiceSettings.newBuilder().setEndpoint(endpoint).build();
    
        // Initialize client that will be used to send requests. This client only needs to be created
        // once, and can be reused for multiple requests.
        try (PredictionServiceClient predictionServiceClient =
            PredictionServiceClient.create(predictionServiceSettings)) {
    
          final EndpointName endpointName =
              EndpointName.ofProjectLocationPublisherModelName(
                  projectId, location, "google", "imagegeneration@006");
    
          // Encode image and mask to Base64
          String imageBase64 =
              Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get(inputPath)));
          String maskBase64 =
              Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get(maskPath)));
    
          // Create the image and image mask maps
          Map<String, String> imageMap = new HashMap<>();
          imageMap.put("bytesBase64Encoded", imageBase64);
    
          Map<String, String> maskMap = new HashMap<>();
          maskMap.put("bytesBase64Encoded", maskBase64);
          Map<String, Map> imageMaskMap = new HashMap<>();
          imageMaskMap.put("image", maskMap);
    
          Map<String, Object> instancesMap = new HashMap<>();
          instancesMap.put("prompt", prompt); // [ "prompt", "<my-prompt>" ]
          instancesMap.put(
              "image", imageMap); // [ "image", [ "bytesBase64Encoded", "iVBORw0KGgo...==" ] ]
          instancesMap.put(
              "mask",
              imageMaskMap); // [ "mask", [ "image", [ "bytesBase64Encoded", "iJKDF0KGpl...==" ] ] ]
          instancesMap.put("editMode", "inpainting-remove"); // [ "editMode", "inpainting-remove" ]
          Value instances = mapToValue(instancesMap);
    
          // Optional parameters
          Map<String, Object> paramsMap = new HashMap<>();
          paramsMap.put("sampleCount", 1);
          Value parameters = mapToValue(paramsMap);
    
          PredictResponse predictResponse =
              predictionServiceClient.predict(
                  endpointName, Collections.singletonList(instances), parameters);
    
          for (Value prediction : predictResponse.getPredictionsList()) {
            Map<String, Value> fieldsMap = prediction.getStructValue().getFieldsMap();
            if (fieldsMap.containsKey("bytesBase64Encoded")) {
              String bytesBase64Encoded = fieldsMap.get("bytesBase64Encoded").getStringValue();
              Path tmpPath = Files.createTempFile("imagen-", ".png");
              Files.write(tmpPath, Base64.getDecoder().decode(bytesBase64Encoded));
              System.out.format("Image file written to: %s\n", tmpPath.toUri());
            }
          }
          return predictResponse;
        }
      }
    
      private static Value mapToValue(Map<String, Object> map) throws InvalidProtocolBufferException {
        Gson gson = new Gson();
        String json = gson.toJson(map);
        Value.Builder builder = Value.newBuilder();
        JsonFormat.parser().merge(json, builder);
        return builder.build();
      }
    }
    

    Node.js

    Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Node.js Vertex AI.

    Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

    Dalam contoh ini, Anda memanggil metode predict pada PredictionServiceClient. Layanan ini menghasilkan gambar yang kemudian disimpan secara lokal. Untuk mengetahui informasi selengkapnya tentang versi dan fitur model, lihat Model Imagen.

    /**
     * TODO(developer): Update these variables before running the sample.
     */
    const projectId = process.env.CAIP_PROJECT_ID;
    const location = 'us-central1';
    const inputFile = 'resources/volleyball_game.png';
    const maskFile = 'resources/volleyball_game_inpainting_remove_mask.png';
    const prompt = 'volleyball game';
    
    const aiplatform = require('@google-cloud/aiplatform');
    
    // Imports the Google Cloud Prediction Service Client library
    const {PredictionServiceClient} = aiplatform.v1;
    
    // Import the helper module for converting arbitrary protobuf.Value objects
    const {helpers} = aiplatform;
    
    // Specifies the location of the api endpoint
    const clientOptions = {
      apiEndpoint: `${location}-aiplatform.googleapis.com`,
    };
    
    // Instantiates a client
    const predictionServiceClient = new PredictionServiceClient(clientOptions);
    
    async function editImageInpaintingRemoveMask() {
      const fs = require('fs');
      const util = require('util');
      // Configure the parent resource
      const endpoint = `projects/${projectId}/locations/${location}/publishers/google/models/imagegeneration@006`;
    
      const imageFile = fs.readFileSync(inputFile);
      // Convert the image data to a Buffer and base64 encode it.
      const encodedImage = Buffer.from(imageFile).toString('base64');
    
      const maskImageFile = fs.readFileSync(maskFile);
      // Convert the image mask data to a Buffer and base64 encode it.
      const encodedMask = Buffer.from(maskImageFile).toString('base64');
    
      const promptObj = {
        prompt: prompt, // The text prompt describing the entire image
        editMode: 'inpainting-remove',
        image: {
          bytesBase64Encoded: encodedImage,
        },
        mask: {
          image: {
            bytesBase64Encoded: encodedMask,
          },
        },
      };
      const instanceValue = helpers.toValue(promptObj);
      const instances = [instanceValue];
    
      const parameter = {
        // Optional parameters
        seed: 100,
        // Controls the strength of the prompt
        // 0-9 (low strength), 10-20 (medium strength), 21+ (high strength)
        guidanceScale: 21,
        sampleCount: 1,
      };
      const parameters = helpers.toValue(parameter);
    
      const request = {
        endpoint,
        instances,
        parameters,
      };
    
      // Predict request
      const [response] = await predictionServiceClient.predict(request);
      const predictions = response.predictions;
      if (predictions.length === 0) {
        console.log(
          'No image was generated. Check the request parameters and prompt.'
        );
      } else {
        let i = 1;
        for (const prediction of predictions) {
          const buff = Buffer.from(
            prediction.structValue.fields.bytesBase64Encoded.stringValue,
            'base64'
          );
          // Write image content to the output file
          const writeFile = util.promisify(fs.writeFile);
          const filename = `output${i}.png`;
          await writeFile(filename, buff);
          console.log(`Saved image ${filename}`);
          i++;
        }
      }
    }
    await editImageInpaintingRemoveMask();

    Menghapus dengan deteksi masker otomatis

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

    Gambar 3

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

    Konsol

    1. Di Google Cloud konsol, buka halaman Vertex AI > Media Studio .

      Buka Media Studio

    2. Klik Upload. Di dialog file yang ditampilkan, pilih file yang akan diupload.
    3. Klik Perbaiki.
    4. Di panel Parameter, pilih Inpaint (Hapus)
    5. Di toolbar pengeditan, klik background_replaceEkstrak.
    6. 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_replaceOrang: mendeteksi orang dan membuat mask di sekelilingnya.
    7. Opsional: Di panel Parameters, sesuaikan opsi berikut:
      • Model: model Imagen yang akan digunakan
      • Jumlah hasil: jumlah hasil yang akan dibuat
      • Perintah negatif: item yang harus dihindari pembuatannya
    8. Pada kolom perintah, masukkan perintah baru untuk mengubah gambar.
    9. Klik kirimBuat.

    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",
        ),
    )
    
    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

    Untuk mengetahui informasi selengkapnya, lihat referensi API Edit gambar.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Google Cloud Project ID Anda.
    • 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.
    • prompt: Untuk hasil terbaik, hilangkan perintah dan negativePrompt saat Anda menggunakan inpainting untuk penghapusan.
    • 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 mask otomatis yang digunakan model. Nilai yang tersedia:
      • MASK_MODE_BACKGROUND: Membuat mask secara otomatis menggunakan segmentasi latar belakang. Gunakan setelan ini untuk mengubah konten latar belakang.
      • MASK_MODE_FOREGROUND: Membuat mask secara otomatis menggunakan segmentasi latar depan. Gunakan setelan ini untuk mengubah konten latar depan, seperti menghapus objek latar depan ini (penghapusan menggunakan inpainting).
      • MASK_MODE_SEMANTIC: Secara otomatis membuat mask menggunakan segmentasi semantik berdasarkan segmentasi kelas segmentation classes 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 penghapusan inpainting, mulai dari 12 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

    Isi JSON permintaan:

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

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

    Imagen 2

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

    Konsol

    1. Di Google Cloud konsol, buka halaman Vertex AI > Media Studio .

      Buka Media Studio

    2. Di panel tugas di bagian bawah, klik Edit gambar.

    3. Klik Upload untuk memilih gambar produk yang disimpan secara lokal yang akan diedit.

    4. Di toolbar pengeditan, klik background_replace Ekstrak.

    5. 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 sekitarnya.
    6. Opsional. Di panel Parameters, sesuaikan Number of results, Negative prompt, Text prompt guidance, atau parameter lainnya.

    7. Biarkan kolom perintah kosong.

    8. Klik Generate.

    REST

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: Google Cloud Project ID Anda.
    • 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.
    • B64_BASE_IMAGE: Gambar dasar yang akan diedit atau di-upscale. Gambar harus ditentukan sebagai string byte berenkode base64. Batas ukuran: 10 MB.
    • EDIT_IMAGE_COUNT: Jumlah gambar yang diedit. Nilai default: 4.
    • MASK_TYPE: Meminta model untuk membuat mask, sehingga Anda tidak perlu memberikannya. Oleh karena itu, saat memberikan parameter ini, Anda harus menghilangkan objek mask. Nilai yang tersedia:
      • background: Membuat mask secara otomatis ke semua area kecuali objek, orang, atau subjek utama dalam gambar.
      • foreground: Membuat mask secara otomatis untuk objek, orang, atau subjek utama dalam gambar.
      • semantic: Gunakan segmentasi otomatis untuk membuat area mask untuk satu atau beberapa kelas segmentasi. Tetapkan class segmentasi menggunakan parameter classes dan nilai class_id yang sesuai. Anda dapat menentukan hingga 5 kelas. Saat Anda menggunakan jenis masker semantik, objek maskMode akan terlihat seperti berikut:
        "maskMode": {
          "maskType": "semantic",
          "classes": [class_id1, class_id2]
        }

    Metode HTTP dan URL:

    POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagegeneration@006:predict

    Isi JSON permintaan:

    {
      "instances": [
        {
          "prompt": "",
          "image": {
            "bytesBase64Encoded": "B64_BASE_IMAGE"
          }
        }
      ],
      "parameters": {
        "sampleCount": EDIT_IMAGE_COUNT,
        "editConfig": {
          "editMode": "inpainting-remove",
          "maskMode": {
            "maskType": "MASK_TYPE"
          }
        }
      }
    }
    

    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/imagegeneration@006: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/imagegeneration@006: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"
        }
      ]
    }
    

    Python

    Untuk mempelajari cara menginstal atau mengupdate Vertex AI SDK untuk Python, lihat Menginstal Vertex AI SDK untuk Python. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python.

    
    import vertexai
    from vertexai.preview.vision_models import Image, ImageGenerationModel
    
    # TODO(developer): Update and un-comment below lines
    # PROJECT_ID = "your-project-id"
    # input_file = "input-image.png"
    # mask_mode = "foreground" # 'background', 'foreground', or 'semantic'
    # output_file = "output-image.png"
    # prompt = "sports car" # The text prompt describing what you want to see in the edited image.
    
    vertexai.init(project=PROJECT_ID, location="us-central1")
    
    model = ImageGenerationModel.from_pretrained("imagegeneration@006")
    base_img = Image.load_from_file(location=input_file)
    
    images = model.edit_image(
        base_image=base_img,
        mask_mode=mask_mode,
        prompt=prompt,
        edit_mode="inpainting-remove",
    )
    
    images[0].save(location=output_file, include_generation_parameters=False)
    
    # Optional. View the edited image in a notebook.
    # images[0].show()
    
    print(f"Created output image using {len(images[0]._image_bytes)} bytes")
    # Example response:
    # Created output image using 1279948 bytes
    

    Batasan

    Bagian berikut menjelaskan batasan fitur hapus objek Imagen.

    Piksel yang dimodifikasi

    Piksel yang dihasilkan oleh model yang tidak ada dalam mask tidak dijamin identik dengan input dan dihasilkan pada resolusi model (seperti 1024x1024). Perubahan yang sangat kecil mungkin ada pada gambar yang dihasilkan.

    Jika Anda menginginkan pelestarian gambar yang 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 penghapusan

    Beberapa objek kecil yang berdekatan dengan mask juga dapat dihapus. Sebagai praktik terbaik, sebaiknya Anda membuat masker seakurat mungkin.

    Menghapus area besar di gambar luar ruangan, khususnya area langit, dapat menyebabkan artefak yang tidak diinginkan. Sebagai praktik terbaik, sebaiknya Anda memberikan perintah.

    Langkah berikutnya

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