Modern Belge Zorlukları için Gelişmiş OCR
Derin öğrenme destekli tanıma ile taranmış belgelerden, fotoğraflardan ve PDF'lerden metni hassas şekilde çıkarın
EasyOCR Nedir?
EasyOCR, Jaided AI tarafından geliştirilen, görüntülerden ve taranmış belgelerden yüksek doğrulukla metin çıkarmak için tasarlanmış açık kaynaklı bir Optik Karakter Tanıma (OCR) kütüphanesidir. PyTorch üzerine inşa edilmiş olup Latin, Çince, Arapça ve daha fazlası dahil 80'den fazla dili destekler. EasyOCR, yalnızca birkaç satır kodla uygulanabilen kullanım kolaylığıyla bilinir ve metin tanıma projeleri üzerinde çalışan geliştiriciler ve araştırmacılar için mükemmel bir seçimdir. Önceden eğitilmiş derin öğrenme modelleri sayesinde çeşitli yazı tiplerinde, el yazısı stillerinde ve karmaşık arka planlarda metni verimli şekilde tespit edip tanıyabilir. Otomatik belge işleme, plaka tanıma veya görüntü tabanlı metin çıkarma için olsun, EasyOCR güçlü ve hafif bir çözüm sunar. Sistem şunları birleştirir:
- Çoklu model tespiti: ResNet altyapısıyla güçlendirilmiş CRAFT tabanlı metin konumlandırma
- Uyarlanabilir tanıma: Betiğe özel modeller (Latin için CRNN, CJK için Transformer)
- Bağlam bilgili işleme: Paragraf yeniden oluşturma ve okuma sırasını koruma
Performans kıyaslamaları belge türleri arasında tutarlı sonuçlar gösterir:
Belge Türü | Doğruluk | İşlem Hızı | Donanım |
---|---|---|---|
İş belgeleri | %98.6 | 42 sayfa/dak | NVIDIA T4 |
Mobil çekim görüntüleri | %94.2 | 28 görüntü/dak | Google Colab GPU |
Tarihi arşivler | %89.1 | 15 sayfa/dak | CPU kümesi |
Mimari belgeleri üç optimize edilmiş aşamada işler:
- Tespit: Piksel seviyesinde metin bölgesi segmentasyonu
- Tanıma: Dil modellemesiyle dizi tahmini
- Yeniden oluşturma: Mekansal ilişki haritalama
Temel Teknik Yetenekler
1. Gelişmiş Metin Tespiti
Tespit alt sistemi şu özelliklere sahiptir:
- Karakter seviyesinde ısı haritası oluşturma
- Keyfi şekilli metin bölgesi işleme
- Çoklu yönlendirme desteği (0-360°)
- Arka plan gürültüsü bastırma
2. Hibrit Tanıma Sistemi
Tanıma modelleri betik türüne göre optimize edilmiştir:
- Latin/Kiril: 7 CNN katmanı + BiLSTM ile CRNN
- Çince/Japonca/Korece: 12 dikkat başlığı ile Transformer
- Arapça/İbranice: Sağdan sola özel tokenizasyonlu BiLSTM
3. Kurumsal Özellikler
- Otomatik kalite tahmini
- Yapılandırılabilir hassasiyet/geri çağırma dengeleri
- Donanım duyarlı kaynak ayırma
Kurulum & Yapılandırma
Sistem Gereksinimleri
Bileşen | Geliştirme | Üretim |
---|---|---|
Python | 3.6+ | 3.8+ |
Bellek | 8GB | 16GB+ |
GPU | İsteğe bağlı | NVIDIA (CUDA 11.8+) |
Kurulum Seçenekleri
Temel Kurulum
pip install easyocr # Yalnızca CPU bağımlılıklarını yükler
GPU Desteği (Linux/Windows)
pip install easyocr torch torchvision --index-url https://download.pytorch.org/whl/cu118
Docker (Üretim Dağıtımı)
docker run -it --gpus all -v $(pwd):/data \
-e LANG_LIST="en,fr,es" \
jaidedai/easyocr
Pratik Uygulama Örnekleri
1. Üretim Belge İşleme Hattı
Ön işleme ve doğrulama ile tam OCR iş akışı:
Üretime Hazır İşleme
from easyocr import Reader
import cv2
import numpy as np
class DocumentOCR:
def __init__(self, languages=['en']):
self.reader = Reader(languages, gpu=True)
def preprocess(self, image):
# Kontrast iyileştirme
lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8))
limg = cv2.merge([clahe.apply(l), a, b])
return cv2.cvtColor(limg, cv2.COLOR_LAB2BGR)
def process(self, image_path):
img = cv2.imread(image_path)
processed = self.preprocess(img)
results = self.reader.readtext(processed,
batch_size=4,
paragraph=True,
min_size=50,
text_threshold=0.8)
return {
'text': [r[1] for r in results],
'confidence': np.mean([r[2] for r in results])
}
# Kullanım
ocr = DocumentOCR(languages=['en','fr'])
result = ocr.process('legal_contract.jpg')
print(f"Ortalama Güven: {result['confidence']:.2%}")
2. Toplu Fatura İşleme
Çeşitli fatura formatlarından anahtar alanları çıkarın:
Fatura Veri Çıkarma
import easyocr
import re
from pathlib import Path
reader = easyocr.Reader(['en'])
INVOICE_PATTERNS = {
'invoice_no': r'Invoice\s*Number[:#]?\s*([A-Z0-9-]+)',
'date': r'Date[:]?\s*(\d{2}[/-]\d{2}[/-]\d{4})',
'amount': r'Total\s*Due[:]?\s*\$?(\d+\.\d{2})'
}
def process_invoices(folder):
results = []
for invoice in Path(folder).glob('*.pdf'):
text = '\n'.join(reader.readtext(str(invoice), detail=0))
extracted = {field: re.search(pattern, text)
for field, pattern in INVOICE_PATTERNS.items()}
results.append({
'file': invoice.name,
'data': {k: v.group(1) if v else None
for k, v in extracted.items()}
})
return results
invoices_data = process_invoices('/invoices/')
Performans Optimizasyonu
GPU Hızlandırma
- Toplu İşleme: GPU belleğine göre optimal parti boyutları (4-16)
- Bellek Yönetimi: Büyük belgeler için otomatik bölme
- Karışık Hassasiyet: Tensor Çekirdekleri ile FP16 çıkarım
Doğruluk Ayarı
- Kontrast Eşikleri: Düşük kaliteli taramalar için
contrast_ths
ayarı - Metin Boyutu Filtreleme: Küçük metinleri görmezden gelmek için
min_size
belirleme - Dil Önceliklendirme: Beklenen kullanım sıklığına göre dilleri sıralama