החלפת הרקע של תמונה

בדף הזה מוסבר איך להחליף את הרקע של תמונה. ‫Imagen ב-Vertex AI מאפשר לכם להשתמש בפילוח אובייקטים אוטומטי כדי לשמור על התוכן הזה תוך כדי שינוי תוכן אחר בתמונה. עם Imagen 3 אתם יכולים גם לספק אזור מסכה משלכם כדי לקבל יותר שליטה בעריכה.

המודלים הבאים תומכים בהחלפת רקע של תמונות:

הצגת כרטיס המודל של Imagen לעריכה ולהתאמה אישית

דוגמה לעריכת תמונת מוצר

בדוגמה הבאה מודגש שיפור של תמונת מוצר על ידי שינוי הרקע של התמונה, תוך שמירה על מראה המוצר בתמונה.

דוגמה לתמונה שנוצרה במסוף
תמונה שנוצרה באמצעות התכונה לעריכת תמונות מוצר של Imagen מההנחיה: על שולחן בחנות בוטיק. מקור התמונה המקורית: Irene Kredenets ב-Unsplash.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  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. מגדירים אימות לסביבה.

    צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:

    המסוף

    כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים ולממשקי ה-API, לא צריך להגדיר אימות. Google Cloud

    Python

    כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של Python שבדף הזה, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.

    1. התקינו את ה-CLI של Google Cloud.

    2. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

    3. אם אתם משתמשים במעטפת מקומית, אתם צריכים ליצור פרטי כניסה לאימות מקומי עבור חשבון המשתמש:

      gcloud auth application-default login

      אם אתם משתמשים ב-Cloud Shell, אין צורך לבצע את הפעולה הזו.

      אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

    למידע נוסף, ראו הגדרת ADC לסביבת פיתוח מקומית במאמרי העזרה בנושא אימות Google Cloud .

    REST

    כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.

      התקינו את ה-CLI של Google Cloud.

      אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

    מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Google Cloud .

עריכה באמצעות מסכת רקע שזוהתה אוטומטית

כדי להפעיל את התכונה לעריכת תמונות מוצרים ולהשתמש בה עם זיהוי רקע אוטומטי, פועלים לפי ההוראות הבאות.

המסוף

  1. במסוף Google Cloud , עוברים לדף Vertex AI > Vertex AI Studio .

    מעבר אל Vertex AI Studio

  2. לוחצים על יצירת מדיה.

  3. לוחצים על תמונה.

  4. ברשימה משימה, בוחרים באפשרות עריכת הרקע של המוצר.

  5. ברשימה מודל, בוחרים את מודל Imagen שרוצים להשתמש בו.

  6. בקטע Input image (תמונת קלט), לוחצים על Add (הוספה) ובוחרים את התמונה שרוצים לערוך כדי להעלות אותה.

  7. בתיבה הנחיה, כותבים הנחיה שמתארת את השינוי שרוצים לעשות בתמונה.

  8. בוחרים אחת מהאפשרויות הבאות לחילוץ מסכה:

    • אלמנטים ברקע: מזהה את האלמנטים ברקע ויוצר מסכה סביבם.
    • אלמנטים בחזית: מזהה את האובייקטים בחזית ויוצר מסכה סביבם.
    • background_replace People: מזהה אנשים ויוצר מסכה סביבם.
  9. לוחצים על Run.

Python

התקנה

pip install --upgrade google-genai

מידע נוסף מופיע ב מאמרי העזרה בנושא SDK.

מגדירים משתני סביבה כדי להשתמש ב-Gen AI SDK עם 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_ENTERPRISE=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/suitcase.png"),
    reference_id=0,
)
mask_ref = MaskReferenceImage(
    reference_id=1,
    reference_image=None,
    config=MaskReferenceConfig(
        mask_mode="MASK_MODE_BACKGROUND",
    ),
)

image = client.models.edit_image(
    model="imagen-3.0-capability-001",
    prompt="A light blue suitcase in front of a window in an airport",
    reference_images=[raw_ref, mask_ref],
    config=EditImageConfig(
        edit_mode="EDIT_MODE_BGSWAP",
    ),
)

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

