پرش به محتوا

ورودی تصویر (Vision)

فرستادن عکس به مدل‌های بینا با نشانی اینترنتی یا base64، چند تصویر در یک پیام، هزینهٔ ورودی تصویری و مدل‌هایی که تصویر می‌خوانند.

بازبینی: ۸ مهر ۱۴۰۵ ۵ دقیقه مطالعه

مدل‌های بینا (Vision) تصویر را هم می‌خوانند: متن رسید و فاکتور، نمودار، عکس محصول، اسکرین‌شات خطا یا دست‌خط. تصویر را کنار متن و در همان پیام کاربر می‌فرستید، با نشانی اینترنتی یا به شکل base64. مدل‌هایی که capabilities.vision آن‌ها در GET /models برابر true است، تصویر می‌پذیرند؛ مثل gpt-4.1-mini، gemini-3.6-flash و openrouter/anthropic/claude-sonnet-4.5.

نمونه#

محتوای پیام به‌جای یک رشته، آرایه‌ای از بخش‌هاست: بخش text و بخش image_url.

curl https://gisoo.pro/api/v1/chat/completions \
  -H "Authorization: Bearer $GISOO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4.1-mini",
    "messages": [{
      "role": "user",
      "content": [
        {"type": "text", "text": "What is written on this receipt? List items and the total."},
        {"type": "image_url", "image_url": {"url": "https://example.com/receipt.jpg"}}
      ]
    }],
    "max_tokens": 500
  }'

نشانی اینترنتی یا base64#

روشکِینکته
نشانی اینترنتیتصویر روی سرور عمومی است.سرور سرویس‌دهندهٔ مدل تصویر را دانلود می‌کند؛ نشانی باید بدون ورود و از بیرون ایران در دسترس باشد. نشانی موقت و امضاشده هم کار می‌کند.
data:image/…;base64,…تصویر روی سرور خودتان است یا عمومی نیست.حجم base64 حدود یک‌سوم از خود فایل بیشتر است و جزو حجم درخواست حساب می‌شود (حداکثر ۲۰ مگابایت).

قالب‌های رایج jpeg، png، webp و gif (بدون حرکت) پذیرفته می‌شوند.

چند تصویر در یک پیام#

بخش‌های image_url را پشت هم بگذارید. مدل همه را با هم می‌بیند و می‌تواند مقایسه کند:

Python مقایسهٔ دو تصویر
reply = client.chat.completions.create(
    model="gpt-4.1-mini",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "Compare these two product photos. Which one is damaged?"},
            {"type": "image_url", "image_url": {"url": "https://example.com/before.jpg"}},
            {"type": "image_url", "image_url": {"url": "https://example.com/after.jpg"}},
        ],
    }],
)

هزینهٔ ورودی تصویری#

هر تصویر به توکن ورودی تبدیل می‌شود و با همان قیمت ورودی مدل حساب می‌شود. تعداد توکن به اندازهٔ تصویر و مدل بستگی دارد و در usage.prompt_tokens پاسخ می‌آید. برای مدل‌های OpenAI، "detail": "low" تصویر را با توکن کمتری می‌خواند؛ برای خواندن متن ریز، "high" بهتر است.

عکس گوشی معمولاً خیلی بزرگ‌تر از چیزی است که مدل لازم دارد. پیش از فرستادن کوچکش کنید:

Python کوچک کردن تصویر
# pip install pillow — shrink big photos before sending: fewer tokens, smaller request
from io import BytesIO
from PIL import Image

def to_data_url(path: str, max_side: int = 1536) -> str:
    img = Image.open(path).convert("RGB")
    img.thumbnail((max_side, max_side))
    buf = BytesIO()
    img.save(buf, format="JPEG", quality=85)
    return "data:image/jpeg;base64," + base64.b64encode(buf.getvalue()).decode()
متن فارسی در تصویر

برای خواندن متن فارسی (رسید، فرم، تابلو)، تصویر واضح و صاف بفرستید و در پرسش بگویید خروجی را به فارسی و با همان ترتیب بنویسد. اگر خروجی را برای پردازش خودکار لازم دارید، آن را با خروجی ساختاریافته به JSON بگیرید.

ساختن تصویر فرق دارد

این صفحه دربارهٔ خواندن تصویر است. برای ساختن تصویر از متن، ساخت تصویر را ببینید.

پاسخ پرسشتان را پیدا نکردید؟

شناسهٔ درخواست (هدر X-Request-Id) را با پرسشتان در تیکت بفرستید تا دقیق بررسی کنیم.

تیکت پشتیبانی