trOCR: Rewolucja w rozpoznawaniu tekstu dzięki Transformerom

Osiągnij dokładność na poziomie ludzkim w rozpoznawaniu tekstu drukowanego, odręcznego i wielojęzycznego.

Czym jest trOCR API?

trOCR (Transformer-based Optical Character Recognition) to przełomowy model OCR firmy Microsoft, który wykorzystuje architekturę Transformerów do osiągnięcia niezrównanej dokładności w rozpoznawaniu tekstu. W przeciwieństwie do tradycyjnych systemów OCR opartych wyłącznie na sieciach konwolucyjnych, trOCR łączy vision transformers (ViT) z modelowaniem sekwencji, co pozwala na zrozumienie kontekstu i relacji przestrzennych w tekście - nawet dla trudnych danych wejściowych takich jak notatki odręczne, skany niskiej rozdzielczości czy złożone czcionki.

Kluczowe zalety trOCR:

  • Rozpoznawanie na poziomie ludzkim: Doskonale radzi sobie z pismem odręcznym i zniekształconym tekstem, gdzie tradycyjny OCR zawodzi.
  • Wielojęzyczność: Wstępnie wytrenowane modele obsługują angielski, francuski, niemiecki i inne języki, z możliwością dostosowania do kolejnych.
  • Kompleksowe rozwiązanie: Łączy wykrywanie i rozpoznawanie tekstu w jednym procesie.
  • Łatwa integracja: Zbudowany na bibliotece Transformers Hugging Face dla prostego wdrożenia w istniejących przepływach pracy.

Od digitalizacji historycznych archiwów po przetwarzanie faktur - trOCR wyznacza nowy standard wydajności OCR w rzeczywistych zastosowaniach.

GitHub

Statystyki GitHuba

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

Dlaczego wybrać trOCR?

  • Napędzany Transformerami: Przewyższa modele oparte na CNN o 15-20% dokładności w testach takich jak IAM Handwriting.
  • Specjalista od pisma odręcznego: Model trocr-base-handwritten osiąga ponad 90% dokładności dla tekstu odręcznego.
  • Minimalne przetwarzanie wstępne: Odporny na różnice w czcionkach, orientacji i szumie tła.
  • Skalowalność: Przetwarza partie obrazów z niemal liniowym przyspieszeniem na GPU.
  • Konfigurowalny: Możliwość dostosowania do specyficznych danych (np. recepty medyczne, paragony).

Instalacja

trOCR wymaga PyTorch lub TensorFlow oraz biblioteki Transformers Hugging Face. Dla optymalnej wydajności zalecane jest środowisko z GPU:

Instalacja z PyTorch (zalecane GPU)


pip install transformers torch torchvision
pip install datasets  # Opcjonalnie dla dostosowywania modeli

Uwaga: Modele microsoft/trocr-base wymagają ~1.5GB miejsca na dysku na wariant (drukowany/odręczny). Zapewnij wystarczającą ilość miejsca i RAM (8GB+ dla przetwarzania wsadowego).

Przykłady kodu

Poznaj możliwości trOCR dzięki tym praktycznym przykładom. Wszystkie przykłady zakładają zainstalowanie wymaganych zależności.

trOCR przetwarza tekst odręczny i drukowany

Przykład 1: Rozpoznawanie pisma odręcznego

Ten przykład demonstruje skuteczność trOCR w odczytywaniu pisma odręcznego. Model (trocr-base-handwritten) został wytrenowany na bazie danych IAM Handwriting Database, co czyni go idealnym do notatek, listów czy dokumentów historycznych.

Rozpoznawanie pisma odręcznego


from transformers import TrOCRProcessor, VisionEncoderDecoderModel
from PIL import Image

# Załaduj procesor i model (specjalizacja: pismo odręczne)
processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-handwritten")
model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-handwritten")

# Otwórz obraz i przygotuj
image = Image.open("notatka_odreczna.jpg").convert("RGB")  # Upewnij się o formacie RGB
pixel_values = processor(image, return_tensors="pt").pixel_values  # Normalizuj i zmień rozmiar

# Wygeneruj przewidywany tekst
generated_ids = model.generate(pixel_values)
text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]

