मुख्य सामग्री पर जाएँ

DeepSeek-OCR: 7 व्यावहारिक उदाहरणों के साथ एक हैंड्स-ऑन गाइड

DeepSeek-OCR, दस्तावेज़ समझ के लिए एक विज़न-लैंग्वेज मॉडल। चार्ट, गणित, मीम्स और हस्तलिखित नोट्स पर 7 वास्तविक OCR परीक्षण देखें।
· 13 मि॰ पढ़ें

AI के साथ खोजें

DeepSeek-OCR एक नया बड़ा विज़न-लैंग्वेज मॉडल है जो संरचना समझता है, तालिकाएँ पार्स करता है, चार्ट निकालता है, और गणित, मीम्स व बहुभाषी पाठ तक संभाल सकता है।

इस गाइड में, मैंने DeepSeek-OCR को एंड-टू-एंड वास्तविक कार्यों पर परखा—हस्तलिखित नोट्स से लेकर जटिल चार्ट, मीम्स और बहुभाषी दस्तावेज़ों तक। हम इन पर चलेंगे:

  • चार्ट और टेबल एक्सट्रैक्शन
  • रसायन विज्ञान और सूत्र पार्सिंग
  • हस्तलिखित पाठ की पहचान
  • समीकरण और Markdown आउटपुट
  • मीम्स और सोशल इमेजेज के लिए OCR
  • बहुभाषी दस्तावेज़ समझ

अंत तक, आप देखेंगे कि DeepSeek-OCR कहाँ शानदार है और कहाँ अभी भी जूझता है। यदि आप ओपन-सोर्स OCR तलाश रहे हैं, तो पाइपलाइन चुनने से पहले आप ये प्रयोग देखना चाहेंगे। मैं हमारा DeepSeek V3.2-Speciale ट्यूटोरियल भी सुझाता हूँ।

DeepSeek-OCR क्या है?

DeepSeek-OCR एक 3B पैरामीटर का ओपन विज़न-लैंग्वेज मॉडल है जो दस्तावेज़ समझ के लिए प्रशिक्षित है। यह बड़े 2D विज़ुअल संदर्भों को संपीडित विज़न टोकन्स में मैप करके संदर्भ ऑप्टिकल कंप्रेशन का लाभ उठाता है, जिससे यह बड़े दस्तावेज़ों को कुशलतापूर्वक प्रोसेस कर पाता है।

कुछ प्रमुख विशेषताएँ:

  • बड़े स्कैन किए गए दस्तावेज़, रसीदें, इनवॉइस, शोध-पत्र आदि पढ़ना।
  • तालिकाएँ, चार्ट और ज्यामितीय आकृतियाँ पार्स करना।
  • बहुभाषी और हस्तलिखित पाठ संभालना।

DeepSeek-OCR कैसे काम करता है?

DeepSeek-OCR चार्ट और टेबल से लेकर हस्तलेखन, गणित और बहुभाषी पाठ तक, विभिन्न प्रकार की दस्तावेज़ छवियों को संभालने के लिए डिज़ाइन किया गया है। छवियों और पाठ को अलग-अलग डोमेन की तरह ट्रीट करने के बजाय, यह लंबे पाठ के लिए विज़ुअल मोडालिटी को एक कंप्रेशन इंजन की तरह उपयोग करता है, जिससे बड़े भाषा मॉडल (LLMs) बहुत कम टोकन्स में कहीं अधिक जानकारी प्रोसेस कर सकें। आइए इसकी संरचना और विशिष्टताओं को समझें:

एंड-टू-एंड पाइपलाइन: एन्कोडर से डिकोडर

ऊँचे स्तर पर, DeepSeek-OCR में दो मुख्य घटक हैं:

  • DeepEncoder (विज़न टोकनाइज़र और कंप्रेसर)
  • DeepSeek-3B MoE डिकोडर (टेक्स्ट जेनरेटर)

image2.png

स्रोत: DeepSeek-OCR: Contexts Optical Compression

1. इनपुट इमेज प्रीप्रोसेसिंग: पाइपलाइन किसी दस्तावेज़ छवि (जैसे स्कैन किया गया कॉन्ट्रैक्ट, हस्तलिखित नोट, वित्तीय तालिका आदि) से शुरू होती है। इस छवि को 16x16 पिक्सेल पैच के ग्रिड में बाँटा जाता है, जो मॉडल के समझने के लिए सबसे छोटे विज़ुअल शब्द हैं।

2. DeepEncoder: DeepEncoder एक बहु-चरणीय विज़न इंजन है जिसे रेज़ोल्यूशन, मेमोरी उपयोग और सूचना संपीड़न के बीच संतुलन के लिए बनाया गया है। यह तीन मुख्य चरणों में काम करता है:

  • SAM (Segment Anything Model, 80M पैरामीटर्स): यह छोटे, ओवरलैपिंग पैच का विश्लेषण करके लोकर अटेंशन संभालता है ताकि सूक्ष्म विवरण और लेआउट कैप्चर हो सकें।
  • कन्वोल्यूशनल कंप्रेसर (16x डाउनसैंपल): यह स्थानीय फीचर्स को संपीड़ित कर विज़न टोकन्स की संख्या को भारी घटा देता है, ताकि कम टोकन्स महंगे ग्लोबल अटेंशन चरण तक पहुँचें।
  • CLIP ViT: यह एक विज़न ट्रांसफॉर्मर (300M पैरामीटर्स) है जो दस्तावेज़ की समग्र संरचना और संदर्भ समझने के लिए ग्लोबल अटेंशन लागू करता है और संपीड़ित टोकन्स के लिए एम्बेडिंग लेयर की तरह कार्य करता है।

