Ana içeriğe geç

DeepSeek-OCR: 7 Pratik Örnekle Uygulamalı Kılavuz

Belge anlamaya yönelik görsel-dil modeli DeepSeek-OCR’ı keşfedin. Grafikler, matematik, memler ve el yazısı notlarda 7 gerçek OCR testi görün.
· 13 dk. oku

Yapay Zeka ile Keşfedin

DeepSeek-OCR, yapıyı anlayan, tabloları ayrıştıran, grafikleri çıkaran ve hatta matematik, memler ve birden çok dili bile ele alabilen yeni bir büyük görsel-dil modelidir.

Bu kılavuzda, DeepSeek-OCR’ı el yazısı notlardan karmaşık grafiklere, memlere ve çok dilli belgelere kadar uçtan uca gerçek dünya görevlerinde test ediyorum. Şunları adım adım inceleyeceğiz:

  • Grafik ve tablo çıkarımı
  • Kimya ve formül ayrıştırma
  • El yazısı metin tanıma
  • Denklemler ve Markdown çıktısı
  • Memler ve sosyal görseller için OCR
  • Çok dilli belge anlama

Sonunda, DeepSeek-OCR’ın nerede parladığını ve nerede zorlandığını göreceksiniz. Açık kaynak OCR’ı değerlendiriyorsanız, hattınızı seçmeden önce bu deneyleri görmenizde fayda var. Ayrıca DeepSeek V3.2-Speciale eğitimimize de göz atmanızı öneririm.

DeepSeek-OCR Nedir?

DeepSeek-OCR, belge anlamaya yönelik 3 milyar parametreli açık bir görsel-dil modelidir. Büyük 2B görsel bağlamları sıkıştırılmış görsel token’lara eşleyerek bağlamsel optik sıkıştırmadan yararlanır; böylece devasa belgeleri verimli biçimde işler.

Öne çıkan bazı özellikler:

  • Büyük taranmış belgeleri, fişleri, faturaları, araştırma makalelerini vb. okuma.
  • Tabloları, grafikleri ve geometrik şekilleri ayrıştırma.
  • Çok dilli ve el yazısı metni işleme.

DeepSeek-OCR Nasıl Çalışır?

DeepSeek-OCR; grafikler ve tablolardan el yazısına, matematiğe ve çok dilli metne kadar çok çeşitli belge görsellerini ele alacak şekilde tasarlanmıştır. Görselleri ve metni ayrı alanlar olarak ele almak yerine, görsel modaliteden uzun metin için bir sıkıştırma motoru olarak yararlanır ve büyük dil modellerinin (LLM’lerin) çok daha az token kullanarak çok daha fazla bilgiyi işlemesini sağlar. Mimarisi ve onu farklı kılan unsurları parçalara ayıralım:

Uçtan uca hat: Kodlayıcıdan çözücüye

Yüksek seviyede, DeepSeek-OCR iki ana bileşenden oluşur:

  • DeepEncoder (Görsel Tokenlaştırıcı & Sıkıştırıcı)
  • DeepSeek-3B MoE Çözücü (Metin Üretici)

image2.png

Kaynak: DeepSeek-OCR: Contexts Optical Compression

1. Girdi görsel ön işleme: Hat, taranmış bir sözleşme, el yazısı not, finansal tablo vb. gibi bir belge görseliyle başlar. Bu görsel, modelin anladığı en küçük görsel sözcükler olarak 16x16 piksellik bir ızgaraya bölünür.

2. DeepEncoder: DeepEncoder, çözünürlük, bellek kullanımı ve bilgi sıkıştırma arasında denge kurmak üzere tasarlanmış çok aşamalı bir görsel motordur. Üç ana aşamada çalışır:

  • SAM (Segment Anything Model, 80M parametre): Küçük, örtüşen yamaları analiz ederek ince ayrıntıları ve yerleşimi yakalayan yerel dikkati yönetir.
  • Evrimsel Sıkıştırıcı (16x Aşağı Örnekleme): Yerel özellikleri sıkıştırarak görsel token sayısını dramatik biçimde azaltır; böylece pahalı küresel dikkat aşamasına daha az token ulaşır.
  • CLIP ViT: Bir görsel dönüştürücüdür (300M parametre) ve belgeyi genel yapı ve bağlam düzeyinde anlamak için küresel dikkat uygular; sıkıştırılmış token’lar için gömme katmanı görevi görür.

