הבנת תמונות

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

  • הוספת כותרות ותשובות לשאלות על תמונות
  • תמלול ושיוך של קובצי PDF, כולל עד 2 מיליון אסימונים
  • זיהוי אובייקטים בתמונה והחזרת קואורדינטות של תיבת מלבנית להיקף שלהם
  • פילוח אובייקטים בתוך תמונה

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

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

לפני שמפעילים את Gemini API, צריך לוודא שה-SDK שבחרתם מותקן ושהגדרתם מפתח Gemini API מוכן לשימוש.

קלט תמונה

אפשר לספק תמונות כקלט ל-Gemini בדרכים הבאות:

  • מעלים קובץ תמונה באמצעות File API לפני שליחת בקשה אל generateContent. מומלץ להשתמש בשיטה הזו לקבצים גדולים מ-20MB או כשרוצים לעשות שימוש חוזר בקובץ בכמה בקשות.
  • מעבירים את נתוני התמונה בתוך שורת הקוד עם הבקשה אל generateContent. מומלץ להשתמש בשיטה הזו לקבצים קטנים (גודל הבקשה הכולל קטן מ-20MB) או לתמונות שאוחזרו ישירות מכתובות URL.

העלאת קובץ תמונה

אפשר להשתמש ב-Files API כדי להעלות קובץ תמונה. תמיד צריך להשתמש ב-Files API כשגודל הבקשה הכולל (כולל הקובץ, ההנחיה בטקסט, הוראות המערכת וכו') גדול מ-20MB, או אם רוצים להשתמש באותה תמונה בכמה הנחיות.

הקוד הבא מעלה קובץ תמונה ואז משתמש בקובץ בקריאה ל-generateContent.

Python

from google import genai

client = genai.Client(api_key="GOOGLE_API_KEY")

myfile = client.files.upload(file="path/to/sample.jpg")

response = client.models.generate_content(
    model="gemini-2.0-flash",
    contents=[myfile, "Caption this image."])

print(response.text)

JavaScript

import {
  GoogleGenAI,
  createUserContent,
  createPartFromUri,
} from "@google/genai";

const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });

async function main() {
  const myfile = await ai.files.upload({
    file: "path/to/sample.jpg",
    config: { mimeType: "image/jpeg" },
  });

  const response = await ai.models.generateContent({
    model: "gemini-2.0-flash",
    contents: createUserContent([
      createPartFromUri(myfile.uri, myfile.mimeType),
      "Caption this image.",
    ]),
  });
  console.log(response.text);
}

await main();

Go

file, err := client.UploadFileFromPath(ctx, "path/to/sample.jpg", nil)
if err != nil {
    log.Fatal(err)
}
defer client.DeleteFile(ctx, file.Name)

model := client.GenerativeModel("gemini-2.0-flash")
resp, err := model.GenerateContent(ctx,
    genai.FileData{URI: file.URI},
    genai.Text("Caption this image."))
if err != nil {
    log.Fatal(err)
}

printResponse(resp)

REST

IMAGE_PATH="path/to/sample.jpg"
MIME_TYPE=$(file -b --mime-type "${IMAGE_PATH}")
NUM_BYTES=$(wc -c < "${IMAGE_PATH}")
DISPLAY_NAME=IMAGE

tmp_header_file=upload-header.tmp

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "https://generativelanguage.googleapis.com/upload/v1beta/files?key=${GOOGLE_API_KEY}" \
  -D upload-header.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${IMAGE_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

# Now generate content using that file
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"file_data":{"mime_type": "${MIME_TYPE}", "file_uri": '$file_uri'}},
          {"text": "Caption this image."}]
        }]
      }' 2> /dev/null > response.json

cat response.json
echo

jq ".candidates[].content.parts[].text" response.json

מידע נוסף על עבודה עם קובצי מדיה זמין במאמר Files API.

העברת נתוני תמונה בתוך שורה

במקום להעלות קובץ תמונה, אפשר להעביר את נתוני התמונה בקוד של הבקשה ל-generateContent. האפשרות הזו מתאימה לתמונות קטנות יותר (גודל הבקשה הכולל קטן מ-20MB) או לתמונות שאוחזרו ישירות מכתובות URL.

אפשר לספק נתוני תמונות כמחרוזות מקודדות של Base64 או על ידי קריאת קבצים מקומיים ישירות (בהתאם ל-SDK).

קובץ תמונה מקומי:

Python

  from google.genai import types

  with open('path/to/small-sample.jpg', 'rb') as f:
      img_bytes = f.read()

  response = client.models.generate_content(
    model='gemini-2.0-flash',
    contents=[
      types.Part.from_bytes(
        data=img_bytes,
        mime_type='image/jpeg',
      ),
      'Caption this image.'
    ]
  )

  print(response.text)

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
const base64ImageFile = fs.readFileSync("path/to/small-sample.jpg", {
  encoding: "base64",
});

const contents = [
  {
    inlineData: {
      mimeType: "image/jpeg",
      data: base64ImageFile,
    },
  },
  { text: "Caption this image." },
];

const response = await ai.models.generateContent({
  model: "gemini-2.0-flash",
  contents: contents,
});
console.log(response.text);

Go

model := client.GenerativeModel("gemini-2.0-flash")

bytes, err := os.ReadFile("path/to/small-sample.jpg")
if err != nil {
  log.Fatal(err)
}

prompt := []genai.Part{
  genai.Blob{MIMEType: "image/jpeg", Data: bytes},
  genai.Text("Caption this image."),
}

resp, err := model.GenerateContent(ctx, prompt...)
if err != nil {
  log.Fatal(err)
}

for _, c := range resp.Candidates {
  if c.Content != nil {
    fmt.Println(*c.Content)
  }
}

REST

IMG_PATH=/path/to/your/image1.jpg

if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
  B64FLAGS="--input"
else
  B64FLAGS="-w0"
fi

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
            {
              "inline_data": {
                "mime_type":"image/jpeg",
                "data": "'\$(base64 \$B64FLAGS \$IMG_PATH)'"
              }
            },
            {"text": "Caption this image."},
        ]
      }]
    }' 2> /dev/null

תמונה מכתובת URL:

Python

from google import genai
from google.genai import types

import requests

image_path = "https://goo.gle/instrument-img"
image = requests.get(image_path)

client = genai.Client(api_key="GOOGLE_API_KEY")
response = client.models.generate_content(
    model="gemini-2.0-flash-exp",
    contents=["What is this image?",
              types.Part.from_bytes(data=image.content, mime_type="image/jpeg")])

print(response.text)

JavaScript

import { GoogleGenAI } from "@google/genai";

async function main() {
  const ai = new GoogleGenAI({ apiKey: process.env.GOOGLE_API_KEY });

  const imageUrl = "https://goo.gle/instrument-img";

  const response = await fetch(imageUrl);
  const imageArrayBuffer = await response.arrayBuffer();
  const base64ImageData = Buffer.from(imageArrayBuffer).toString('base64');

  const result = await ai.models.generateContent({
    model: "gemini-2.0-flash",
    contents: [
    {
      inlineData: {
        mimeType: 'image/jpeg',
        data: base64ImageData,
      },
    },
    { text: "Caption this image." }
  ],
  });
  console.log(result.text);
}

main();

Go

func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("GOOGLE_API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()

model := client.GenerativeModel("gemini-2.0-flash")

// Download the image.
imageResp, err := http.Get("https://goo.gle/instrument-img")
if err != nil {
  panic(err)
}
defer imageResp.Body.Close()

imageBytes, err := io.ReadAll(imageResp.Body)
if err != nil {
  panic(err)
}

// Create the request.
req := []genai.Part{
  genai.ImageData("jpeg", imageBytes),

  genai.Text("Caption this image."),
}

// Generate content.
resp, err := model.GenerateContent(ctx, req...)
if err != nil {
  panic(err)
}

// Handle the response of generated text.
for _, c := range resp.Candidates {
  if c.Content != nil {
    fmt.Println(*c.Content)
  }
}

}

REST

IMG_URL="https://goo.gle/instrument-img"