3. विज़न टोकन्स से टेक्स्ट: MoE डिकोडर विज़न टोकन्स को DeepSeek-3B MoE (Mixture-of-Experts) डिकोडर में फीड करके संपीड़ित करता है और हर सैंपल पर केवल सबसे प्रासंगिक एक्सपर्ट्स को सक्रिय कर कुशल इन्फरेंस करता है, जिससे सटीकता से समझौता किए बिना compute लागत घटती है।

4. प्रॉम्प्ट-चालित लचीलापन: सिस्टम आउटपुट फ़ॉर्मैट (Markdown, HTML टेबल्स, SMILES केमिकल फॉर्मूले, बहुभाषी लेआउट आदि) को केवल प्रॉम्प्ट बदलकर गाइड करता है, ठीक LLMs की तरह।

DeepSeek-OCR दिखाता है कि केवल एक दस्तावेज़ छवि को plain text की तुलना में 1/10 तक टोकन्स में “संपीड़ित” किया जा सकता है, वह भी सटीकता में उल्लेखनीय कमी के बिना। 

DeepSeek OCR डेमो: Gradio एप्लिकेशन

इस सेक्शन में, हम DeepSeek-OCR के लिए एक संपूर्ण Gradio वेब एप्लिकेशन सेट करेंगे ताकि आप सीधे अपने ब्राउज़र या Google Colab में OCR चला सकें। कुछ ही चरणों में, आप चार्ट, टेबल, हस्तलिखित नोट्स, मीम्स, गणित, बहुभाषी पाठ की छवियाँ अपलोड कर सकते हैं और बाउंडिंग बॉक्स सहित संरचित आउटपुट प्राप्त कर सकते हैं।

चरण 1: पूर्व-आवश्यकताएँ

शुरू करने से पहले, सुनिश्चित करें कि निम्नलिखित पूर्व-आवश्यकताएँ पूरी हैं:

!pip install -q "transformers==4.46.3" "tokenizers==0.20.3" einops addict easydict pillow gradio

ऊपर दिया गया कमांड DeepSeek-OCR और Gradio के लिए सभी आवश्यक Python लाइब्रेरीज़ इंस्टॉल करता है, जिनमें transformers, tokenizers, image processing (pillow) और Gradio UI टूलकिट के नवीनतम संगत संस्करण शामिल हैं। 

नोट: यह कोड Google Colab पर High RAM वाले L4 GPU पर चलता है।

चरण 2: इम्पोर्ट्स

अब सभी डिपेंडेंसीज़ इंस्टॉल हो चुकी हैं। अगला कदम, हम अपने इम्पोर्ट सेट करते हैं।

import os, time, torch, gradio as gr
from PIL import Image
from transformers import AutoModel, AutoTokenizer
from datetime import datetime
import random
import string

हम फ़ाइल I/O, मॉडल इन्फरेंस (torch), UI निर्माण (gradio), इमेज हैंडलिंग (PIL) और फ़ाइल पथ व रैंडम रन IDs प्रबंधन के लिए आवश्यक Python मॉड्यूल इम्पोर्ट करते हैं।

चरण 3: मॉडल लोड करना

एक बार सभी आवश्यक लाइब्रेरीज़ इंस्टॉल हो जाएँ, आप Hugging Face से DeepSeek-OCR मॉडल लोड करने के लिए तैयार हैं। हालाँकि, कुछ मॉडलों तक पहुँच के लिए Hugging Face एक्सेस टोकन के साथ प्रमाणीकरण आवश्यक है।

Google Colab में अपना Hugging Face एक्सेस टोकन सेट करने का तरीका इस प्रकार है:

  • Colab में सीक्रेट जोड़ें: अपने Google Colab नोटबुक में बाएँ साइडबार में चाबी के आकार के आइकन (“Secrets”) पर क्लिक करें और “Add a Secret” चुनें।
  • Hugging Face पर टोकन बनाएँ: अपने Hugging Face खाते में लॉगिन करें, अकाउंट सेटिंग्स में जाएँ और “Access Tokens” सेक्शन खोजें। “Create new token” पर क्लिक करें, उपयुक्त भूमिका (आम तौर पर “Read”) चुनें और अपना टोकन जनरेट करें।
  • टोकन कॉपी-पेस्ट करें: अपने नए एक्सेस टोकन को कॉपी करें और Colab के “Add a Secret” फ़ील्ड में पेस्ट करें। इससे आपका नोटबुक DeepSeek-OCR मॉडल तक सुरक्षित रूप से पहुँच सकता है।

