trOCR: Революція у розпізнаванні тексту за допомогою трансформерів

Досягайте людської точності у видобуванні тексту з друкованих, рукописних та багатомовних джерел.

Що таке API trOCR?

trOCR (Transformer-based Optical Character Recognition) — це інноваційна модель OCR від Microsoft, яка використовує архітектуру трансформерів для надзвичайно точного розпізнавання тексту. На відміну від традиційних OCR-систем, які покладаються лише на згорткові мережі, trOCR поєднує Vision Transformers (ViT) з послідовним моделюванням, що дозволяє розуміти контекст і просторові зв'язки в тексті — навіть для складних вхідних даних, таких як рукописні нотатки, скани низької якості чи складні шрифти.

Ключові переваги trOCR:

  • Розпізнавання на рівні людини: Чудово справляється з рукописним та спотвореним текстом, де традиційний OCR зазнає невдач
  • Багатомовна підтримка: Попередньо навчені моделі для англійської, французької, німецької та інших мов
  • Комплексне рішення: Поєднує виявлення та розпізнавання тексту в єдиному потоці
  • Легка інтеграція: Побудовано на бібліотеці Hugging Face Transformers

Від оцифрування історичних архівів до обробки рахунків — trOCR встановлює новий стандарт якості OCR у реальних застосунках.

GitHub

Статистика GitHub

Ім'я:
Мова:
зірки:
Вилки:
Ліцензія:
Репозиторій востаннє оновлено о

Чому варто обрати trOCR?

  • На основі трансформерів: На 15-20% точність за CNN-моделей у тестах на кшталт IAM Handwriting
  • Спеціалізація на рукописі: Модель trocr-base-handwritten досягає >90% точності для рукописного тексту
  • Мінімальна підготовка: Стійкий до варіацій шрифтів, орієнтації та фонового шуму
  • Пакетна обробка: Обробляє набори зображень із майже лінійним прискоренням на GPU
  • Налаштування: Точне налаштування для конкретних потреб (наприклад, медичні рецепти, чеки)

Встановлення

trOCR вимагає PyTorch або TensorFlow та бібліотеку Hugging Face Transformers. Для найкращої продуктивності рекомендується середовище з GPU:

Встановлення з PyTorch (рекомендується GPU)


pip install transformers torch torchvision
pip install datasets  # Необов'язково для точного налаштування

Примітка: Моделі microsoft/trocr-base вимагають ~1.5GB дискового простору на варіант (друкований/рукописний). Переконайтеся, що є достатньо пам'яті (8GB+ для пакетної обробки).

Приклади коду

Дослідіть можливості trOCR за допомогою цих практичних прикладів. Усі приклади передбачають встановлені залежності.

trOCR обробляє рукописний та друкований текст

Приклад 1: Розпізнавання рукописного тексту

Цей приклад демонструє можливості trOCR у розшифруванні рукопису. Модель (trocr-base-handwritten) навчена на базі даних IAM Handwriting, ідеальна для нотаток, листів чи історичних документів.

Розпізнавання рукопису


from transformers import TrOCRProcessor, VisionEncoderDecoderModel
from PIL import Image

# Завантажити обробник та модель (спеціалізовані для рукопису)
processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-handwritten")
model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-handwritten")

# Відкрити зображення та підготувати
image = Image.open("рукописна_нотатка.jpg").convert("RGB")  # Переконайтеся у форматі RGB
pixel_values = processor(image, return_tensors="pt").pixel_values  # Нормалізувати та змінити розмір

# Згенерувати передбачення тексту
generated_ids = model.generate(pixel_values)
text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]

print(f"Розпізнаний текст: {text}")

Порада: Для найкращих результатів з рукописом:

  • Використовуйте скани з 300+ DPI
  • Забезпечте належне освітлення без тіней
  • Обрізайте до текстових областей, де можливо

Приклад 2: Обробка друкованих документів

Для друкованого тексту (книги, рахунки тощо) модель trocr-base-printed забезпечує майже ідеальну точність:

Видобування друкованого тексту


from transformers import pipeline
from PIL import Image

# Використовуйте pipeline Hugging Face для простоти
ocr = pipeline("image-to-text", model="microsoft/trocr-base-printed")

# Обробити документ
image = Image.open("договір.png").convert("RGB")  # Конвертувати у RGB
results = ocr(image)

# Структуровані результати
for idx, item in enumerate(results):
    print(f"Сторінка {idx + 1}: {item['generated_text']}")

Продуктивність: На GPU NVIDIA T4 обробляє ~3 сторінки/сек. Для масових операцій використовуйте пакетну обробку (див. Приклад 3).

Приклад 3: Пакетна обробка для ефективності

trOCR підтримує пакетне виведення для максимального використання апаратного забезпечення:

Паралельне видобування тексту


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

# Ініціалізувати
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)

# Підготувати пакет
image_paths = ["doc1.jpg", "doc2.jpg", "doc3.jpg"]
images = [Image.open(path).convert("RGB") for path in image_paths]

# Обробити пакет
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)

# Показати результати
for path, text in zip(image_paths, texts):
    print(f"{path}: {text[:50]}...")  # Показати перші 50 символів

Рекомендації щодо розміру пакету:

GPU VRAMРекомендований розмір пакету
8GB4-8 зображень (1024x768)
16GB+16-32 зображень

Додаткові поради

Для подальшого покращення продуктивності trOCR:

  • Попередня обробка: Використовуйте OpenCV для вирівнювання та корекції контрасту:

    Покращення зображення

    
        import cv2
        img = cv2.imread("документ_низької_якості.jpg")
        img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)  # Виправити орієнтацію
        img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]  # Бінаризувати
        
    
  • Точне налаштування: Адаптуйте до своїх даних:

    Скрипт для налаштування

    
        from transformers import Seq2SeqTrainingArguments
        args = Seq2SeqTrainingArguments(
            output_dir="./trocr-налаштована",
            per_device_train_batch_size=8,
            num_train_epochs=3,
            save_steps=1000,
            evaluation_strategy="steps"
        )
        # Див. документацію Hugging Face для повного налаштування
        
    

Висновок

trOCR перевизначає можливості оптичного розпізнавання символів, поєднуючи архітектуру трансформерів з комп'ютерним зором. Його здатність обробляти все — від нотаток до багатомовних документів — робить його незамінним для:

  • Архівних проектів: Оцифруйте історичні рукописи зі збереженням форматування
  • Медичних/юридичних процесів: Видобувайте текст із конфіденційних документів з аудит-треками
  • Доступності: Генеруйте альтернативний текст для зображень у масштабі

Завдяки постійним покращенням від Microsoft та спільноти open-source, trOCR продовжує розширювати межі технологій розпізнавання тексту.

Подібні Продукти

 Ukrainian