Zaawansowane OCR dla współczesnych wyzwań związanych z dokumentami
Dokładnie ekstrahuj tekst ze zeskanowanych dokumentów, zdjęć i plików PDF dzięki rozpoznawaniu opartemu na głębokim uczeniu
Co to jest EasyOCR?
EasyOCR to biblioteka optycznego rozpoznawania znaków (OCR) o otwartym kodzie źródłowym, opracowana przez Jaided AI, przeznaczona do ekstrakcji tekstu z obrazów i zeskanowanych dokumentów z wysoką dokładnością. Zbudowana na PyTorch, obsługuje ponad 80 języków, w tym łaciński, chiński, arabski i inne. EasyOCR jest znany ze swojej łatwości użycia - wymaga tylko kilku linii kodu do implementacji, co czyni go doskonałym wyborem dla programistów i badaczy pracujących nad projektami rozpoznawania tekstu. Dzięki wstępnie wytrenowanym modelom głębokiego uczenia może skutecznie wykrywać i rozpoznawać tekst w różnych czcionkach, stylach pisma ręcznego i na złożonych tłach. Niezależnie od tego, czy chodzi o automatyczne przetwarzanie dokumentów, rozpoznawanie tablic rejestracyjnych czy ekstrakcję tekstu z obrazów, EasyOCR zapewnia wydajne i lekkie rozwiązanie. System łączy:
- Wykrywanie wielomodelowe: Lokalizacja tekstu oparta na CRAFT wzmocniona przez ResNet
- Adaptacyjne rozpoznawanie: Modele specyficzne dla skryptów (CRNN dla łacińskiego, Transformer dla CJK)
- Przetwarzanie świadome kontekstu: Rekonstrukcja akapitów i zachowanie kolejności czytania
Testy wydajności pokazują spójne wyniki dla różnych typów dokumentów:
Typ dokumentu | Dokładność | Przepustowość | Sprzęt |
---|---|---|---|
Dokumenty biznesowe | 98.6% | 42 strony/min | NVIDIA T4 |
Obrazy z telefonów | 94.2% | 28 obrazów/min | Google Colab GPU |
Archiwa historyczne | 89.1% | 15 stron/min | Klaster CPU |
Architektura przetwarza dokumenty w trzech zoptymalizowanych etapach:
- Wykrywanie: Segmentacja obszarów tekstu na poziomie pikseli
- Rozpoznawanie: Predykcja sekwencji z modelowaniem językowym
- Rekonstrukcja: Mapowanie relacji przestrzennych
Podstawowe możliwości techniczne
1. Zaawansowane wykrywanie tekstu
Podsystem wykrywania obejmuje:
- Generowanie mapy cieplnej na poziomie znaków
- Obsługa obszarów tekstu o dowolnym kształcie
- Obsługa wielu orientacji (0-360°)
- Tłumienie szumu tła
2. Hybrydowy system rozpoznawania
Modele rozpoznawania są zoptymalizowane dla poszczególnych skryptów:
- Łaciński/Cyrylica: CRNN z 7 warstwami CNN + BiLSTM
- Chiński/Japoński/Koreański: Transformer z 12 głowicami uwagi
- Arabski/Hebrajski: BiLSTM prawy-do-lewy z niestandardową tokenizacją
3. Funkcje dla przedsiębiorstw
- Automatyczna ocena jakości
- Konfigurowalne kompromisy precyzji/pełności
- Alokacja zasobów świadoma sprzętu
Instalacja i konfiguracja
Wymagania systemowe
Komponent | Rozwój | Produkcja |
---|---|---|
Python | 3.6+ | 3.8+ |
Pamięć | 8GB | 16GB+ |
GPU | Opcjonalne | NVIDIA (CUDA 11.8+) |
Opcje instalacji
Podstawowa instalacja
pip install easyocr # Instaluje tylko zależności CPU
Obsługa GPU (Linux/Windows)
pip install easyocr torch torchvision --index-url https://download.pytorch.org/whl/cu118
Docker (Wdrożenie produkcyjne)
docker run -it --gpus all -v $(pwd):/data \
-e LANG_LIST="en,fr,es" \
jaidedai/easyocr
Praktyczne przykłady implementacji
1. Produkcyjny pipeline dokumentów
Kompletny przepływ pracy OCR z wstępnym przetwarzaniem i walidacją:
Przetwarzanie gotowe do produkcji
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):
# Poprawa kontrastu
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])
}
# Użycie
ocr = DocumentOCR(languages=['en','fr'])
result = ocr.process('legal_contract.jpg')
print(f"Średnie zaufanie: {result['confidence']:.2%}")
2. Przetwarzanie faktur wsadowych
Ekstrakcja kluczowych pól z wielu formatów faktur:
Ekstrakcja danych z faktur
import easyocr
import re
from pathlib import Path
reader = easyocr.Reader(['en'])
INVOICE_PATTERNS = {
'invoice_no': r'Faktura\s*Nr[:#]?\s*([A-Z0-9-]+)',
'date': r'Data[:]?\s*(\d{2}[/-]\d{2}[/-]\d{4})',
'amount': r'Razem\s*do\s*zapłaty[:]?\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('/faktury/')
Optymalizacja wydajności
Akceleracja GPU
- Przetwarzanie wsadowe: Optymalne rozmiary partii (4-16 w zależności od pamięci GPU)
- Zarządzanie pamięcią: Automatyczny podział na części dla dużych dokumentów
- Mieszana precyzja: Wnioskowanie FP16 z Tensor Cores
Dostrajanie dokładności
- Progi kontrastu: Dostosuj
contrast_ths
dla skanów niskiej jakości - Filtrowanie rozmiaru tekstu: Ustaw
min_size
aby ignorować mały tekst - Priorytetyzacja języków: Kolejność języków według oczekiwanego występowania