अब आप प्रमाणीकरण करने और मॉडल लोड करने के लिए तैयार हैं!

model_id = "deepseek-ai/DeepSeek-OCR"
tok = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
if tok.pad_token is None and tok.eos_token is not None:
    tok.pad_token = tok.eos_token
model = AutoModel.from_pretrained(
    model_id,
    trust_remote_code=True,
    use_safetensors=True,
    attn_implementation="eager"
).to(dtype=torch.bfloat16, device="cuda").eval()

ऊपर दिया गया कोड Hugging Face से आधिकारिक DeepSeek-OCR मॉडल और टोकनाइज़र लोड करता है। यह पैड टोकन सेट करके टोकनाइज़र संगतता सुनिश्चित करता है और मॉडल को bfloat16 फ़ॉर्मैट में लोड करता है।

चरण 4: हेल्पर फ़ंक्शन

अब मॉडल तैयार है, अगला कदम है प्रत्येक मॉडल आउटपुट के लिए एक नया डायरेक्टरी बनाना ताकि हर OCR रन व्यवस्थित रहे। इससे एक्सट्रैक्ट किया गया टेक्स्ट, बाउंडिंग बॉक्स विज़ुअलाइज़ेशन और लॉग फ़ाइलें सहेजी जाती हैं और पिछले परिणामों पर ओवरराइट नहीं होतीं।

def new_run_dir(base="/content/runs"):
    os.makedirs(base, exist_ok=True)
    ts = datetime.now().strftime("%Y%m%d-%H%M%S")
    rid = ''.join(random.choices(string.ascii_lowercase + string.digits, k=5))
    path = os.path.join(base, f"run_{ts}_{rid}")
    os.makedirs(path)
    return path

यह new_run_dir फ़ंक्शन वर्तमान टाइमस्टैम्प और एक रैंडम प्रत्यय पर आधारित प्रत्येक इमेज प्रोसेसिंग रन के लिए यूनिक आउटपुट डायरेक्टरी बनाता है। इससे अलग-अलग रनों के परिणाम ओवरराइट नहीं होते और निरीक्षण या डिबगिंग के लिए आउटपुट फ़ाइलें व्यवस्थित रहती हैं।

चरण 5: OCR हैंडलर

यह चरण DeepSeek-OCR Gradio ऐप का मुख्य इंजन है। यह अपलोड की गई इमेज को सही फ़ॉर्मैट में बदलने और फ़ाइल बहुत बड़ी होने पर उसे रिसाइज़ करने से शुरू करता है। हर बार जब हम मॉडल चलाते हैं, यह सभी आउटपुट एक नए फ़ोल्डर में सहेजता है।

def gr_ocr(image, mode, custom_prompt, base_size, image_size, crop_mode):
    img = image.convert("RGB")
    if max(img.size) > 2000:
        s = 2000 / max(img.size)
        img = img.resize((int(img.width*s), int(img.height*s)), Image.LANCZOS)
    run_dir = new_run_dir()
    img_path_proc = os.path.join(run_dir, "input.png")
    img.save(img_path_proc, optimize=True)
    if mode == "Custom Prompt" and custom_prompt.strip():
        prompt = custom_prompt.strip()
    else:
        prompt = DEMO_MODES[mode]["prompt"]
    t0 = time.time()
    try:
        with torch.inference_mode():
            _ = model.infer(
                tok,
                prompt=prompt,
                image_file=img_path_proc,
                output_path=run_dir,
                base_size=base_size,
                image_size=image_size,
                crop_mode=crop_mode,
                save_results=True,
                test_compress=True
            )
    except ZeroDivisionError:
        print(" [Patched] Division by zero in compression ratio (valid_img_tokens==0). Ignored.")
    dt = time.time() - t0
    result_file = os.path.join(run_dir, "result.mmd")
    if not os.path.exists(result_file):
        result_file = os.path.join(run_dir, "result.txt")
    result = "[No text extracted]"
    if os.path.exists(result_file):
        with open(result_file, "r", encoding="utf-8") as f:
            result = f.read().strip() or "[No text extracted]"
    boxed_path = os.path.join(run_dir, "result_with_boxes.jpg")
    boxed_img = Image.open(boxed_path) if os.path.exists(boxed_path) else None
    stats = f"""
**{dt:.1f}s** | Image: {img.size[0]}×{img.size[1]} px  
**Output directory:** {run_dir}  
"""
    return result, stats, boxed_img

