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

Постигнете точност на ниво човек при извличане на текст от печатан, ръкописен и многоезичен content.

Какво е trOCR API?

trOCR (Transformer-based Optical Character Recognition) е революционен OCR модел на Microsoft, който използва силата на архитектурите с трансформери за безпрецедентна точност при разпознаване на текст. За разлика от традиционните OCR системи, които разчитат само на конволюционни мрежи, trOCR интегрира vision transformers (ViTs) с sequence-to-sequence моделиране, което му позволява да разбира контекста и пространствените взаимоотношения в текста — дори при сложни входни данни като ръкописни бележки, сканирани документи с ниска резолюция или сложни скриптове.

Основни предимства на trOCR:

  • Разпознаване като човек: Отлично представяне при четене на ръкописен текст и деформирани текстове, където традиционните OCR се провалят.
  • Многоезичност: Предварително обучени модели поддържат английски, френски, немски и други езици, с възможност за фина настройка за допълнителни езици.
  • Цялостен процес: Комбинира откриване и разпознаване на текст в един опростен процес.
  • Лесна интеграция: Изграден върху библиотеката Transformers на Hugging Face за лесно внедряване в съществуващи работни потоци.

От дигитализиране на исторически архиви до обработка на фактури, trOCR определя нов стандарт за OCR производителност в реални приложения.

GitHub

Статистика на GitHub

Име:
език:
звезди:
Вилици:
Разрешително:
Хранилището е последно актуализирано на

Защо да изберете trOCR?

  • На база трансформери: Надминава CNN-базираните модели с 15-20% по-висока точност при стандартни набори от данни като 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 дисково пространство за вариант (печатан/ръкописен). Уверете се, че имате достатъчно място и RAM (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("handwritten_note.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("contract.png").convert("RGB")  # Конвертиране в RGB
results = ocr(image)

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

Бележка за производителност: На NVIDIA T4 GPU, това обработва ~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("low_quality_doc.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-finetuned",
            per_device_train_batch_size=8,
            num_train_epochs=3,
            save_steps=1000,
            evaluation_strategy="steps"
        )
        # Вижте документацията на Hugging Face за пълна настройка на обучението
        
    

Заключение

trOCR предефинира възможностите на оптичното разпознаване на символи чрез комбиниране на архитектури с трансформери и компютърно зрение. Способността му да обработва всичко — от ръкописни бележки до сложни многоезични документи — го прави незаменим за:

  • Архивни проекти: Дигитализиране на исторически ръкописи с запазен формат.
  • Юридически/медицински процеси: Извличане на текст от чувствителни документи с проследимост.
  • Инженеринг за достъпност: Генериране на алтернативен текст за изображения в мащаб.

С непрекъснати подобрения от Microsoft и общността с отворен код, trOCR продължава да разширява границите на технологията за разпознаване на текст.

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

 Bulgarian