1. Produkty
  2.   Parser
  3.   Python
  4.   EasyOCR
 
  

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 dokumentuDokładnośćPrzepustowośćSprzęt
Dokumenty biznesowe98.6%42 strony/minNVIDIA T4
Obrazy z telefonów94.2%28 obrazów/minGoogle Colab GPU
Archiwa historyczne89.1%15 stron/minKlaster CPU

EasyOCR do rozpoznawania i ekstrakcji tekstu OCR

Architektura przetwarza dokumenty w trzech zoptymalizowanych etapach:

  1. Wykrywanie: Segmentacja obszarów tekstu na poziomie pikseli
  2. Rozpoznawanie: Predykcja sekwencji z modelowaniem językowym
  3. Rekonstrukcja: Mapowanie relacji przestrzennych
GitHub

Statystyki GitHuba

Nazwa:
Język:
Gwiazdy:
Widły:
Licencja:
Repozytorium zostało ostatnio zaktualizowane o godzinie

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

KomponentRozwójProdukcja
Python3.6+3.8+
Pamięć8GB16GB+
GPUOpcjonalneNVIDIA (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

Podobne Produkty

 Polish