مدلهای بینا (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
}'
import base64
with open("receipt.jpg", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
reply = client.chat.completions.create(
model="gpt-4.1-mini",
max_tokens=500,
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "What is written on this receipt? List items and the total."},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}", "detail": "high"}},
],
}],
)
print(reply.choices[0].message.content)
import fs from "node:fs";
const b64 = fs.readFileSync("receipt.jpg").toString("base64");
const reply = await client.chat.completions.create({
model: "gpt-4.1-mini",
max_tokens: 500,
messages: [{
role: "user",
content: [
{ type: "text", text: "What is written on this receipt? List items and the total." },
{ type: "image_url", image_url: { url: "data:image/jpeg;base64," + b64 } },
],
}],
});
console.log(reply.choices[0].message.content);
<?php
$b64 = base64_encode(file_get_contents('receipt.jpg'));
$reply = $client->chat()->create([
'model' => 'gpt-4.1-mini',
'max_tokens' => 500,
'messages' => [[
'role' => 'user',
'content' => [
['type' => 'text', 'text' => 'What is written on this receipt? List items and the total.'],
['type' => 'image_url', 'image_url' => ['url' => 'data:image/jpeg;base64,'.$b64]],
],
]],
]);
echo $reply->choices[0]->message->content;
نشانی اینترنتی یا base64#
| روش | کِی | نکته |
|---|---|---|
| نشانی اینترنتی | تصویر روی سرور عمومی است. | سرور سرویسدهندهٔ مدل تصویر را دانلود میکند؛ نشانی باید بدون ورود و از بیرون ایران در دسترس باشد. نشانی موقت و امضاشده هم کار میکند. |
data:image/…;base64,… | تصویر روی سرور خودتان است یا عمومی نیست. | حجم base64 حدود یکسوم از خود فایل بیشتر است و جزو حجم درخواست حساب میشود (حداکثر ۲۰ مگابایت). |
قالبهای رایج jpeg، png، webp و gif (بدون حرکت) پذیرفته میشوند.
چند تصویر در یک پیام#
بخشهای image_url را پشت هم بگذارید. مدل همه را با هم میبیند و میتواند مقایسه کند:
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" بهتر است.
عکس گوشی معمولاً خیلی بزرگتر از چیزی است که مدل لازم دارد. پیش از فرستادن کوچکش کنید:
# 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) را با پرسشتان در تیکت بفرستید تا دقیق بررسی کنیم.