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.
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.
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 VRAM | Zalecany rozmiar wsadu |
---|---|
8GB | 4-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
- docTR API - Optyczne rozpoznawanie znaków (OCR) w Pythonie
- EasyOCR API – Kompleksowe rozpoznawanie znaków (OCR) w Pythonie
- pdfminer.six Biblioteka Pythona | Wyodrębnij tekst z plików PDF
- PyMuPDF Python API | Zaawansowane parsowanie i ekstrakcja PDF
- pypdf | Biblioteka Pythona do wydajnego analizowania plików PDF