gr_ocr फ़ंक्शन DeepSeek-OCR के Gradio एप्लिकेशन के लिए प्रीप्रोसेसिंग, इन्फरेंस, और पोस्ट-प्रोसेसिंग लॉजिक को समेटता है। यह निम्न करता है:

  • इमेज मानकीकरण और प्रीप्रोसेसिंग: फ़ंक्शन पहले किसी भी इनपुट इमेज को RGB कलर स्पेस में बदलता है ताकि मॉडल संगतता सुनिश्चित हो। यदि इमेज का अधिकतम आयाम (2000px) से बड़ा है, तो GPU मेमोरी ओवरफ़्लो रोकने हेतु उसे आनुपातिक रूप से रिसाइज़ किया जाता है।
  • रन डायरेक्टरी प्रबंधन: प्रत्येक OCR रन एक यूनिक डायरेक्टरी में आइसोलेटेड होता है। यह बैच प्रोसेसिंग, डिबगिंग और पुनरुत्पादन के लिए आवश्यक ट्रेसएबिलिटी सक्षम करता है।
  • कुशल मॉडल इन्फरेंस: मॉडल को torch.inference_mode() संदर्भ में बुलाया जाता है ताकि ग्रेडिएंट गणनाएँ न हों, मेमोरी उपयोग घटे और इन्फरेंस गति बढ़े।
  • एज केस और त्रुटि हैंडलिंग: टोकन कंप्रेशन में विरल एज केस के दौरान होने वाले ZeroDivisionError जैसी अपवाद स्थितियों को उपयोगकर्ता अनुभव बाधित किए बिना संभाला जाता है।
  • परिणाम एकत्रण और विज़ुअलाइज़ेशन: इन्फरेंस के बाद, फ़ंक्शन एक्सट्रैक्टेड टेक्स्ट आउटपुट लोड करता है और जाँच के लिए डिटेक्टेड बाउंडिंग बॉक्स को हाइलाइट करता हुआ विज़ुअल ओवरले इमेज लोड करता है।
  • UI इंटीग्रेशन: अंततः फ़ंक्शन OCR आउटपुट, प्रोसेसिंग आँकड़े और एनोटेटेड इमेज का ट्यूपल लौटाता है, जिससे Gradio इंटरफेस में सहज एकीकरण हो।

आइए अब अपने इंटरैक्टिव UI पर चलते हैं और DeepSeek-OCR को एक्शन में देखते हैं।

चरण 6: Gradio UI

अंतिम चरण में, हम DeepSeek-OCR के लिए एक इंटरैक्टिव Gradio इंटरफ़ेस परिभाषित करते हैं, जिससे उपयोगकर्ता आसानी से इमेज अपलोड कर सकें, अलग-अलग OCR एक्सट्रैक्शन मोड चुन सकें, उन्नत सेटिंग्स समायोजित कर सकें और एक ही वेब-आधारित UI में आउटपुट देख सकें।

DEMO_MODES = {
    "Document ➔ Markdown": {
        "prompt": "<image>\n<|grounding|>Convert the document to markdown.",
        "desc": "Extracts full document text as Markdown, preserving structure (headings, tables, lists, etc.).",
        "base_size": 1024, "image_size": 640, "crop_mode": False
    },
    "Chart Deep Parsing": {
        "prompt": "<image>\nParse all charts and tables. Extract data as HTML tables.",
        "desc": "Extracts tabular/chart data into HTML tables.",
        "base_size": 1024, "image_size": 640, "crop_mode": False
    },
    "Chemical Formula Recognition": {
        "prompt": "<image>\nExtract all chemical formulas and SMILES.",
        "desc": "Extracts chemical structures and formulae.",
        "base_size": 1024, "image_size": 768, "crop_mode": False
    },
    "Geometry Parsing": {
        "prompt": "<image>\nExtract all geometric figures and their measurements.",
        "desc": "Parses diagrams and extracts geometric data.",
        "base_size": 1024, "image_size": 768, "crop_mode": False
    },
    "Plain Text Extraction": {
        "prompt": "<image>\nFree OCR.",
        "desc": "Fast, plain text OCR of the image.",
        "base_size": 768, "image_size": 512, "crop_mode": False
    },
    "Multilingual Document": {
        "prompt": "<image>\n<|grounding|>Extract text. Preserve all languages and structure.",
        "desc": "Extracts multi-language content, preserves structure.",
        "base_size": 1024, "image_size": 640, "crop_mode": False
    },
    "Custom Prompt": {
        "prompt": "",
        "desc": "Provide your own custom prompt for flexible OCR or parsing.",
        "base_size": 1024, "image_size": 640, "crop_mode": False
    }
}
with gr.Blocks(theme=gr.themes.Soft()) as demo:
    gr.Markdown("""
    <div style="text-align:center;">
        <h1>DeepSeek-OCR Demo</h1>
    </div>
    """)
    with gr.Row():
        with gr.Column():
            gr.Markdown("### Input")
            image_input = gr.Image(type="pil", label="Upload Document/Image", height=350)
            gr.Markdown("#### Demo Modes (From Paper)")
            mode = gr.Radio(
                choices=list(DEMO_MODES.keys()), value="Document to Markdown", label="Select Capability to Test"
            )
            desc = gr.Markdown(DEMO_MODES["Document to Markdown"]["desc"])
            custom_prompt = gr.Textbox(label="Custom Prompt", visible=False)
            with gr.Accordion("Advanced Settings", open=False):
                base_size = gr.Slider(512, 1280, value=DEMO_MODES["Document to Markdown"]["base_size"], step=64, label="Base Size")
                image_size = gr.Slider(512, 1280, value=DEMO_MODES["Document to Markdown"]["image_size"], step=64, label="Image Size")
                crop_mode = gr.Checkbox(value=DEMO_MODES["Document to Markdown"]["crop_mode"], label="Dynamic Resolution (Crop Mode)")
            process_btn = gr.Button("Process Image", variant="primary")
        with gr.Column():
            gr.Markdown("### Results")
            ocr_output = gr.Textbox(label="Extracted Content", lines=22, show_copy_button=True)
            status_out = gr.Markdown("_Process an image to see stats and output dir_")
            boxed_output = gr.Image(label="Result with Bounding Boxes", type="pil")
    def update_mode(selected):
        d = DEMO_MODES[selected]
        return d["desc"], gr.update(visible=selected=="Custom Prompt"), d["base_size"], d["image_size"], d["crop_mode"]
    mode.change(update_mode, inputs=mode,
                outputs=[desc, custom_prompt, base_size, image_size, crop_mode])
    process_btn.click(
        gr_ocr,
        inputs=[image_input, mode, custom_prompt, base_size, image_size, crop_mode],
        outputs=[ocr_output, status_out, boxed_output]
    )
demo.launch(share=True, debug=True)

आइए इस कोड को उप-खंडों में समझें:

  • डेमो मोड्स और प्रॉम्प्ट्स: DEMO_MODES शब्दकोश DeepSeek-OCR द्वारा समर्थित सभी प्रमुख OCR क्षमताओं को समाहित करता है, जैसे "Document to Markdown", "Chart Deep Parsing", "Chemical Formula Recognition" आदि। प्रत्येक मोड में एक डिफ़ॉल्ट प्रॉम्प्ट, विवरण और अनुशंसित इमेज प्रोसेसिंग पैरामीटर्स शामिल हैं, जिससे उपयोगकर्ता तुरंत एक्सट्रैक्शन कार्यों को स्विच कर सकें।
  • ब्लॉक आर्किटेक्चर: UI Gradio के उच्च-स्तरीय Blocks API से बना है। इंटरफ़ेस दो मुख्य कॉलम में बँटा है—इनपुट पैनल, जहाँ उपयोगकर्ता इमेज अपलोड कर सकते हैं, OCR मोड चुन सकते हैं और इमेज साइज व क्रॉप मोड जैसी उन्नत सेटिंग्स समायोजित कर सकते हैं। आउटपुट पैनल एक्सट्रैक्टेड OCR कंटेंट, इन्फरेंस आँकड़े और डिटेक्टेड क्षेत्रों के चारों ओर बाउंडिंग बॉक्स वाली एनोटेटेड इमेज दिखाता है।
  • डायनेमिक UI कंट्रोल्स: ऐप में रेडियो बटन, स्लाइडर्स, चेकबॉक्स और टेक्स्टबॉक्स भी शामिल हैं, जो उपयोगकर्ता इनपुट और चुने गए डेमो मोड के आधार पर स्वतः समायोजित होते हैं, जिससे उपयोगिता बेहतर होती है और मैनुअल कॉन्फ़िगरेशन कम होता है।
  • इन्फरेंस ट्रिगर और परिणाम: Process Image बटन पर क्लिक करने पर, यह वर्तमान UI चयन को आर्गुमेंट्स के रूप में पास करके मुख्य OCR हैंडलर gr_ocr को कॉल करता है। आउटपुट तत्क्षण आउटपुट पैनल में रेंडर हो जाते हैं।

नोट: यदि Google Colab पर यह अभी भी पिछले इनपुट का आउटपुट दे रहा हो, तो आपको सत्र पुनःआरंभ करना पड़ सकता है।

अब जबकि हमारा Gradio एप्लिकेशन सेट हो चुका है, आइए DeepSeek-OCR को व्यावहारिक उदाहरणों की एक श्रृंखला के साथ परखें।

DeepSeek OCR ऐप उदाहरण 1: Chart Deep Parsing

DeepSeek-OCR Gradio डेमो में, मैं देखना चाहता था कि मॉडल चार्ट्स से टेबुलर डेटा कितनी अच्छी तरह निकाल सकता है। यह अब भी अधिकांश OCR और विज़न मॉडलों के लिए चुनौतीपूर्ण है।

मैंने दो क्लासिक टेस्ट केस आज़माए:

  • Statista-शैली का बार चार्ट और
  • “BUY/SELL” सिग्नल्स और संख्यात्मक ओवरले से भरा जटिल तकनीकी विश्लेषण चार्ट

DeepSeek-OCR ने प्रत्येक चार्ट के लिए एक HTML तालिका लौटाई, जिसकी कोशिकाएँ छवि में मिली श्रेणियों, मानों और लेबल्स के अनुरूप थीं।

क्या अच्छा काम किया: मॉडल ने चार्ट में मौजूद सभी दृश्य पाठ और संरचना को कैप्चर किया, और आउटपुट HTML तालिका फ़ॉर्मेट में था, जो मशीन-उपयोगी है और टेबल लॉजिक को बरकरार रखता है। इसने जटिल वित्तीय चार्ट भी प्रोसेस किए, हर संख्या और लेबल को टैब्युलर रूप देने की कोशिश की।

जहाँ संघर्ष हुआ: कच्चा आउटपुट बहुत विस्तृत था, जिसमें ढेर सारे <td> और <tr> टैग थे, जिससे एक नज़र में समझना कठिन था। जटिल चार्ट्स में, मॉडल कभी-कभी एंट्रीज़ डुप्लिकेट कर देता या उच्च-स्तरीय विज़ुअल संरचना खो देता, नतीजतन "BUY"/"SELL" सिग्नल्स और मानों की भारी तालिका बन जाती।

वास्तविक वर्कफ़्लोज़ के लिए, आप पठनीयता के लिए HTML का पोस्ट-प्रोसेस करना चाहेंगे या इसे Excel या Pandas में इम्पोर्ट करेंगे।

DeepSeek-OCR का चार्ट पार्सिंग एक स्मार्ट चार्ट डिजिटाइज़ेशन फीचर है, लेकिन HTML-प्रधान आउटपुट त्वरित मानवीय समीक्षा के बजाय डाउनस्ट्रीम डेटा पाइपलाइन्स या आगे के पार्सिंग के लिए अधिक उपयुक्त है।

उदाहरण 2: केमिकल फॉर्मूला एक्सट्रैक्शन

अगले परीक्षण के लिए, मैं देखना चाहता था कि DeepSeek-OCR संरचित छवियों से रासायनिक जानकारी निकालने को कितनी अच्छी तरह संभालता है। मॉडल का केमिकल एक्सट्रैक्शन मोड टेबुलर रासायनिक डेटा और ग्राफ़िकल आणविक संरचनाओं—दोनों—को HTML तालिकाओं और SMILES नोटेशन जैसे मशीन-पठनीय प्रारूपों में बदलने के लिए डिज़ाइन किया गया है।

मैंने इस प्रयोग के लिए दो तरह की छवियाँ अपलोड कीं, और यहाँ जो सामने आया:

  • पाठ्य सूत्र एक्सट्रैक्शन: इस उदाहरण में, मॉडल ने रसायनों के नाम और उनके आणविक सूत्र (जैसे “Glucose: C₆H₁₂O₆”, “Butane: C₄H₁₀”) सटीक रूप से ट्रांसक्राइब किए। हालाँकि, आउटपुट कच्चे HTML तालिका कोड के रूप में स्वरूपित था, जो संरचित होने के बावजूद, एक नज़र में समझना थोड़ा कठिन था। इमेज-से-टेबल रूपांतरण सादा पाठ के लिए तेज़ और काफ़ी सटीक था।

  • आणविक संरचना पहचान: रासायनिक आरेखों वाली छवियों के लिए, DeepSeek-OCR ने संबंधित SMILES स्ट्रिंग्स निकालने का प्रयास किया। उदाहरण के तौर पर, इसने एथेन और प्रोपेन के लिए SMILES आउटपुट जनरेट किया। यद्यपि इसने यह पहचाना कि ये रासायनिक संरचनाएँ हैं, लेकिन जनरेटेड SMILES स्ट्रिंग्स हमेशा रासायनिक रूप से वैध नहीं थीं, जो जटिल आणविक छवियों को पार्स करते समय सीमाएँ दर्शाती हैं।

image9.png

कुल मिलाकर, केमिकल फॉर्मूला एक्सट्रैक्शन क्षमता रासायनिक डेटा को तेज़ी से डिजिटाइज़ करने और आणविक संरचना पहचान का प्रयास करने का तरीका देती है, लेकिन विश्वसनीय रासायनिक पार्सिंग के लिए, विशेषकर जटिल संरचनाओं के साथ, और परिष्करण की आवश्यकता है।

उदाहरण 3: हस्तलिखित पाठ OCR

इसके बाद, मैं देखना चाहता था कि DeepSeek-OCR हस्तलिखित नोट्स को कितनी अच्छी तरह संभालता है—जो OCR प्रणालियों के लिए एक क्लासिक चुनौती है, खासकर जब हस्तलेखन स्टाइलाइज़्ड हो या आकार में भिन्न हो। 

मैंने लाइनदार कागज़ पर यौगिक नामों वाली एक हस्तलिखित केमिस्ट्री सूची की छवि अपलोड की। प्रोसेस होने पर, मॉडल के Document to Markdown मोड ने पाठ निकाला और संरचना को आश्चर्यजनक रूप से अच्छी तरह संरक्षित किया। इसने हेडर पहचाना और मूल छवि की तरह हर यौगिक को अलग पंक्ति में सूचीबद्ध किया। बाउंडिंग बॉक्सेज़ ने दृश्य रूप से पुष्टि की कि मॉडल ने हर पंक्ति को सही पहचाना और अलग-अलग टेक्स्ट ब्लॉक्स अलग किए।

image1.png

यह परिणाम मॉडल की हस्तलिखित सामग्री को डिजिटल टेक्स्ट में ट्रांसक्राइब करने की क्षमता दर्शाता है। कुछ मामूली फ़ॉर्मैटिंग विवरण खो सकते हैं, लेकिन इस उदाहरण के लिए कुल मिलाकर एक्सट्रैक्शन काफ़ी सटीक था।

