aidoc.uz

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)
detailQachon ishlatish
lowRasmning umumiy mazmuni yetarli (masalan, "bu qanday mahsulot turi?")
highMayda matn, jadval, murakkab diagramma o'qilishi kerak (masalan, chek, hisob-faktura)
autoAniq 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#

Vision yaxshi ishlaydigan holatlar
  • 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)
Ehtiyot bo'lish kerak bo'lgan holatlar
  • 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#

BelgiSababYechim
Rasm "ko'rilmadi" xatosiBase64 formatida data:image/...;base64, prefiksi noto'g'ri yoki tushib qolganPrefiksni fayl turiga (image/jpeg, image/png) mos qo'shing
Mayda matn noto'g'ri o'qiladidetail: "low" bilan yuborilgan yoki rasm sifati pastdetail: "high" ga o'ting, rasm sifatini oshiring
Xarajat kutilganidan yuqoriKatta rasmlar, ko'p sahifa detail: "high" bilan yuborilmoqdaRasmni kichraytiring, faqat kerakli sahifalarni yuboring
Rasm yuklanmadi xatosiURL ommaviy emas yoki fayl hajmi chegaradan kattaBase64 usuliga o'ting yoki faylni kichraytiring
Amaliy topshiriq

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.