0Pricing
AI Agents · Ders

Taranmış Belgeler İçin OCR

pytesseract aracılığıyla Tesseract, görüntü ön işleme ve doğruluğu artırma.

Taranmış Belgeler İçin OCR, CoddyKit'te ücretsiz bir AI Agents dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Agents öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Agents kursu toplamda 4 dersten oluşur.

OCR Ne Zaman Gereklidir

Her belge dijital olarak oluşturulmuş PDF değildir. Taranmış belgeler, metin fotoğrafları, el yazısı notlar ve görüntü tabanlı PDF'ler metin çıkarmak için Optik Karakter Tanıma (OCR) gerektirir.

OCR, metin içeren piksel görüntülerini makinelerin okuyabileceği karakterlere dönüştürür. Önde gelen iki Python kitaplığı şunlardır: pytesseract (Google Tesseract) ve EasyOCR (derin öğrenme, çok dilli).

pytesseract Temelleri

pytesseract, Google'ın Tesseract OCR motoru için bir Python sarmalayıcısıdır. Önce Tesseract'ı işletim sistemi düzeyinde yükleyin, ardından pip install pytesseract Pillow komutunu çalıştırın.

import pytesseract
from PIL import Image

# Simple text extraction
image = Image.open('scanned_document.png')
text = pytesseract.image_to_string(image)
print(text)

# Specify language (default: English)
text_fr = pytesseract.image_to_string(
    Image.open('french_doc.png'),
    lang='fra'
)

# Get detailed output with bounding boxes
data = pytesseract.image_to_data(
    image,
    output_type=pytesseract.Output.DICT
)
for i, word in enumerate(data['text']):
    if word.strip():
        conf = data['conf'][i]
        print(f'Word: {word!r:20} Confidence: {conf}')

Görüntü Ön İşleme: Gri Tonlama

OCR doğruluğu büyük ölçüde görüntü kalitesine bağlıdır. İlk ön işleme adımı, görüntüyü gri tonlamaya dönüştürmektir; renk, karakterlerin tanınmasına yardımcı olmadan gürültü ekler.

Ön işleme için Pillow veya OpenCV kullanın. Gri tonlama, gürültüyü azaltır ve Tesseract'ın karakter sınırlarını algılamasını iyileştirir.

from PIL import Image, ImageOps
import numpy as np

def preprocess_grayscale(image_path):
    img = Image.open(image_path)

    # Convert to grayscale
    img = img.convert('L')  # 'L' = 8-bit grayscale

    # Optionally resize for better OCR (Tesseract works best at ~300 DPI)
    # Scale up small images
    width, height = img.size
    if width < 800:
        scale = 800 / width
        new_size = (int(width * scale), int(height * scale))
        img = img.resize(new_size, Image.LANCZOS)

    return img

img = preprocess_grayscale('scan.jpg')
text = pytesseract.image_to_string(img)
print(text[:300])

Görüntü Ön İşleme: Eşikleme

Eşikleme, gri tonlamalı bir görüntüyü tamamen siyah ve beyaza dönüştürür. Bu işlem gri gölgeleri, düzensiz aydınlatmayı ve arka plan gürültüsünü kaldırarak metnin OCR için keskin biçimde öne çıkmasını sağlar.

from PIL import Image, ImageFilter
import numpy as np

def apply_threshold(img):
    # Method 1: Simple fixed threshold
    img_array = np.array(img)
    threshold = 128
    binary = np.where(img_array > threshold, 255, 0).astype(np.uint8)
    return Image.fromarray(binary)

def adaptive_threshold(img):
    # Method 2: Otsu's method via OpenCV (better for uneven lighting)
    try:
        import cv2
        img_array = np.array(img)
        _, binary = cv2.threshold(
            img_array, 0, 255,
            cv2.THRESH_BINARY + cv2.THRESH_OTSU
        )
        return Image.fromarray(binary)
    except ImportError:
        return apply_threshold(img)

img = preprocess_grayscale('uneven_scan.png')
img_clean = adaptive_threshold(img)
text = pytesseract.image_to_string(img_clean)
print(text[:300])

Görüntü Ön İşleme: Eğiklik Düzeltme

Taranmış belgeler çoğu zaman biraz döndürülmüş olur. Yalnızca 2 derecelik bir eğim bile OCR doğruluğunu önemli ölçüde azaltır. Eğiklik düzeltme, görüntüyü OCR motoruna göndermeden önce döndürme açısını algılar ve düzeltir.

import numpy as np
from PIL import Image

