Lesson 135 — Advanced

Vision: Documents, Charts & Visual RAG

Duniya bhar ke business documents PDF mein band hain — kuch clean digital, kuch scanned photographs. Is lesson mein hum text-layer aur scan ka farq, OCR vs native vision reading, layout aur tables ki mushkilein, schema-first field extraction, page-region grounding, aur visual RAG — sab ek practical pipeline ke saath dekhenge. Ye L4 ki RAG knowledge ka visual extension hai.

⏱ 30 min• Advanced• Vision: Capabilities & Failure Modes

Text-layer PDF vs scan

Kya hai?

Digital PDF apne saath ek text layer carry karta hai — characters selectable aur searchable hain. Scan ek photograph hai: har character pixels se recover karna padta hai, ya toh OCR se, ya vision model se.

Kab kaam aata hai?

Jab document ingestion karo — invoices, contracts, reports, purane faxes. Pehla decision yahi hai: is document ka apna text hai ya pixels hi hain?

Kahan milta hai?

Ingestion pipeline ke routing step mein — har PDF pehle ek quick check se guzarta hai, phir text ya vision path chunta hai.

from pypdf import PdfReader

def route(pdf_path):
    r = PdfReader(pdf_path)
    first = r.pages[0].extract_text() or ""
    if len(first.strip()) < 30:          # text layer lagbhag khali
        return "scan", len(r.pages)      # OCR ya vision path
    return "digital", len(r.pages)      # seedha text extraction

kind, pages = route("invoice.pdf")
# har page ka route alag bhi ho sakta hai — mixed documents aam hain
Pehle check, phir pipeline: Text-layer wale PDF ko OCR mat karao — beech ki quality loss hoti hai aur cost bhi. Aur scan ko text-extraction se mat guzara — output khali aayega. Routing hi pehla safeguard hai.

OCR vs native vision reading

Decision rule: clean digital text ke liye text pipeline hi kaafi hai; scans ke liye vision path, par har page ko blind mat bhejo. Pehle ek sample page pe manually padho ki extraction kaisa nikla — reading order, tables, special characters. Batch shuru karne se pehle ye checkpoint compulsory hai.

Layout hi information hai: Ek invoice mein "Total" ka label aur uski value do alag positions pe hain; unka spatial rishta hi relationship hai. Text ko flat karke bhejna wahi rishta mita deta hai — isliye layout-heavy docs ke liye vision reading justify hoti hai.

Tables, forms aur charts

# Table extraction — merged cells, multi-page rows sab dhyan mein
# Pehle: schema define karo (free-form table dump kabhi nahi)
TABLE_SCHEMA = {
    "headers": ["item", "qty", "unit_price", "total"],
    "rows": [[str, int, float, float]],
    "continues_on_next_page": bool,
}

# Charts: exact values chahiye toh underlying data maango, model se guess nahi
# Model axes, labels aur legend padhta hai — number pixel se naapta nahi
Chart sawaal: Q: "Chart se exact value padho" — A: risky. Model ne axis ka grid estimate kiya, value guess kar di. Reliable path: chart ka data source (jahan se chart bana) wahi extract karo, chart ko sirf gist ke liye use karo.

Schema before prompt — extract & validate

SCHEMA = {
    "invoice_no": {"type": "string",   "required": True},
    "issue_date": {"type": "date",     "required": True},
    "total":      {"type": "number",   "required": True},
    "currency":   {"type": "string",   "required": True},
    "page":       {"type": "integer",  "required": True},   # grounding
}

def extract_and_validate(page_img):
    fields = model.ask(page_img, "schema ke mutabiq fields nikalo", schema=SCHEMA)
    problems = validate(fields, SCHEMA)        # type, range, date format, required
    problems += sanity(fields)                 # subtotal + tax == total?
    if problems:
        review_queue.append((page_img, fields, problems))   # DB mein mat daalo
    return fields if not problems else None
Failure modes yaad rakho: Invented values in blank cells, page break pe merged rows, currency/unit confusion (1,240.50 vs 1.240,50), misread handwriting — har ek ka safeguard hai: schema validation + sanity checks + grounded review.

Pages & regions as retrieval units

# Visual RAG: retrieval unit = page image (ya page ka region)
# Embedding kaise? — multimodal embedding model se: image aur text dono
# usi vector space mein aate hain (L12.9 mein detail)

def index_document(pdf):
    for i, page in enumerate(pdf.pages):
        text = extract_text_layer(page) or ocr(page)
        vector = multimodal_embed(page.image(), text=text)   # hybrid signal
        store(vector, {"doc": pdf.name, "page": i + 1, "image": page.image()})

# Query: user ka sawaal text hai, top-k mein page images aati hain,
# phir vision model un pages se jawab deta hai — citation ke saath

Practical combo: retrieval ke liye text embedding se search karo (sasta, tez), aur jo pages mile unka region crop karke vision model se padhwao. Poore corpus ko page-images mein re-embed karne ki zarurat tabhi hai jab layout retrieval ke liye hi zaroori ho.

Cost vs accuracy: Visual RAG ka asli bill query time pe aata hai — har hit page image = zyada tokens = zyada latency aur price. Isliye: text-first retrieval, visual reading sirf top-k pages pe, aur usme bhi crop. Aise pipeline mein accuracy badhti hai, bill controlled rehta hai.

Exercise

Question: Digital PDF ke andar searchable text wali layer ko kya kehte hain?

Question: Free-form summary ke bajaye fields, types aur required list pehle define karne ko kya kehte hain?

Question: Extracted field ke saath page number ya region jodna, jisse verify ho sake — kya kehlata hai?

Question: Chart se exact value chahiye toh model se guess karwane ke bajaye kya maango?

Question: Visual RAG mein retrieval unit ek chunk of text hai ya ek page image?

Common mistakes

Desi example: Property ke documents wala broker

Broker ke paas do tarah ke papers hain — printout (text layer) aur photostat (scan). Printout seedha padh leta hai; photostat ke liye aankh lagani padegi. Aur jab tumne poocha "registry ka page number kya hai" toh wo page kholke dikhaata hai — wahi grounding hai:

text
printout  -> seedha text extraction (sasta, tez)
photostat -> vision reading (mehnga, par layout bachta hai)

har jawab ke saath: "dekh lo, yehan likha hai" (page + region cite)
Interview angle — yahan se sawaal aate hain
  • Q: Text-layer PDF aur scan ka farq? — Ek apna selectable text carry karta hai; scan photograph hai, har char pixels se recover karna padta hai (OCR/vision).
  • Q: OCR aur native vision reading trade-off? — OCR sasta-tez par layout lossy; vision layout samajhta hai par page image tokens zyada khaati hai.
  • Q: Schema-first extraction kyun? — Fields/types/required define karne se validation, typing aur review routing mumkin hota hai; free-form se kabhi nahi.
  • Q: Visual RAG ka cost handle kaise karo? — Text-first search, sirf top-k pages pe visual reading, aur usme bhi crop. Citation mandatory.
Lesson complete?

Document pipeline clear — routing, schema-first extraction, grounding aur visual RAG ka cost-accuracy trade-off sab aa gaya. Agla lesson — Vision: Image & Video Generation — mein direction ulta karke dekhenge: image kaise banti hai.

Popular courses: Data Science Course in Lucknow · AI Course in Lucknow · Python Course in Lucknow · Power BI Course · Data Analytics Course