उदाहरण 4: समीकरण एक्सट्रैक्शन

OCR का एक और मानक परीक्षण है कि वह मानक पाठ्यपुस्तक संकेतन में लिखे गणितीय समीकरणों को पढ़े और सही ढंग से व्याख्यायित करे। इस प्रयोग के लिए, मैंने LaTeX-शैली के गणित फ़ॉन्ट्स में सेट कुछ जटिल समीकरणों वाली छवि अपलोड की, ताकि आँका जा सके कि मॉडल न केवल उन्हें डिटेक्ट कर सकता है, बल्कि सटीक रूप से निकाल और स्वरूपित भी कर सकता है।

image13.png

DeepSeek-OCR ने छवि में सभी चार समीकरणों को सफलतापूर्वक डिटेक्ट किया और उन्हें LaTeX स्ट्रिंग्स के रूप में एक्सट्रैक्ट किया। पहचाना गया आउटपुट साफ-सुथरा संरचित था, प्रत्येक समीकरण को मानक LaTeX फ़ॉर्मेट में अलग पंक्ति पर ट्रांसक्राइब किया गया था। 

बाउंडिंग बॉक्स भी मूल छवि पर सही (लगभग) ओवरले हुए, जो दिखाता है कि मॉडल व्यक्तिगत गणितीय अभिव्यक्तियों को सटीकता से स्थानीयकृत और सेगमेंट कर सकता है।

ध्यान देने योग्य यह रहा कि निकाले गए कंटेंट ने \frac जैसे कमांड्स से भिन्नों और उचित वेरिएबल फ़ॉर्मैटिंग सहित गणितीय संरचना बनाए रखी, जिससे परिणाम दस्तावेज़ीकरण के लिए सीधे पुन: उपयोग योग्य रहा। 

उदाहरण 5: टेबल एक्सट्रैक्शन

सबसे सामान्य और मूल्यवान OCR कार्यों में से एक है दस्तावेज़ों की छवियों से टेबुलर डेटा निकालना—विशेषकर स्कैन की गई रिपोर्ट्स, शोध-पत्रों या डेटासेट्स से। DeepSeek-OCR की इस क्षेत्र में क्षमता आँकने के लिए, मैंने कई देशों में फैली एक संरचित आर्थिक तुलना तालिका वाली छवि अपलोड की।

image5.png

"Chart Deep Parsing" मोड चुनने और इमेज प्रोसेस करने के बाद, DeepSeek-OCR ने विज़ुअल टेबल को HTML टेबल संरचना में बदलने का प्रयास किया। एक्सट्रैक्टेड कंटेंट (दाएँ) में <table> और <td> टैग्स की एक श्रृंखला शामिल है, जो तालिका की पंक्तियों और स्तंभों को सादे पाठ के रूप में मैप करती है। बाउंडिंग बॉक्स आउटपुट ने आगे पुष्टि की कि मॉडल ने छवि में मुख्य टेबल क्षेत्र को सही ढंग से पहचानकर सेगमेंट किया।

सरल तालिकाओं के लिए मॉडल विश्वसनीय एक्सट्रैक्शन दिखाता है, हालाँकि आउटपुट फ़ॉर्मेट (कच्चा HTML) त्वरित समीक्षा या डाउनस्ट्रीम डेटा विश्लेषण के लिए कम उपयोगकर्ता-अनुकूल है, इसलिए पोस्ट-प्रोसेसिंग की आवश्यकता हो सकती है।

उदाहरण 6: मीम्स पर OCR

इस उदाहरण में, मैं देखना चाहता था कि मॉडल लोकप्रिय मीम छवियों से टेक्स्ट एक्सट्रैक्शन को कैसे संभालता है। यह एक वास्तविक-जीवन का परिदृश्य है जहाँ टेक्स्ट अक्सर जटिल बैकग्राउंड पर ओवरले होता है, अलग-अलग फ़ॉन्ट्स का उपयोग करता है और सामान्य दस्तावेज़ संरचनाएँ नहीं मानता।

मैंने एक क्लासिक मीम छवि अपलोड की जिसमें एक फ़िल्म दृश्य (Django Unchained में Leonardo DiCaprio) पर बड़े, सफ़ेद, कैपिटल अक्षरों में टेक्स्ट ओवरले था और Document to Markdown एक्सट्रैक्शन मोड चलाया।

image6.png

स्रोत: Media.io

इस मीम के लिए OCR परिणाम आश्चर्यजनक रूप से मजबूत था। यह सभी प्रासंगिक शब्दों को सही क्रम में कैप्चर करने में सक्षम था—बिना वर्तनी की गलतियाँ किए या टेक्स्ट स्किप किए—भले ही बैकग्राउंड जटिल था। 

हालाँकि कोई संरचनात्मक मार्कअप नहीं है, लेकिन यह एक्सट्रैक्शन मीम सेंटिमेंट विश्लेषण, कंटेंट मॉडरेशन या टेक्स्ट-आधारित मीम सर्च जैसे डाउनस्ट्रीम कार्यों के लिए अत्यंत उपयोगी है।