מידע נוסף מופיע במאמר בנושא עריכת תמונות ב-API.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • LOCATION: האזור של הפרויקט. לדוגמה, us-central1,‏ europe-west2 או asia-northeast3. רשימת האזורים הזמינים מופיעה במאמר מיקומי AI גנרטיבי ב-Vertex AI. כשמשתמשים בנקודת קצה אזורית של API, האזור מכתובת ה-URL של נקודת הקצה קובע איפה הבקשה תעובד, והערך LOCATION בנתיב המשאב מתעלם אם יש התנגשות.
  • TEXT_PROMPT: הנחייה טקסטואלית שמנחה את המודל לגבי התמונות שהוא יוצר. חובה למלא את השדה הזה גם כשיוצרים וגם כשעורכים.
  • referenceType: ReferenceImage היא תמונה שמספקת הקשר נוסף לעריכת תמונה. נדרשת תמונה לדוגמה רגילה בפורמט RGB raw (REFERENCE_TYPE_RAW) לתרחישי שימוש בעריכה. בכל בקשה יכולה להיות תמונה לדוגמה אחת לכל היותר של הפניה גולמית. הגובה והרוחב של תמונת הפלט זהים לאלה של תמונת לדוגמה גולמית. כדי להשתמש בתרחישי עריכה עם מסכה, צריך תמונה לדוגמה של המסכה (REFERENCE_TYPE_MASK).
  • referenceId: מזהה המספר השלם של תמונת ההפניה. בדוגמה הזו, שני האובייקטים של תמונות ההפניה הם מסוגים שונים, ולכן יש להם ערכים שונים של referenceId (1 ו-2).
  • B64_BASE_IMAGE: תמונת הבסיס לעריכה או להגדלה. התמונה צריכה להיות מחרוזת בייטים בקידוד base64. מגבלת גודל: 10MB.
  • maskImageConfig.maskMode: מצב המסכה לעריכת המסכה. ‫MASK_MODE_BACKGROUND משמשת לטשטוש אוטומטי של הרקע בלי שמספקים מסכה.
  • MASK_DILATION - float. אחוז רוחב התמונה שבו רוצים להרחיב את המסכה. מומלץ להשתמש בערך 0.00 כדי להימנע מהארכת השימוש במוצר בחזית. מינימום: 0, מקסימום: 1. ברירת מחדל: 0.03.
  • EDIT_STEPS – מספר שלם. מספר שלבי הדגימה של מודל הבסיס. כדי לערוך תמונות של מוצרים, מתחילים בשלב 75.
  • EDIT_IMAGE_COUNT – מספר התמונות הערוכות. ערכים קבילים מסוג מספר שלם: 1-4. ערך ברירת המחדל: 4.

ה-method של ה-HTTP וכתובת ה-URL:

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

גוף בקשת 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_BACKGROUND",
            "dilation": MASK_DILATION
          }
        }
      ]
    }
  ],
  "parameters": {
    "editConfig": {
      "baseSteps": EDIT_STEPS
    },
    "editMode": "EDIT_MODE_BGSWAP",
    "sampleCount": EDIT_IMAGE_COUNT
  }
}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

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

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$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
דוגמה לתגובה לבקשה לעריכת הרקע של מוצר: התגובה מחזירה ארבעה אובייקטים של חיזוי, עם בייטים של התמונה שנוצרה בקידוד base64.
{
  "predictions": [
    {
      "bytesBase64Encoded": "BASE64_IMG_BYTES",
      "mimeType": "image/png"
    },
    {
      "mimeType": "image/png",
      "bytesBase64Encoded": "BASE64_IMG_BYTES"
    },
    {
      "bytesBase64Encoded": "BASE64_IMG_BYTES",
      "mimeType": "image/png"
    },
    {
      "bytesBase64Encoded": "BASE64_IMG_BYTES",
      "mimeType": "image/png"
    }
  ]
}

עריכה עם אזור מסכה מוגדר

אתם יכולים לבחור להסתיר את האזור שמוחלף, במקום לאפשר ל-Imagen לזהות את המסכה באופן אוטומטי.

המסוף

  1. במסוף Google Cloud , עוברים לדף Vertex AI > Vertex AI Studio .

    מעבר אל Vertex AI Studio

  2. לוחצים על יצירת מדיה.

  3. לוחצים על תמונה.

  4. ברשימה משימה, בוחרים באפשרות עריכת הרקע של המוצר.

  5. ברשימה מודל, בוחרים את מודל Imagen שרוצים להשתמש בו.

  6. בקטע Input image (תמונת קלט), לוחצים על Add (הוספה) ובוחרים את התמונה שרוצים לערוך כדי להעלות אותה.

  7. בתיבה הנחיה, כותבים הנחיה שמתארת את השינוי שרוצים לעשות בתמונה.

  8. כדי לציין מסכה, מבצעים אחת מהפעולות הבאות:

    • להעלות מסכה משלכם:
      1. יוצרים מסכה במחשב.
      2. לוחצים על העלאה ייבוא מסכה ובוחרים מסכה להעלאה.
    • מגדירים את המסכה: בסרגל הכלים לעריכה, משתמשים בכלי המסכה (תיבה, מכחול או masked_transitions, הכלי היפוך) כדי לציין את האזור או האזורים שרוצים להוסיף להם תוכן.
  9. לוחצים על Run.