print(f"Rozpoznany tekst: {text}")

Wskazówka: Dla najlepszych wyników z pismem odręcznym:

  • Używaj skanów o rozdzielczości 300+ DPI
  • Zapewnij odpowiednie oświetlenie bez cieni
  • Przycinaj do obszarów tekstu, jeśli to możliwe

Przykład 2: Przetwarzanie dokumentów drukowanych

Dla tekstu drukowanego (książki, faktury itp.) model trocr-base-printed oferuje niemal perfekcyjną dokładność. Ten przykład pokazuje przetwarzanie zeskanowanego dokumentu:

Rozpoznawanie tekstu drukowanego


from transformers import pipeline
from PIL import Image

# Użyj pipeline Hugging Face dla prostoty
ocr = pipeline("image-to-text", model="microsoft/trocr-base-printed")

# Przetwórz dokument
image = Image.open("umowa.png").convert("RGB")  # Konwertuj na RGB
results = ocr(image)

# Wyniki strukturalne
for idx, item in enumerate(results):
    print(f"Strona {idx + 1}: {item['generated_text']}")

Wydajność: Na karcie NVIDIA T4 przetwarza ~3 strony/sek. Dla operacji masowych używaj przetwarzania wsadowego (patrz Przykład 3).

Przykład 3: Przetwarzanie wsadowe dla efektywności

trOCR obsługuje wnioskowanie wsadowe dla maksymalnego wykorzystania sprzętu. Ten przykład przetwarza wiele obrazów równolegle:

Równoległe rozpoznawanie tekstu


import torch
from transformers import TrOCRProcessor, VisionEncoderDecoderModel
from PIL import Image

# Inicjalizuj
device = "cuda" if torch.cuda.is_available() else "cpu"
processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-printed")
model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-printed").to(device)

# Przygotuj wsad
image_paths = ["doc1.jpg", "doc2.jpg", "doc3.jpg"]
images = [Image.open(path).convert("RGB") for path in image_paths]

# Przetwórz wsad
pixel_values = processor(images, return_tensors="pt").pixel_values.to(device)
generated_ids = model.generate(pixel_values)
texts = processor.batch_decode(generated_ids, skip_special_tokens=True)

# Wyświetl wyniki
for path, text in zip(image_paths, texts):
    print(f"{path}: {text[:50]}...")  # Pokaż pierwsze 50 znaków

Wytyczne dotyczące rozmiaru wsadu:

GPU VRAMZalecany rozmiar wsadu
8GB4-8 obrazów (1024x768)
16GB+16-32 obrazów

Zaawansowane porady

Aby dodatkowo poprawić wydajność trOCR:

  • Przetwarzanie wstępne: Użyj OpenCV do prostowania i poprawy kontrastu:

    Ulepszanie obrazu

    
        import cv2
        img = cv2.imread("dokument_niskiej_jakosci.jpg")
        img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)  # Popraw orientację
        img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]  # Binaryzacja
        
    
  • Dostosowywanie modelu: Trenuj na własnych danych:

    Skrypt dostosowujący

    
        from transformers import Seq2SeqTrainingArguments
        args = Seq2SeqTrainingArguments(
            output_dir="./trocr-finetuned",
            per_device_train_batch_size=8,
            num_train_epochs=3,
            save_steps=1000,
            evaluation_strategy="steps"
        )
        # Pełna konfiguracja w dokumentacji Hugging Face
        
    

Podsumowanie

trOCR redefiniuje możliwości optycznego rozpoznawania znaków, łącząc architekturę Transformerów z technikami widzenia komputerowego. Jego zdolność do obsługi wszystkiego - od notatek po wielojęzyczne dokumenty - czyni go niezastąpionym dla:

  • Projektów archiwalnych: Digitalizuj historyczne manuskrypty z zachowaniem formatowania.
  • Procesów prawnych/medycznych: Wyodrębniaj tekst z wrażliwych dokumentów ze śladami audytu.
  • Technologii dostępności: Generuj tekst alternatywny dla obrazów na dużą skalę.

Dzięki ciągłym ulepszeniom Microsoft i społeczności open-source, trOCR stale przesuwa granice technologii rozpoznawania tekstu.

Podobne Produkty

 Polish