3. Görsel token’lardan metne: MoE Çözücü, DeepSeek-3B MoE (Mixture-of-Experts) çözücüsüne beslenen görsel token’ları sıkıştırır; örnek başına yalnızca en ilgili uzmanları etkinleştirerek hesaplama maliyetini doğruluk kaybı olmadan azaltır.

4. İstem odaklı esneklik: Sistem, tıpkı LLM’lerde olduğu gibi, yalnızca istemi değiştirerek çıktının (Markdown, HTML tablolar, SMILES kimyasal formülleri, çok dilli yerleşimler vb.) biçimini yönlendirir.

DeepSeek-OCR, tek bir belge görselinin, doğrulukta önemli bir kayıp olmadan, düz metin için gereken token’ların 1/10’u kadarına “sıkıştırılabildiğini” göstermektedir. 

DeepSeek OCR Demo: Gradio Uygulaması

Bu bölümde, DeepSeek-OCR için tarayıcınızda veya Google Colab’da doğrudan OCR çalıştıracak eksiksiz bir Gradio web uygulaması kuracağız. Yalnızca birkaç adımda grafikler, tablolar, el yazısı notlar, memler, matematik ve çok dilli metin görsellerini yükleyebilir ve sınırlayıcı kutularla yapılandırılmış çıktı alabilirsiniz.

Adım 1: Önkoşullar

Başlamadan önce aşağıdaki önkoşulların sağlandığından emin olun:

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

Yukarıdaki komut, DeepSeek-OCR ve Gradio için gerekli tüm Python kütüphanelerini kurar; transformers, tokenizers, görsel işleme (pillow) ve Gradio UI araç takımının en uyumlu sürümleri dahil. 

Not: Bu kod, Google Colab’da Yüksek RAM’li L4 GPU üzerinde çalışır.

Adım 2: İçe aktarmalar

Artık tüm bağımlılıkları kurduk.  Sırada içe aktarmaları ayarlamak var.

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

Dosya G/Ç, model çıkarımı (torch), UI kurma (gradio), görsel işleme (PIL) ve dosya yolları ile rastgele çalışma kimliklerini yönetmeye yönelik yardımcı işlevler için gerekli tüm Python modüllerini içe aktarıyoruz.

Adım 3: Modeli yükleme

Gerekli kütüphaneler kurulduktan sonra, DeepSeek-OCR modelini Hugging Face’ten yüklemeye hazırsınız. Ancak, bazı modellere erişmek için Hugging Face erişim belirteci ile kimlik doğrulaması gerekir.

Google Colab’da Hugging Face erişim belirtecinizi şöyle ayarlarsınız:

  • Colab’da gizli anahtar ekleyin: Google Colab defterinizde sol kenar çubuğundaki anahtar simgesine (“Secrets”) tıklayın ve “Add a Secret”ı seçin.
  • Hugging Face’te bir belirteç oluşturun: Hugging Face hesabınıza giriş yapın, hesap ayarlarınıza gidin ve “Access Tokens” bölümünü bulun. “Create new token”a tıklayın, uygun rolü seçin (genellikle “Read”) ve belirtecinizi oluşturun.
  • Belirteci kopyalayıp yapıştırın: Yeni erişim belirtecinizi kopyalayın ve Colab’daki “Add a Secret” alanına yapıştırın. Bu, defterinizin DeepSeek-OCR modeline güvenli şekilde erişmesini sağlar.

Artık kimlik doğrulaması yapmaya ve modeli yüklemeye hazırsınız!

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()

Yukarıdaki kod, resmi DeepSeek-OCR modelini ve belirteçleyicisini doğrudan Hugging Face’ten yükler. Ardından pad token’ı ayarlayarak belirteçleyici uyumluluğunu sağlar ve modeli bfloat16 biçiminde yükler.

Adım 4: Yardımcı işlev

Modelimiz hazır; sırada her model çıktısı için yeni bir dizin oluşturarak her OCR çalışmasını düzenli tutmak var. Böylece çıkarılan metin, sınırlayıcı kutu görselleştirmeleri ve günlük dosyaları saklanır ve önceki sonuçların üzerine yazılmaz.

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 işlevi, mevcut zaman damgasına ve rastgele bir soneke dayalı olarak her görsel işleme çalışması için benzersiz bir çıktı dizini oluşturur. Bu, farklı çalışmalardan gelen sonuçların birbiri üzerine yazılmamasını sağlar ve çıktıları inceleme ya da hata ayıklama için düzenler.

