درک تصویر

مدل‌های Gemini می‌توانند تصاویر را پردازش کنند، و بسیاری از موارد استفاده از توسعه‌دهندگان مرزی را که از لحاظ تاریخی به مدل‌های دامنه خاصی نیاز دارند، فعال می‌کنند. برخی از قابلیت های بینایی Gemini عبارتند از:

  • شرح تصاویر و پاسخ به سوالات
  • رونویسی و استدلال روی فایل های PDF، از جمله تا 2 میلیون توکن
  • اشیاء را در یک تصویر شناسایی کنید و مختصات جعبه مرزی را برای آنها برگردانید
  • بخش بندی اشیاء در یک تصویر

Gemini به گونه ای ساخته شده است که از ابتدا چند وجهی باشد و ما همچنان به پیشبرد مرزهای ممکن ادامه می دهیم. این راهنما نشان می دهد که چگونه از Gemini API برای تولید پاسخ های متنی بر اساس ورودی های تصویر و انجام وظایف رایج درک تصویر استفاده کنید.

قبل از شروع

قبل از تماس با Gemini API، مطمئن شوید که SDK مورد نظر خود را نصب کرده اید و یک کلید Gemini API پیکربندی شده و آماده استفاده است.

ورودی تصویر

شما می توانید تصاویر را به عنوان ورودی به Gemini به روش های زیر ارائه دهید:

یک فایل تصویری آپلود کنید

برای آپلود فایل تصویری می توانید از Files API استفاده کنید. همیشه زمانی از Files API استفاده کنید که حجم کل درخواست (شامل فایل، پیام متنی، دستورالعمل‌های سیستم و غیره) بزرگتر از 20 مگابایت است، یا اگر می‌خواهید از یک تصویر در چندین درخواست استفاده کنید.

کد زیر یک فایل تصویری را آپلود می کند و سپس از فایل در یک تماس برای generateContent استفاده می کند.

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)
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();
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)
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 ارسال کنید. این برای تصاویر کوچکتر (کمتر از 20 مگابایت اندازه کل درخواست) یا تصاویری که مستقیماً از URL ها واکشی شده اند مناسب است.

می توانید داده های تصویر را به صورت رشته های رمزگذاری شده Base64 یا با خواندن مستقیم فایل های محلی (بسته به SDK) ارائه دهید.

فایل تصویر محلی:

  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)
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);
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)
  }
}
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:

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)
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();
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)
  }
}

}
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

چند نکته در مورد داده های تصویر درون خطی که باید در نظر داشته باشید:

  • حداکثر اندازه کل درخواست 20 مگابایت است که شامل اعلان های متنی، دستورالعمل های سیستم و تمام فایل های ارائه شده به صورت درون خطی می شود. اگر اندازه فایل شما باعث می شود حجم کل درخواست از 20 مگابایت بیشتر شود، از Files API برای آپلود یک فایل تصویری برای استفاده در درخواست استفاده کنید.
  • اگر چندین بار از یک نمونه تصویر استفاده می کنید، آپلود یک فایل تصویری با استفاده از File API کارآمدتر است.

درخواست با تصاویر متعدد

شما می توانید چندین تصویر را در یک اعلان واحد با گنجاندن چندین شیء Part تصویر در آرایه contents ارائه دهید. اینها می توانند ترکیبی از داده های درون خطی (فایل های محلی یا URL) و مراجع File API باشند.

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)
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();
+    // 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)
# 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] برگردانده می شوند. شما باید این مختصات را بر اساس اندازه تصویر اصلی خود کاهش دهید.

prompt = "Detect the all of the prominent items in the image. The box_2d should be [ymin, xmin, ymax, xmax] normalized to 0-1000."
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.";
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."),
}
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-1000 نرمال می شوند.
  • تجسم: کاربران استودیو AI کادرهای مرزی را که در داخل رابط کاربری ترسیم شده است، خواهند دید.

برای توسعه دهندگان پایتون، نوت بوک درک فضایی دوبعدی یا دفترچه یادداشت اشاره سه بعدی تجربی را امتحان کنید.

عادی کردن مختصات

مدل مختصات جعبه مرزی را در قالب [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 ") است که شیء را مشخص می کند، و در نهایت ماسک تقسیم بندی در داخل جعبه مرزی، به عنوان base64 کدگذاری شده png است که مقدار 5 برای ماسک کردن مجدد نیاز دارد. ابعاد جعبه مرزی را مطابقت دهید، سپس در آستانه اطمینان خود (127 برای نقطه میانی) دوتایی کنید.

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.
"""
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.
`;    
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.
    `),
}
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 حداکثر از 3600 فایل تصویری در هر درخواست پشتیبانی می کند.
  • محاسبه توکن :
    • Gemini 1.5 Flash و Gemini 1.5 Pro : 258 توکن اگر هر دو ابعاد <= 384 پیکسل باشند. تصاویر بزرگ‌تر کاشی‌کاری شده‌اند (حداقل کاشی 256 پیکسل، حداکثر 768 پیکسل، اندازه آن به 768x768 تغییر کرده است)، که هر کاشی 258 توکن قیمت دارد.
    • فلش Gemini 2.0 : 258 توکن اگر هر دو ابعاد <= 384 پیکسل باشند. تصاویر بزرگتر در کاشی های 768x768 پیکسل کاشی می شوند که هر کدام 258 توکن قیمت دارند.
  • بهترین شیوه ها :
    • مطمئن شوید که تصاویر به درستی چرخانده شده اند.
    • از تصاویر واضح و بدون تار استفاده کنید.
    • هنگام استفاده از یک تصویر واحد با متن، اعلان متن را بعد از قسمت تصویر در آرایه contents قرار دهید.

بعدش چی

این راهنما نحوه آپلود فایل های تصویری و تولید خروجی متن از ورودی های تصویر را نشان می دهد. برای کسب اطلاعات بیشتر به منابع زیر مراجعه کنید:

  • دستورالعمل‌های سیستم : دستورالعمل‌های سیستم به شما امکان می‌دهد رفتار مدل را بر اساس نیازهای خاص و موارد استفاده خود هدایت کنید.
  • درک ویدیو : نحوه کار با ورودی های ویدیو را بیاموزید.
  • Files API : درباره آپلود و مدیریت فایل‌ها برای استفاده با Gemini بیشتر بیاموزید.
  • استراتژی‌های درخواست فایل : Gemini API از درخواست با داده‌های متنی، تصویری، صوتی و ویدیویی پشتیبانی می‌کند که به عنوان درخواست چندوجهی نیز شناخته می‌شود.
  • راهنمایی ایمنی : گاهی اوقات مدل‌های هوش مصنوعی تولیدی خروجی‌های غیرمنتظره مانند خروجی‌های نادرست، جانبدارانه یا توهین‌آمیز تولید می‌کنند. پس پردازش و ارزیابی انسانی برای محدود کردن خطر آسیب ناشی از چنین خروجی‌هایی ضروری است.