Python

התקנה

pip install --upgrade google-genai

מידע נוסף מופיע ב מאמרי העזרה בנושא SDK.

מגדירים משתני סביבה כדי להשתמש ב-Gen AI SDK עם 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_ENTERPRISE=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/suitcase.png"),
    reference_id=0,
)
mask_ref = MaskReferenceImage(
    reference_id=1,
    reference_image=Image.from_file(location="test_resources/suitcase_mask.png"),
    config=MaskReferenceConfig(
        mask_mode="MASK_MODE_USER_PROVIDED",
        mask_dilation=0.0,
    ),
)

image = client.models.edit_image(
    model="imagen-3.0-capability-001",
    prompt="A light blue suitcase in an airport",
    reference_images=[raw_ref, mask_ref],
    config=EditImageConfig(
        edit_mode="EDIT_MODE_BGSWAP",
    ),
)

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

מידע נוסף על Imagen API:

  • Method: endpoints.predict
  • VisionGenerativeModelInstance
  • VisionGenerativeModelParams
  • VisionGenerativeModelResult

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • LOCATION: האזור של הפרויקט. לדוגמה, us-central1,‏ europe-west2 או asia-northeast3. רשימת האזורים הזמינים מופיעה במאמר מיקומי AI גנרטיבי ב-Vertex AI. כשמשתמשים בנקודת קצה אזורית של API, האזור מכתובת ה-URL של נקודת הקצה קובע איפה הבקשה תעובד, והערך LOCATION בנתיב המשאב מתעלם אם יש התנגשות.
    • TEXT_PROMPT: הנחייה טקסטואלית שמנחה את המודל לגבי התמונות שהוא יוצר. חובה למלא את השדה הזה גם כשיוצרים וגם כשעורכים.
    • referenceId: מזהה המספר השלם של תמונת ההפניה. בדוגמה הזו, שני האובייקטים של תמונות לדוגמה הם מסוגים שונים, ולכן יש להם ערכים שונים של referenceId (1 ו-2).
    • B64_BASE_IMAGE: תמונת הבסיס לעריכה או להגדלה. התמונה צריכה להיות מחרוזת בייטים בקידוד base64. מגבלת גודל: 10MB.
    • B64_MASK_IMAGE: התמונה בשחור-לבן שרוצים להשתמש בה כשכבת מסכה כדי לערוך את התמונה המקורית. התמונה צריכה להיות מוגדרת כמחרוזת בייטים בקידוד Base64. מגבלת גודל: 10MB.
    • MASK_DILATION - float. אחוז רוחב התמונה שבו רוצים להרחיב את המסכה. מומלץ להשתמש בערך 0.00 כדי להימנע מהארכת השימוש במוצר בחזית. מינימום: 0, מקסימום: 1. ברירת מחדל: 0.03.
    • EDIT_STEPS – מספר שלם. מספר שלבי הדגימה של מודל הבסיס. כדי לערוך תמונות של מוצרים, מתחילים בשלב 75.
    • EDIT_IMAGE_COUNT – מספר התמונות הערוכות. ערכים קבילים מסוג מספר שלם: 1-4. ערך ברירת המחדל: 4.

    ה-method של ה-HTTP וכתובת ה-URL:

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

    גוף בקשת JSON:

    {
      "instances": [
        {
          "prompt": "TEXT_PROMPT": [
            {
              "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_BGSWAP",
        "sampleCount": EDIT_IMAGE_COUNT
      }
    }
    

    כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

    curl

    שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

    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

    שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

    $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
    דוגמה לתגובה לבקשה לעריכת הרקע של מוצר:
    {
      "predictions": [
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "mimeType": "image/png",
          "bytesBase64Encoded": "BASE64_IMG_BYTES"
        },
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        },
        {
          "bytesBase64Encoded": "BASE64_IMG_BYTES",
          "mimeType": "image/png"
        }
      ]
    }
    

מגבלות

לפעמים המסכות לא שלמות, ולכן המודל עשוי לנסות להשלים את האובייקט בחזית אם חסרים חלקים קטנים מאוד בגבול. כאפקט לוואי נדיר, אם האובייקט בחזית כבר הושלם, יכול להיות שהמודל ייצור הרחבות קלות.

פתרון עקיף הוא לפלח את הפלט של המודל ואז לבצע מיזוג. בדוגמה הבאה מוצג קטע קוד ב-Python שמדגים פתרון עקיף:

blended = Image.composite(out_images[0].resize(image_expanded.size), image_expanded, mask_expanded)

המאמרים הבאים

כדאי לקרוא מאמרים על Imagen ועל מוצרים אחרים של AI גנרטיבי ב-Vertex AI: