trOCR: революция в распознавании текста

Достигайте человеческой точности в распознавании печатного, рукописного и многоязычного текста.

Что такое trOCR API?

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

Ключевые преимущества:

  • Точность на уровне человека: Эффективно распознает рукописный и искаженный текст
  • Многоязычная поддержка: Предобученные модели для английского, французского, немецкого и других языков
  • Комплексное решение: Объединяет обнаружение и распознавание текста в едином процессе
  • Простая интеграция: Работает на базе библиотеки Hugging Face Transformers

От оцифровки архивов до обработки документов — trOCR устанавливает новый стандарт точности OCR.

GitHub

Статистика GitHub

Имя:
Язык:
Звезды:
Вилки:
Лицензия:
Репозиторий последний раз обновлялся на

Почему стоит выбрать trOCR?

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

Установка

Требования: PyTorch/TensorFlow и библиотека Hugging Face Transformers. Для максимальной производительности рекомендуется GPU:

Установка через PyTorch (рекомендуется GPU)


pip install transformers torch torchvision
pip install datasets  # Опционально для тонкой настройки

Примечание: Модели microsoft/trocr-base требуют ~1.5GB места на диск (для печатного/рукописного вариантов). Минимум 8GB RAM для пакетной обработки.

Примеры кода

Практические примеры работы с trOCR (требуется установка зависимостей):

Пример работы trOCR с разными типами текста

Пример 1: Распознавание рукописного текста

Специализированная модель (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")
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

ocr = pipeline("image-to-text", model="microsoft/trocr-base-printed")
results = ocr(Image.open("документ.png").convert("RGB"))

for idx, item in enumerate(results):
    print(f"Страница {idx+1}: {item['generated_text']}")

Производительность: ~3 страницы/сек на NVIDIA T4 GPU.

Пример 3: Пакетная обработка

Оптимизация для больших объемов:

Параллельное выполнение


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)

# Обработка нескольких документов
documents = ["doc1.jpg", "doc2.jpg", "doc3.jpg"]
images = [Image.open(doc).convert("RGB") for doc in documents]

pixel_values = processor(images, return_tensors="pt").pixel_values.to(device)
texts = processor.batch_decode(model.generate(pixel_values), skip_special_tokens=True)

for doc, text in zip(documents, texts):
    print(f"{doc}: {text[:100]}...")  # Вывод первых 100 символов

Рекомендуемые настройки:

Видеопамять GPUРазмер пакета
8GB4-8 изображений (1024×768)
16GB+16-32 изображений

Дополнительные возможности

Методы для улучшения результатов:

  • Предобработка:

    Улучшение качества

    
        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,
            evaluation_strategy="steps"
        )
        
    

Применение на практике

Ключевые сценарии использования:

  • Цифровые архивы: Точная оцифровка исторических документов
  • Автоматизация бизнеса: Обработка счетов и договоров
  • Доступность: Преобразование изображений в текст
  • Анализ данных: Извлечение информации из анкет

Благодаря постоянным обновлениям Microsoft и open-source сообщества, trOCR продолжает развивать технологии распознавания текста.

Похожие Продукты

 Русский