MIME_TYPE=$(curl -sIL "$IMG_URL" | grep -i '^content-type:' | awk -F ': ' '{print $2}' | sed 's/\r$//' | head -n 1)
if [[ -z "$MIME_TYPE" || ! "$MIME_TYPE" == image/* ]]; then
  MIME_TYPE="image/jpeg"
fi

if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
  B64FLAGS="--input"
else
  B64FLAGS="-w0"
fi

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
            {
              "inline_data": {
                "mime_type":"'"$MIME_TYPE"'",
                "data": "'$(curl -sL "$IMG_URL" | base64 $B64FLAGS)'"
              }
            },
            {"text": "Caption this image."}
        ]
      }]
    }' 2> /dev/null

כמה דברים שכדאי לזכור לגבי נתוני תמונות בתוך שורות טקסט:

  • הגודל הכולל המקסימלי של הבקשה הוא 20MB, כולל הנחיות טקסט, הוראות מערכת וכל הקבצים שסופקו בתוך הטקסט. אם גודל הקובץ גורם לגודל הבקשה הכולל לחרוג מ-20MB, צריך להשתמש ב-Files API כדי להעלות קובץ תמונה לשימוש בבקשה.
  • אם אתם משתמשים בתמונת לדוגמה כמה פעמים, יעיל יותר להעלות קובץ תמונה באמצעות File API.

הצגת הנחיות עם כמה תמונות

כדי לספק כמה תמונות בהנחיה אחת, צריך לכלול כמה אובייקטים מסוג Part במערך contents. הנתונים יכולים להיות שילוב של נתונים בתוך שורה (קבצים מקומיים או כתובות URL) והפניות ל-File API.

Python

from google import genai
from google.genai import types

client = genai.Client(api_key="GOOGLE_API_KEY")

# Upload the first image
image1_path = "path/to/image1.jpg"
uploaded_file = client.files.upload(file=image1_path)

# Prepare the second image as inline data
image2_path = "path/to/image2.png"
with open(image2_path, 'rb') as f:
    img2_bytes = f.read()

# Create the prompt with text and multiple images
response = client.models.generate_content(
    model="gemini-2.0-flash",
    contents=[
        "What is different between these two images?",
        uploaded_file,  # Use the uploaded file reference
        types.Part.from_bytes(
            data=img2_bytes,
            mime_type='image/png'
        )
    ]
)

print(response.text)

JavaScript

import {
  GoogleGenAI,
  createUserContent,
  createPartFromUri,
} from "@google/genai";
import * as fs from "node:fs";

const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });

async function main() {
  // Upload the first image
  const image1_path = "path/to/image1.jpg";
  const uploadedFile = await ai.files.upload({
    file: image1_path,
    config: { mimeType: "image/jpeg" },
  });

  // Prepare the second image as inline data
  const image2_path = "path/to/image2.png";
  const base64Image2File = fs.readFileSync(image2_path, {
    encoding: "base64",
  });

  // Create the prompt with text and multiple images
  const response = await ai.models.generateContent({
    model: "gemini-2.0-flash",
    contents: createUserContent([
      "What is different between these two images?",
      createPartFromUri(uploadedFile.uri, uploadedFile.mimeType),
      {
        inlineData: {
          mimeType: "image/png",
          data: base64Image2File,
        },
      },
    ]),
  });
  console.log(response.text);
}

await main();

Go

+    // Upload the first image
image1Path := "path/to/image1.jpg"
uploadedFile, err := client.UploadFileFromPath(ctx, image1Path, nil)
if err != nil {
    log.Fatal(err)
}
defer client.DeleteFile(ctx, uploadedFile.Name)

// Prepare the second image as inline data
image2Path := "path/to/image2.png"
img2Bytes, err := os.ReadFile(image2Path)
if err != nil {
  log.Fatal(err)
}

// Create the prompt with text and multiple images
model := client.GenerativeModel("gemini-2.0-flash")
prompt := []genai.Part{
  genai.Text("What is different between these two images?"),
  genai.FileData{URI: uploadedFile.URI},
  genai.Blob{MIMEType: "image/png", Data: img2Bytes},
}

resp, err := model.GenerateContent(ctx, prompt...)
if err != nil {
  log.Fatal(err)
}

printResponse(resp)

REST

# Upload the first image
IMAGE1_PATH="path/to/image1.jpg"
MIME1_TYPE=$(file -b --mime-type "${IMAGE1_PATH}")
NUM1_BYTES=$(wc -c < "${IMAGE1_PATH}")
DISPLAY_NAME1=IMAGE1

tmp_header_file1=upload-header1.tmp

curl "https://generativelanguage.googleapis.com/upload/v1beta/files?key=${GOOGLE_API_KEY}" \
  -D upload-header1.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM1_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME1_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME1}'}}" 2> /dev/null

upload_url1=$(grep -i "x-goog-upload-url: " "${tmp_header_file1}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file1}"

curl "${upload_url1}" \
  -H "Content-Length: ${NUM1_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${IMAGE1_PATH}" 2> /dev/null > file_info1.json

file1_uri=$(jq ".file.uri" file_info1.json)
echo file1_uri=$file1_uri

# Prepare the second image (inline)
IMAGE2_PATH="path/to/image2.png"
MIME2_TYPE=$(file -b --mime-type "${IMAGE2_PATH}")

if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
  B64FLAGS="--input"
else
  B64FLAGS="-w0"
fi
IMAGE2_BASE64=$(base64 $B64FLAGS $IMAGE2_PATH)

# Now generate content using both images
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "What is different between these two images?"},
          {"file_data":{"mime_type": "'"${MIME1_TYPE}"'", "file_uri": '$file1_uri'}},
          {
            "inline_data": {
              "mime_type":"'"${MIME2_TYPE}"'",
              "data": "'"$IMAGE2_BASE64"'"
            }
          }
        ]
      }]
    }' 2> /dev/null > response.json

cat response.json
echo

jq ".candidates[].content.parts[].text" response.json

אחזור של תיבת מלבנית לאובייקט

המודלים של Gemini מאומנים לזהות אובייקטים בתמונה ולספק את הקואורדינטות של תיבת הסף שלהם. הקואורדינטות מוחזרות ביחס למימדי התמונה, בקנה מידה של [0, 1000]. צריך לבטל את שינוי התצוגה של הקואורדינטות האלה בהתאם לגודל התמונה המקורית.

Python

prompt = "Detect the all of the prominent items in the image. The box_2d should be [ymin, xmin, ymax, xmax] normalized to 0-1000."

JavaScript

const prompt = "Detect the all of the prominent items in the image. The box_2d should be [ymin, xmin, ymax, xmax] normalized to 0-1000.";

Go

prompt := []genai.Part{
    genai.FileData{URI: sampleImage.URI},
    genai.Text("Detect the all of the prominent items in the image. The box_2d should be [ymin, xmin, ymax, xmax] normalized to 0-1000."),
}

REST

PROMPT="Detect the all of the prominent items in the image. The box_2d should be [ymin, xmin, ymax, xmax] normalized to 0-1000."

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

יתרונות עיקריים

  • פשוט: אפשר לשלב בקלות יכולות של זיהוי אובייקטים באפליקציות, ללא קשר לרמת המומחיות שלכם בתחום הראייה הממוחשבת.
  • ניתן להתאמה אישית: אפשר ליצור תיבות מלבניות לפי הוראות בהתאמה אישית (למשל, "אני רוצה לראות תיבות מלבניות של כל העצמים הירוקים בתמונה הזו"), בלי לאמן מודל בהתאמה אישית.

פרטים טכניים

  • קלט: ההנחיה והתמונות או הפריימים של הסרטון המשויכים.
  • פלט: תיבות מלבניות בפורמט [y_min, x_min, y_max, x_max]. הפינה השמאלית העליונה היא המקור. הצירים x ו-y נמצאים בכיוון אופקי ואנכי, בהתאמה. ערכי הקואורדינטות מנורמלים ל-0 עד 1,000 לכל תמונה.
  • ויזואליזציה: משתמשי AI Studio יראו תיבות מלבניות בתוך ממשק המשתמש.

למפתחי Python, כדאי לנסות את ה-notebook של ההבנה המרחבית 2D או את ה-notebook הניסיוני של הצבעה בתלת-ממד.

נירמול קואורדינטות

המודל מחזיר את הקואורדינטות של תיבת המלבן המקיפה בפורמט [y_min, x_min, y_max, x_max]. כדי להמיר את הקואורדינטות המנורמליות האלה לקווי הרוחב והאורך בפיסקלים של התמונה המקורית, פועלים לפי השלבים הבאים:

  1. מחלקים כל אחת מהקואורדינטות של הפלט ב-1000.
  2. מכפילים את קואורדינטות ה-x ברוחב התמונה המקורית.
  3. מכפילים את קואורדינטות ה-y בגובה התמונה המקורית.

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

חלוקת תמונות למקטעים

החל מהמודלים של Gemini 2.5, המודלים של Gemini מאומנים לא רק לזהות פריטים, אלא גם לפלח אותם ולספק מסכה של קווי המתאר שלהם.

המודל חוזה רשימת JSON, שבה כל פריט מייצג מסכת פילוח. לכל פריט יש תיבת מלבנית (box_2d) בפורמט [y0, x0, y1, x1] עם קואורדינטות מנורמלות בין 0 ל-1000, תווית (label) שמזהה את האובייקט ולבסוף מסכת פילוח בתוך תיבת המלבנית, כקובץ PNG עם קידוד base64 שהוא מפת הסתברות עם ערכים בין 0 ל-255. צריך לשנות את הגודל של המסכה כך שיתאים למימדים של תיבת הגבול, ואז לבצע בינאריזציה לפי ערך הסף של רמת האמון (127 לנקודת האמצע).

Python

prompt = """
  Give the segmentation masks for the wooden and glass items.
  Output a JSON list of segmentation masks where each entry contains the 2D
  bounding box in the key "box_2d", the segmentation mask in key "mask", and
  the text label in the key "label". Use descriptive labels.
"""

JavaScript

const prompt = `
  Give the segmentation masks for the wooden and glass items.
  Output a JSON list of segmentation masks where each entry contains the 2D
  bounding box in the key "box_2d", the segmentation mask in key "mask", and
  the text label in the key "label". Use descriptive labels.
`;    

Go

prompt := []genai.Part{
    genai.FileData{URI: sampleImage.URI},
    genai.Text(`
      Give the segmentation masks for the wooden and glass items.
      Output a JSON list of segmentation masks where each entry contains the 2D
      bounding box in the key "box_2d", the segmentation mask in key "mask", and
      the text label in the key "label". Use descriptive labels.
    `),
}

REST

PROMPT='''
  Give the segmentation masks for the wooden and glass items.
  Output a JSON list of segmentation masks where each entry contains the 2D
  bounding box in the key "box_2d", the segmentation mask in key "mask", and
  the text label in the key "label". Use descriptive labels.
'''
שולחן עם קאפקייקס, שבו הפריטים מעץ ומזכוכית מודגשים
מסכה של האובייקטים מעץ וזכוכית שנמצאים בתמונה

בדוגמה המפורטת יותר לפילוח במדריך תוכלו לקרוא איך עושים את זה.

אילו פורמטים של תמונות נתמכים?

Gemini תומך בסוגי ה-MIME הבאים של פורמטים של תמונות:

  • PNG –‏ image/png
  • JPEG –‏ image/jpeg
  • WEBP –‏ image/webp
  • HEIC – image/heic
  • HEIF –‏ image/heif

פרטים טכניים על תמונות

  • מגבלת קבצים: ב-Gemini 2.5 Pro,‏ 2.0 Flash,‏ 1.5 Pro ו-1.5 Flash אפשר לשלוח עד 3,600 קובצי תמונות בכל בקשה.
  • חישוב האסימון:
    • Gemini 1.5 Flash ו-Gemini 1.5 Pro: 258 אסימונים אם שני המימדים הם קטנים מ-384 פיקסלים. תמונות גדולות יותר מחולקות למשבצות (גודל משבצת מינימלי 256px, מקסימלי 768px, שינוי גודל למשבצות בגודל 768x768), וכל משבצת עולה 258 אסימונים.
    • Gemini 2.0 Flash: 258 אסימונים אם שני המימדים קטנים מ-384 פיקסלים. תמונות גדולות יותר מחולקות לריבועים בגודל 768x768 פיקסלים, וכל ריבוע עולה 258 אסימונים.
  • שיטות מומלצות:
    • מוודאים שהתמונות מסובבות בצורה נכונה.
    • כדאי להשתמש בתמונות ברורות ולא מטושטשות.
    • כשמשתמשים בתמונה אחת עם טקסט, צריך למקם את הנחיית הטקסט אחרי חלק התמונה במערך contents.

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

במדריך הזה מוסבר איך להעלות קובצי תמונה וליצור פלט טקסט ממידע קלט של תמונות. מידע נוסף זמין במקורות המידע הבאים:

  • הוראות מערכת: הוראות המערכת מאפשרות לכם לקבוע את התנהגות המודל בהתאם לצרכים הספציפיים ולתרחישי השימוש שלכם.
  • הבנת סרטונים: איך עובדים עם קלטות וידאו.
  • Files API: מידע נוסף על העלאה וניהול של קבצים לשימוש ב-Gemini.
  • אסטרטגיות להצגת בקשות להעלאת קבצים: Gemini API תומך בהצגת בקשות להעלאת קבצים עם נתוני טקסט, תמונות, אודיו וסרטונים, שנקראות גם בקשות להעלאת קבצים במגוון מודלים.
  • הנחיות בטיחות: לפעמים מודלים של AI גנרטיבי יוצרים תוצאות לא צפויות, כמו תוצאות לא מדויקות, מוטה או פוגעניות. עיבוד תמונה (Post Processing) והערכה אנושית חיוניים כדי להגביל את הסיכון לנזק כתוצאה מפלט כזה.