Adım 5: OCR işleyicisi

Bu adım, DeepSeek-OCR Gradio uygulamamızın ana motorudur. Yüklenen görseli doğru formata dönüştürerek başlar ve dosya çok büyükse yeniden boyutlandırır. Modeli her çalıştırdığımızda tüm çıktılar yeni bir klasöre kaydedilir.

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 işlevi, DeepSeek-OCR’ın Gradio uygulaması için ön işleme, çıkarım ve son işlem mantığını kapsar. Şu adımları gerçekleştirir:

  • Görsel standardizasyonu ve ön işleme: İşlev, model uyumluluğu için girdi görselini önce RGB renk uzayına dönüştürür. Görsel azami boyutu (2000px) aşıyorsa, GPU bellek taşmasını önlemek için orantılı olarak yeniden boyutlandırılır.
  • Çalışma dizini yönetimi: Her OCR çalışması benzersiz bir dizinde izole edilir. Bu, yığın işlem, hata ayıklama ve tekrarlanabilirlik için kritik olan izlenebilirliği sağlar.
  • Verimli model çıkarımı: Model, bellek kullanımını azaltmak ve çıkarım hızını artırmak için gradyan hesaplamadan kaçınan torch.inference_mode() bağlamında çağrılır.
  • Köşe durumları ve hata yönetimi: İşlev ayrıca, token sıkıştırmadaki nadir köşe durumlarında oluşabilecek ZeroDivisionError gibi istisnaları kullanıcı deneyimini kesintiye uğratmadan ele alır.
  • Sonuç derleme ve görselleştirme: Çıkarımdan sonra işlev, çıkarılan metin çıktısını ve tespit edilen sınırlayıcı kutuları vurgulayan görsel bindirmeyi yükleyerek incelemeyi kolaylaştırır.
  • UI entegrasyonu: İşlev sonunda Gradio arayüzüne sorunsuz entegrasyon için OCR çıktısını, işlem istatistiklerini ve açıklamalı görseli içeren bir demet döndürür.

Şimdi etkileşimli arayüzümüze geçip DeepSeek-OCR’ı iş başında görelim.

Adım 6: Gradio UI

Son adımda, kullanıcıların görsel yüklemesini, farklı OCR çıkarım kiplerini seçmesini, gelişmiş ayarları yapmasını ve çıktıları tek bir web tabanlı arayüzde görüntülemesini sağlayan bir DeepSeek-OCR etkileşimli Gradio arayüzü tanımlıyoruz.

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)

Bu kodu alt bölümlerde anlayalım:

  • Demo kipleri ve istemler: DEMO_MODES sözlüğü, DeepSeek-OCR’ın desteklediği “Document to Markdown”, “Chart Deep Parsing”, “Chemical Formula Recognition” ve daha fazlası gibi tüm başlıca OCR yeteneklerini kapsar. Her kip, varsayılan bir istem, açıklama ve önerilen görsel işleme parametreleri içerir; bu da kullanıcıların çıkarım görevlerini anında değiştirmesine olanak tanır.
  • Blok mimarisi: UI, Gradio’nun üst düzey Blocks API’si kullanılarak inşa edilmiştir. Arayüz iki ana sütuna ayrılmıştır: Kullanıcıların görsel yüklemesini, OCR kipini seçmesini ve görsel boyutu ile kırpma kipi gibi gelişmiş parametreleri ayarlamasını sağlayan bir giriş paneli; ve çıkarılan OCR içeriğini, çıkarım istatistiklerini ve tespit edilen bölgeler etrafındaki sınırlayıcı kutularla açıklamalı bir görseli gösteren bir çıktı paneli.
  • Dinamik UI denetimleri: Uygulamada ayrıca, kullanıcı girdisine ve seçilen demo kipine göre otomatik ayarlanan radyo düğmeleri, kaydırıcılar, onay kutuları ve metin kutuları bulunur; bu da kullanılabilirliği artırır ve manuel yapılandırmayı en aza indirir.
  • Çıkarımı tetikleme ve sonuçlar: Process Image düğmesine tıklandığında, mevcut tüm arayüz seçimlerini argüman olarak geçirerek ana OCR işleyicisi gr_ocr çağrılır. Çıktılar anında çıktı panelinde görüntülenir.