def deskew(img):
    try:
        import cv2
        img_array = np.array(img)

        # Find rotation angle using Hough line transform
        edges = cv2.Canny(img_array, 50, 150, apertureSize=3)
        lines = cv2.HoughLines(edges, 1, np.pi/180, threshold=100)

        if lines is None:
            return img  # no lines detected, return unchanged

        angles = []
        for line in lines:
            rho, theta = line[0]
            angle = np.degrees(theta) - 90
            if -45 < angle < 45:
                angles.append(angle)

        if not angles:
            return img

        median_angle = np.median(angles)
        if abs(median_angle) > 0.5:  # only deskew if significant tilt
            print(f'Deskewing by {median_angle:.2f} degrees')
            return img.rotate(-median_angle, expand=True, fillcolor=255)
        return img
    except ImportError:
        return img  # OpenCV not available — skip deskew

Tesseract Dil Seçenekleri

Tesseract 100'den fazla dili destekler. Dil paketlerini işletim sisteminizin paket yöneticisiyle indirin. Birden fazla dil içeren belgelerde, dilleri + ayıracıyla belirtin.

import pytesseract
from PIL import Image

# List available languages
import subprocess
result = subprocess.run(['tesseract', '--list-langs'], capture_output=True, text=True)
print('Available languages:')
print(result.stdout)

# Single language
text_en = pytesseract.image_to_string(Image.open('doc.png'), lang='eng')

# Multiple languages (auto-detect best match)
text_multi = pytesseract.image_to_string(
    Image.open('doc.png'),
    lang='eng+fra+deu'  # English + French + German
)

# Tesseract config options for better accuracy
custom_config = r'--oem 3 --psm 6'  # OEM 3=LSTM, PSM 6=assume uniform block of text
text_tuned = pytesseract.image_to_string(
    Image.open('doc.png'),
    config=custom_config
)

EasyOCR: Derin Öğrenme Tabanlı

EasyOCR, derin öğrenme modelleri kullanır ve bozulmuş görüntülerde, eğri metinlerde ve Latin alfabesi dışındaki yazı sistemlerinde Tesseract'tan daha iyi sonuç verir. İşletim sistemi düzeyinde kurulum gerektirmez.

pip install easyocr komutuyla yükleyin. İlk çalıştırmada model ağırlıkları (~200 MB) indirilir.

import easyocr

# Initialize reader (downloads model on first run)
reader = easyocr.Reader(
    ['en', 'tr'],  # list of languages
    gpu=False       # set True if CUDA available
)

# Read text from image
results = reader.readtext('scanned_page.png')

for (bbox, text, confidence) in results:
    print(f'Text: {text!r:30} Confidence: {confidence:.2f}')
    # bbox = [[x1,y1],[x2,y2],[x3,y3],[x4,y4]] (four corners)

# Get plain text only
text_only = ' '.join(result[1] for result in results)
print('Full text:', text_only[:300])

Çok Dilli Belgeler İçin EasyOCR

EasyOCR, birden fazla dilin kullanıldığı belgeleri iyi işler. Bu özellik uluslararası sözleşmeler, birden fazla dilde açıklamalar içeren araştırma makaleleri veya teknik terimleri farklı bir yazı sisteminde bulunan belgeler için kullanışlıdır.

import easyocr

# For Arabic-English mixed document
reader_ar = easyocr.Reader(['ar', 'en'], gpu=False)
results = reader_ar.readtext('arabic_contract.png')

# For CJK languages
reader_cjk = easyocr.Reader(['ch_sim', 'en'], gpu=False)  # Simplified Chinese + English
results_cjk = reader_cjk.readtext('chinese_report.png')

# Filter by confidence threshold
HIGH_CONFIDENCE = 0.7
def filter_confident_results(results, threshold=HIGH_CONFIDENCE):
    return [
        (bbox, text, conf)
        for bbox, text, conf in results
        if conf >= threshold
    ]

Tam Ön İşleme İşlem Hattı

Gri tonlama, eşikleme ve eğiklik düzeltme gibi tüm ön işleme adımlarını tek bir işlem hattı işlevinde birleştirin. OCR'yi temizlenmiş görüntü üzerinde çalıştırın ve hem metni hem de güven ölçümlerini döndürün.

import pytesseract
from PIL import Image

def ocr_pipeline(image_path, lang='eng', engine='tesseract'):
    print(f'Processing: {image_path}')

    # 1. Load
    img = Image.open(image_path)

    # 2. Preprocess
    img = img.convert('L')         # grayscale
    img = adaptive_threshold(img)  # binarize
    img = deskew(img)              # correct rotation

    # 3. OCR
    if engine == 'easyocr':
        reader = easyocr.Reader([lang], gpu=False)
        results = reader.readtext(image_path)
        text = ' '.join(r[1] for r in results if r[2] > 0.5)
    else:
        config = f'--oem 3 --psm 6 -l {lang}'
        text = pytesseract.image_to_string(img, config=config)

    # 4. Clean
    text = '\n'.join(
        line.strip() for line in text.splitlines()
        if line.strip()
    )
    return text