उदाहरण 7: बहुभाषी OCR

DeepSeek-OCR की एक अनूठी ताकत इसका बहुभाषी पाठ एक्सट्रैक्शन समर्थन है, जो उन दस्तावेज़ों या छवियों के लिए विशेष रूप से उपयोगी है जिनमें वैश्विक भाषाओं का मिश्रण होता है। 

मैंने इस क्षमता का परीक्षण कई नमूनों के साथ किया, जिनमें चीनी पाठ वाला वास्तविक सड़क संकेत और चीनी, जापानी और कोरियाई वाक्यों का मिश्रण रखने वाला एक सिंथेटिक सैंपल शामिल था।

image3.png

स्रोत: DeepSeek OCR Hugging Face

इन बहुभाषी नमूनों को प्रोसेस करते समय, DeepSeek-OCR का document-to-Markdown मोड गैर-अंग्रेज़ी लिपियों को सटीक रूप से पहचानकर निकालने में सक्षम था। सड़क फोटो के लिए, मॉडल ने चीनी पाठ के पूरे पैराग्राफ की पहचान कर उसे लौटाया। 

मिश्रित-भाषा उदाहरण के लिए, इसने चीनी, जापानी और कोरियाई सेक्शन्स को सही तरीके से अलग किया और लेबल किया, उनकी फ़ॉर्मैटिंग और टेक्स्ट ब्लॉक्स को सुरक्षित रखा। बाउंडिंग बॉक्स ओवरलेज़ ने भी प्रत्येक भाषा के टेक्स्ट क्षेत्र की सटीक पहचान दिखाई।

हालाँकि, दो महत्वपूर्ण सावधानियाँ हैं:

  • प्रोसेसिंग गति: बहुभाषी OCR एक-भाषी अंग्रेज़ी या टेबल एक्सट्रैक्शन कार्यों की तुलना में काफी धीमा है। मेरे परीक्षणों में प्रोसेसिंग समय अधिक था, संभवतः स्क्रिप्ट डिटेक्शन और डिकोडिंग की अतिरिक्त जटिलता के कारण।
  • कभी-कभार त्रुटियाँ: कभी-कभी एक्सट्रैक्टेड आउटपुट में अनावश्यक टोकन्स या गलत तरीके से फ़ॉर्मैट किया हुआ टेक्स्ट शामिल हो जाता है।

इन छोटी खामियों के बावजूद, DeepSeek-OCR मजबूत बहुभाषी OCR क्षमताएँ देता है जो मिश्रित लिपियों और वास्तविक-विश्व फ़ोटो को विश्वसनीय रूप से संभाल सकती हैं।

DeepSeek-OCR: अंतिम विचार

DeepSeek-OCR क्लासिक OCR और आधुनिक मल्टीमॉडल LLMs के बीच की खाई पाटता है। इसकी सबसे बड़ी जीत बहुमुखी प्रतिभा है—एक ही पाइपलाइन जो स्कैन किए गए दस्तावेज़ पढ़ती है, जटिल तालिकाएँ और चार्ट निकालती है, समीकरणों और रासायनिक संरचनाओं को समझती है, और मीम्स, हस्तलेखन और दर्जनों भाषाओं के साथ भी काम करती है।

यह कहा जाने पर भी, DeepSeek-OCR त्रुटिरहित नहीं है। चार्ट और टेबल आउटपुट अत्यधिक विस्तृत हो सकते हैं, रासायनिक संरचना पहचान कभी-कभी कम रह जाती है, और बहुभाषी प्रोसेसिंग स्पष्ट रूप से धीमी हो सकती है। जटिल विज़ुअल लेआउट्स के लिए प्रत्यक्ष उपयोग हेतु पोस्ट-प्रोसेसिंग की आवश्यकता पड़ सकती है।

लेकिन शोध, शैक्षणिक वर्कफ़्लोज़, रैपिड प्रोटोटाइपिंग, और उन सभी के लिए जिन्हें साधारण टेक्स्ट से आगे बढ़ी उन्नत OCR की ज़रूरत है, DeepSeek-OCR पहले से ही पुरानी टूल्स पर एक ठोस अपग्रेड महसूस होता है। 

यदि आप DeepSeek इकोसिस्टम के बारे में और सीखने के इच्छुक हैं, तो मैं Working with DeepSeek in Python पाठ्यक्रम देखने की सलाह देता/देती हूँ।

Aashi Dutt

लेखक

Aashi Dutt

मैं एमएल (Gen AI) में Google Developers Expert, Kaggle 3x Expert, और Women Techmakers एंबेसडर हूँ, तथा तकनीक क्षेत्र में 3+ वर्षों का अनुभव रखती हूँ। मैंने 2020 में एक हेल्थ-टेक स्टार्टअप की सह-स्थापना की और वर्तमान में Georgia Tech से कंप्यूटर विज्ञान में मास्टर कर रही हूँ, जिसमें मेरा विशेषज्ञता क्षेत्र मशीन लर्निंग है।

विषय