Not: Google Colab’da hâlâ önceki girdinin çıktısını döndürüyorsa oturumu yeniden başlatmanız gerekebilir.

Gradio uygulamamızı kurduğumuza göre, şimdi bir dizi pratik örnekle DeepSeek-OCR’ı test edelim.

DeepSeek OCR Uygulaması Örnek 1: Grafik Derin Ayrıştırma

DeepSeek-OCR Gradio demosunda, modelin grafiklerden tablo verisini ne kadar iyi çıkarabildiğini görmek istedim. Bu hâlâ çoğu OCR ve görsel model için zorlu bir alan.

İki klasik test vakası denedim:

  • Statista tarzı bir çubuk grafik ve
  • “AL/SAT” sinyalleri ve sayısal bindirmelerle dolu karmaşık bir teknik analiz grafiği

DeepSeek-OCR, her grafik için görselde bulduğu kategorilere, değerlere ve etiketlere karşılık gelen hücrelerle bir HTML tablo döndürdü.

İşe yarayanlar: Model, grafikteki tüm görünür metin ve yapıyı yakaladı ve çıktı, tablo mantığını koruyan ve makine tarafından kullanılabilir HTML tablo biçimindeydi. Hatta karmaşık finansal grafikleri de işledi ve her sayı ile etiketi tablolamaya çalıştı.

Zorlandığı noktalar: Ham çıktı çok uzundu; çok sayıda <td> ve <tr> etiketi vardı; bu da bir bakışta yorumlamayı güçleştiriyordu. Karmaşık grafiklerde model bazen girdileri çoğalttı ya da üst düzey görsel yapıyı kaybetti; bunun sonucunda tekrarlanan “AL”/“SAT” sinyalleri ve değerlerle dolu bunaltıcı bir tablo oluştu.

Gerçek dünya iş akışları için, okunabilirlik adına HTML’yi sonradan işlemek ya da Excel veya Pandas’a aktarmak isteyebilirsiniz.

DeepSeek-OCR’ın grafik ayrıştırması akıllı bir grafik sayısallaştırma özelliği olsa da HTML ağırlıklı çıktı, hızlı insan incelemesinden ziyade aşağı akış veri hatları veya daha ileri ayrıştırma için daha uygundur.

Örnek 2: Kimyasal Formül Çıkarımı

Bir sonraki testimde, DeepSeek-OCR’ın yapısal görsellerden kimyasal bilgiyi ne kadar iyi çıkarabildiğini görmek istedim. Modelin kimyasal çıkarım kipi, hem tablo şeklindeki kimyasal verileri hem de grafik moleküler yapıları HTML tabloları ve SMILES gösterimi gibi makinece okunabilir biçimlere dönüştürmek üzere tasarlanmıştır.

Bu deneyde iki tür görsel yükledim ve şunları gözlemledim:

  • Metinsel formül çıkarımı: Bu örnekte model, kimyasal adları ve moleküler formüllerini (ör. “Glikoz: C₆H₁₂O₆”, “Bütan: C₄H₁₀”) doğru biçimde yazıya döktü. Ancak çıktı, ham HTML tablo kodu olarak biçimlendirildi; bu yapılandırılmış olsa da bir bakışta yorumlamak biraz zordu. Görselden tabloya dönüşüm, düz metin için hızlı ve makuldü.

  • Moleküler yapı tanıma: Kimyasal şemalar içeren görseller için, DeepSeek-OCR karşılık gelen SMILES dizgelerini çıkarmaya çalıştı. Örneğin etan ve propan için SMILES çıktısı üretti. Bunların kimyasal yapılar olduğunu tanımada başarılı olsa da üretilen SMILES dizgeleri her zaman kimyasal olarak geçerli değildi; bu da daha karmaşık moleküler görseller ayrıştırılırken sınırlamalar olduğunu gösteriyor.

image9.png

Genel olarak, kimyasal formül çıkarma yeteneği, kimyasal verileri hızla sayısallaştırma ve moleküler yapı tanımına teşebbüs etme imkânı sunuyor; ancak özellikle karmaşık yapılar için güvenilir kimyasal ayrıştırma adına daha fazla iyileştirme gerekiyor.