text = ocr_pipeline('invoice_scan.jpg')
print(text[:500])

Görüntü Tabanlı PDF'leri İşleme

Bazı PDF'ler, PDF kapsayıcısının içinde görüntü olarak saklanan taranmış sayfalar içerir. Bu «görüntü tabanlı PDF'leri» algılayın ve önce PyMuPDF ile görüntüleri çıkararak her sayfaya ayrı ayrı OCR uygulayın.

import fitz
from PIL import Image
import io
import pytesseract

def is_image_pdf(doc):
    # Check if first page has very little extractable text
    text = doc[0].get_text().strip()
    return len(text) < 50

def ocr_pdf(filepath):
    doc = fitz.open(filepath)
    if not is_image_pdf(doc):
        # Native text — no OCR needed
        return '\n'.join(doc[i].get_text() for i in range(len(doc)))

    print('Image PDF detected — running OCR')
    all_text = []

    for page_num in range(len(doc)):
        page = doc[page_num]
        # Render page as image at 300 DPI
        mat = fitz.Matrix(300/72, 300/72)  # scale to 300 DPI
        pix = page.get_pixmap(matrix=mat)
        img = Image.open(io.BytesIO(pix.tobytes('png')))
        text = pytesseract.image_to_string(img)
        all_text.append(f'--- Page {page_num+1} ---\n{text}')

    doc.close()
    return '\n'.join(all_text)

Güven Düzeyine Göre Filtreleme ve Son İşleme

OCR çıktısı, özellikle bozulmuş görüntülerde hatalar içerir. Düşük güven düzeyine sahip kelimeleri filtreleyerek, yaygın OCR hatalarını düzelterek (0 yerine O, 1 yerine l gibi) ve boşlukları normalleştirerek metne son işleme uygulayın.

import re

COMMON_OCR_ERRORS = {
    r'\b0([a-z])\b': r'O\1',
    r'\bl([0-9])\b': r'1\1',
    r'\|': 'I',
    r'  +': ' ',
}

def post_process_ocr(text):
    for pattern, replacement in COMMON_OCR_ERRORS.items():
        text = re.sub(pattern, replacement, text)
    lines = [line.strip() for line in text.splitlines()]
    return '\n'.join(line for line in lines if line)

def high_confidence_ocr(words_with_conf, min_confidence=60):
    words = [w for w, conf in words_with_conf if w.strip() and conf >= min_confidence]
    return post_process_ocr(' '.join(words))

fake_ocr_output = [('0range', 90), ('|s', 40), ('l5', 85), ('good', 95)]
print(high_confidence_ocr(fake_ocr_output))

Bilgi Kontrolü

OCR'den önce bir görüntüye eşikleme (ikileştirme) uygulamanın amacı nedir?

Tekrar: Taranmış Belgeler İçin OCR

OCR, taranmış görüntüleri makinelerin okuyabileceği metne dönüştürür. pytesseract, Google Tesseract'ı sarmalar; 100'den fazla dil paketiyle hızlı ve olgundur. EasyOCR derin öğrenme kullanır ve bozulmuş görüntülerle çok dilli metinleri daha iyi işler.

Her zaman ön işleme uygulayın: gri tonlamaya dönüştürün, ikileştirme için Otsu eşiklemesini uygulayın ve döndürmeyi düzeltmek için eğikliği giderin. Görüntü tabanlı PDF'lerde sayfaları PyMuPDF ile yüksek DPI değerine sahip görüntüler olarak oluşturun, ardından OCR çalıştırın. Gürültüyü dışlamak için sonuçları güven eşiğine göre filtreleyin.

Sıkça Sorulan Sorular

“Taranmış Belgeler İçin OCR” dersi ücretsiz mi?

Evet — “Taranmış Belgeler İçin OCR” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Agents kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Agents kursu toplamda 4 dersten oluşur.

“Taranmış Belgeler İçin OCR” dersinde ne öğreneceğim?

pytesseract aracılığıyla Tesseract, görüntü ön işleme ve doğruluğu artırma. AI Agents ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

AI Agents öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Agents, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Taranmış Belgeler İçin OCR” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu AI Agents dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Agents dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. PyMuPDF ve pdfplumber ile PDF Ayrıştırma
  2. Taranmış Belgeler İçin OCR
  3. Çok Belgeli Soru-Cevap Aracıları
  4. Belge Sınıflandırma ve Yönlendirme
← AI Agents Sayfasına Dön