3-qism · Kengaytirilgan imkoniyatlar·08-bob
Vision: model rasmni qanday ko'radi
Rasmni so'rovga qo'shish, undan ma'lumot ajratib olish, sifat/narx savdo-sotig'i va bu qanday ishlashining amaliy chegaralari.
Zamonaviy modellar nafaqat matnni, balki rasmni ham "o'qiy" oladi — aniqrog'i, rasmni tushuna oladigan tarzda qayta ishlaydi. Bu chek, hujjat, skrinshot yoki mahsulot rasmini tahlil qiluvchi ilovalar uchun eshik ochadi.
1. Rasmni so'rovga qanday qo'shish#
Ikki usul bor: internetdagi rasm havolasi (URL) yoki o'z kompyuteringizdagi fayl (base64 formatida kodlangan holda).
URL orqali:
response = client.responses.create(
model="gpt-4o-mini",
input=[
{
"role": "user",
"content": [
{"type": "input_text", "text": "Bu rasmda nima tasvirlangan?"},
{"type": "input_image", "image_url": "https://example.com/rasm.jpg"},
],
}
],
)
print(response.output_text)Lokal fayl orqali (base64 kodlash orqali):
import base64
def rasmni_kodlash(fayl_yoli):
with open(fayl_yoli, "rb") as f:
return base64.b64encode(f.read()).decode("utf-8")
kodlangan = rasmni_kodlash("chek.jpg")
response = client.responses.create(
model="gpt-4o-mini",
input=[
{
"role": "user",
"content": [
{"type": "input_text", "text": "Bu chekdagi jami summani top."},
{"type": "input_image", "image_url": f"data:image/jpeg;base64,{kodlangan}"},
],
}
],
)
print(response.output_text)2. Sifat darajasi — detail parametri#
Rasmni qay darajada "diqqat bilan" tahlil qilish kerakligini ham sozlash mumkin — bu narx va aniqlik o'rtasidagi savdo-sotiq:
{"type": "input_image", "image_url": "...", "detail": "low"} # tez va arzon, umumiy g'oya uchun
{"type": "input_image", "image_url": "...", "detail": "high"} # batafsil, mayda matn/tafsilot uchun
{"type": "input_image", "image_url": "...", "detail": "auto"} # model o'zi hal qiladi (standart)detail | Qachon ishlatish |
|---|---|
low | Rasmning umumiy mazmuni yetarli (masalan, "bu qanday mahsulot turi?") |
high | Mayda matn, jadval, murakkab diagramma o'qilishi kerak (masalan, chek, hisob-faktura) |
auto | Aniq bilmasangiz — model o'zi rasm murakkabligiga qarab hal qiladi |
3. Amaliy misol: chekdan ma'lumot ajratib olish#
Vision'ni Structured Outputs bilan birlashtirsangiz, rasmdan tuzilgan ma'lumot olish mumkin — masalan, xarajatlarni avtomatik hisobga olish uchun:
from pydantic import BaseModel
class ChekMalumoti(BaseModel):
dokon_nomi: str
sana: str
jami_summa: float
valyuta: str
response = client.responses.parse(
model="gpt-4o-mini",
input=[
{
"role": "user",
"content": [
{"type": "input_text", "text": "Bu chekdan ma'lumotlarni ajratib ol."},
{"type": "input_image", "image_url": f"data:image/jpeg;base64,{kodlangan}", "detail": "high"},
],
}
],
text_format=ChekMalumoti,
)
chek = response.output_parsed
print(f"{chek.dokon_nomi} — {chek.jami_summa} {chek.valyuta}")Diqqat qiling: mayda matnli hujjat bo'lgani uchun bu yerda ataylab
detail="high" ishlatildi.
4. Bir necha rasm, bitta so'rov#
Bitta xabarga bir nechta rasm qo'shish mumkin — masalan, ikkita mahsulotni solishtirish uchun:
content = [
{"type": "input_text", "text": "Bu ikki mahsulot orasidagi farqni tavsiflab ber."},
{"type": "input_image", "image_url": f"data:image/jpeg;base64,{rasmni_kodlash('mahsulot1.jpg')}"},
{"type": "input_image", "image_url": f"data:image/jpeg;base64,{rasmni_kodlash('mahsulot2.jpg')}"},
]
response = client.responses.create(
model="gpt-4o-mini",
input=[{"role": "user", "content": content}],
)5. Ko'p sahifali hujjatlarni qayta ishlash#
PDF yoki ko'p sahifali hujjatni tahlil qilish kerak bo'lsa, odatda uni
avval sahifama-sahifa rasmga aylantirasiz (masalan, pdf2image kabi
kutubxona bilan), keyin har bir sahifani alohida rasm sifatida yoki
bir nechtasini birga yuborasiz:
from pdf2image import convert_from_path
sahifalar = convert_from_path("shartnoma.pdf") # har bir sahifa — alohida rasm obyekti
content = [{"type": "input_text", "text": "Bu shartnomadagi asosiy shartlarni ro'yxatlab ber."}]
for i, sahifa in enumerate(sahifalar[:5]): # birinchi 5 sahifa bilan cheklaymiz
sahifa.save(f"sahifa_{i}.png")
content.append({
"type": "input_image",
"image_url": f"data:image/png;base64,{rasmni_kodlash(f'sahifa_{i}.png')}",
})
response = client.responses.create(model="gpt-4o-mini", input=[{"role": "user", "content": content}])6. Amaliy chegaralar — modelning "ko'rishi" mukammal emas#
- Aniq, sifatli rasmda umumiy mazmunni tasvirlash
- Chek, blank kabi tuzilgan hujjatlardan ma'lumot o'qish
- Diagramma yoki grafikning umumiy tendensiyasini tushuntirish
- Rasmdagi matnni o'qish (OCR'ga o'xshash vazifa)
- Rasmdagi aniq raqamlarni piksel darajasida hisoblash (masalan, mayda jadvaldagi barcha raqamlarni xatosiz o'qish)
- Juda past sifatli yoki qiyshiq/buzilgan rasmlar
- Rasmdagi obyektlarning aniq koordinatalarini (piksel darajasida) talab qilish
- Tibbiy tashxis kabi yuqori aniqlik talab qiladigan qarorlar
Vision — kuchli, lekin ehtimoliy vosita. Muhim qarorlar (moliyaviy, tibbiy, huquqiy) uchun natijani har doim odam tekshiruvidan o'tkazing, ayniqsa aniq raqamlar bilan ishlayotganda.
7. Narx haqida eslatma#
Rasm ham token sifatida hisoblanadi — rasm qanchalik katta/batafsil
bo'lsa (va detail: "high" bo'lsa), shunchalik ko'p token sarflanadi.
Katta rasmlarni yuborishdan oldin kerakli o'lchamgacha kichraytirish
(masalan, 1024px kenglikkacha) — xarajatni sezilarli kamaytirishi
mumkin, natijaga deyarli ta'sir qilmasdan, ayniqsa detail: "low" bilan
ishlaganda.
8. Nima noto'g'ri ketishi mumkin#
| Belgi | Sabab | Yechim |
|---|---|---|
| Rasm "ko'rilmadi" xatosi | Base64 formatida data:image/...;base64, prefiksi noto'g'ri yoki tushib qolgan | Prefiksni fayl turiga (image/jpeg, image/png) mos qo'shing |
| Mayda matn noto'g'ri o'qiladi | detail: "low" bilan yuborilgan yoki rasm sifati past | detail: "high" ga o'ting, rasm sifatini oshiring |
| Xarajat kutilganidan yuqori | Katta rasmlar, ko'p sahifa detail: "high" bilan yuborilmoqda | Rasmni kichraytiring, faqat kerakli sahifalarni yuboring |
| Rasm yuklanmadi xatosi | URL ommaviy emas yoki fayl hajmi chegaradan katta | Base64 usuliga o'ting yoki faylni kichraytiring |
Ikki mahsulotni solishtiruvchi vosita yozing
Ikkita mahsulot rasmini (masalan, ikkita telefon yoki ikkita kitob muqovasi) tayyorlang. Modeldan ikkalasini solishtirib, tuzilgan formatda (Pydantic sxema bilan) qaysi biri "afzalroq" ekanini sababini ko'rsatgan holda javob berishini so'rang.
Maslahatni ko'rsatish
Ikkita rasmni base64'ga kodlab, bitta so'rovda yuboring. Modeldan Structured Output orqali tavsiya (1-mahsulot yoki 2-mahsulot) va sabab maydonlarini o'z ichiga olgan Pydantic sxema bilan javob so'rang.