Örnek 3: El Yazısı Metin OCR’ı

Sırada, DeepSeek-OCR’ın el yazısı notları ne kadar iyi işleyebildiğini görmek vardı; bu, özellikle yazı stili değişken ya da boyutları farklı olduğunda OCR sistemleri için klasik bir meydan okumadır. 

Çizgili kâğıt üzerine bileşik adları içeren el yazısı bir kimya listesi görseli yükledim. İşlendikten sonra, modelin Document to Markdown kipi metni çıkardı ve yapıyı şaşırtıcı derecede iyi korudu. Başlığı tanıdı ve her bileşiği, orijinal görselde göründüğü gibi, ayrı satıra yerleştirdi. Sınırlayıcı kutular, modelin her satırı doğru tanımladığını ve metin bloklarını ayırdığını görsel olarak doğruladı.

image1.png

Bu sonuç, modelin el yazısı içeriği dijital metne dönüştürme yeteneğini gösteriyor. Bazı küçük biçimlendirme ayrıntıları kaybolsa da genel çıkarım bu örnek için oldukça isabetliydi.

Örnek 4: Denklem Çıkarımı

OCR için bir diğer standart test, ders kitabı notasyonuyla yazılmış matematiksel denklemleri okumak ve doğru yorumlamaktır. Bu deney için, modelin yalnızca tespit edip etmeyeceğini değil, aynı zamanda bu ifadeleri doğru çıkarıp biçimlendirip biçimlendirmeyeceğini değerlendirmek üzere LaTeX tarzı matematik yazı tipleriyle ayarlanmış bazı karmaşık denklemler içeren bir görsel yükledim.

image13.png

DeepSeek-OCR, görseldeki dört denklemin tamamını başarıyla tespit etti ve bunları LaTeX dizgeleri olarak çıkardı. Tanınan çıktı düzenliydi; her denklem standart LaTeX biçiminde ayrı bir satıra yazıldı. 

Sınırlayıcı kutular da orijinal görsel üzerine (yaklaşık olarak) doğru şekilde bindirildi ve modelin tekil matematiksel ifadeleri doğru yerelleştirip parçalara ayırabildiğini gösterdi.

Dikkat çeken nokta, çıkarılan içeriğin kesirler için \frac gibi komutları ve doğru değişken biçimlendirmesini kullanarak matematiksel yapıyı korumasıydı; bu da sonucu doğrudan dokümantasyonda yeniden kullanılabilir kılıyor. 

Örnek 5: Tablo Çıkarımı

En yaygın ve değerli OCR görevlerinden biri, özellikle taranmış raporlar, araştırma makaleleri veya veri setleriyle çalışırken belgelerdeki görsellerden tablo verisini çıkarmaktır. Bu alandaki yeteneğini değerlendirmek için, birden fazla ülkeyi kapsayan yapılı bir ekonomik karşılaştırma tablosu içeren bir görsel yükledim.

image5.png

“Chart Deep Parsing” kipini seçip görseli işledikten sonra, DeepSeek-OCR görsel tabloyu bir HTML tablo yapısına dönüştürmeye çalıştı. Çıkarılan içerik (sağda), tablo satırlarını ve sütunlarını düz metinle eşleyen bir dizi <table> ve <td> etiketi içeriyordu. Sınırlayıcı kutu çıktısı, modelin görseldeki ana tablo bölgesini doğru tanımlayıp parçaladığını daha da doğruladı.

Model, basit tablolar için güvenilir çıkarım sergiliyor; ancak çıktı biçimi (ham HTML) hızlı inceleme ya da aşağı akış veri analizi için daha az kullanıcı dostu olduğundan sonradan işleme gerekebilir.

Örnek 6: Memlerde OCR

Bu örnekte, modelin popüler mem görsellerinden metin çıkarımını nasıl ele aldığını test etmek istedim. Bu, metnin sıklıkla karmaşık arka planlar üzerine bindirildiği, farklı yazı tipleri kullandığı ve her zaman tipik belge yapılarıyla örtüşmediği gerçek bir senaryodur.

Bir film sahnesinin (Django Unchained’de Leonardo DiCaprio) üzerinde büyük, beyaz, büyük harfli metin olan klasik bir mem görseli yükledim ve Document to Markdown çıkarım kipini çalıştırdım.

image6.png

Kaynak: Media.io

Bu mem için OCR sonucu şaşırtıcı derecede sağlamdı. Karmaşık arka plana rağmen tüm ilgili sözcükleri doğru sırayla yakaladı; yazım hatası yapmadı ve metni atlamadı. 

Yapısal bir işaretleme olmasa da, çıkarım mem duygu analizi, içerik denetimi veya metin tabanlı mem araması gibi aşağı akış görevleri için oldukça kullanılabilir.

Örnek 7: Çok Dilli OCR

DeepSeek-OCR’ın benzersiz güçlü yönlerinden biri, özellikle küresel dillerin karışımını içeren belgeler veya görseller için kullanışlı olan çok dilli metin çıkarımı desteğidir. 

Bu yeteneği, Çince metin içeren gerçek bir sokak tabelası ve Çince, Japonca ve Korece cümlelerin karışımını içeren sentetik bir örnek de dahil olmak üzere çeşitli örneklerle test ettim.

image3.png

Kaynak: DeepSeek OCR Hugging Face

Bu çok dilli örnekleri işlerken, DeepSeek-OCR’ın belge-den-Markdown kipi, İngilizce olmayan yazıları doğru biçimde tespit edip çıkardı. Sokak fotoğrafı için model, Çince metnin tamamını paragraf olarak tanımlayıp döndürdü. 

Karışık dil örneğinde ise Çince, Japonca ve Korece bölümleri doğru biçimde ayırıp etiketledi; biçimlendirmelerini ve metin bloklarını korudu. Sınırlayıcı kutu bindirmeleri de her dilin metin bölgesinin isabetli tespitini gösterdi.

Bununla birlikte iki önemli uyarı var:

  • İşleme hızı: Çok dilli OCR, tek dilli İngilizce veya tablo çıkarım görevlerine kıyasla belirgin ölçüde daha yavaştır. Testlerimde, muhtemelen yazı tespiti ve çözümlemedeki ek karmaşıklık nedeniyle işlem süresi oldukça uzundu.
  • Zaman zaman hatalar: Bazen çıkarılan çıktıda fazlalık token’lar veya yanlış biçimlendirilmiş metinler yer alabiliyor.

Bu küçük sorunlara rağmen, DeepSeek-OCR; karışık yazıları ve gerçek dünya fotoğraflarını güvenilir şekilde işleyebilen güçlü çok dilli OCR yetenekleri sunuyor.

DeepSeek-OCR Hakkında Son Düşünceler

DeepSeek-OCR, klasik OCR ile modern çok modlu LLM’ler arasındaki boşluğu kapatıyor. En büyük başarısı çok yönlülüğü; yani taranmış belgeleri okuyan, karmaşık tablo ve grafikleri çıkaran, denklemleri ve kimyasal yapıları anlayan ve hatta memler, el yazısı ve düzinelerce dille çalışan tek bir hat elde ediyorsunuz.

Bununla birlikte, DeepSeek-OCR kusursuz değil. Grafik ve tablo çıktıları aşırı derecede ayrıntılı olabiliyor, kimyasal yapı tanıma bazen yetersiz kalabiliyor ve çok dilli işleme gözle görülür şekilde yavaş olabiliyor. Karmaşık görsel yerleşimler, doğrudan kullanım için sonradan işlem gerektirebilir.

Ancak araştırma, akademik iş akışları, hızlı prototipleme ve düz metnin ötesinde gelişmiş OCR’a ihtiyaç duyan herkes için DeepSeek-OCR, eski araçlara kıyasla şimdiden ciddi bir yükseltme gibi hissettiriyor. 

DeepSeek ekosistemi hakkında daha fazla bilgi edinmek istiyorsanız, Python ile DeepSeek ile Çalışmak kursuna göz atmanızı öneririm.

Aashi Dutt

Yazar

Aashi Dutt

ML (Üretken Yapay Zekâ) alanında Google Developers Uzmanıyım, Kaggle 3x Expert unvanına sahibim ve 3+ yıllık teknoloji deneyimiyle Women Techmakers Elçisiyim. 2020'de bir sağlık teknolojileri girişiminin kurucu ortağı oldum ve Georgia Tech'te makine öğrenmesi alanında uzmanlaşarak bilgisayar bilimleri yüksek lisansı yapıyorum.

Konular

İlgili