trOCR: Революція у розпізнаванні тексту за допомогою трансформерів
Досягайте людської точності у видобуванні тексту з друкованих, рукописних та багатомовних джерел.
Що таке API trOCR?
trOCR (Transformer-based Optical Character Recognition) — це інноваційна модель OCR від Microsoft, яка використовує архітектуру трансформерів для надзвичайно точного розпізнавання тексту. На відміну від традиційних OCR-систем, які покладаються лише на згорткові мережі, trOCR поєднує Vision Transformers (ViT) з послідовним моделюванням, що дозволяє розуміти контекст і просторові зв'язки в тексті — навіть для складних вхідних даних, таких як рукописні нотатки, скани низької якості чи складні шрифти.
Ключові переваги trOCR:
- Розпізнавання на рівні людини: Чудово справляється з рукописним та спотвореним текстом, де традиційний OCR зазнає невдач
- Багатомовна підтримка: Попередньо навчені моделі для англійської, французької, німецької та інших мов
- Комплексне рішення: Поєднує виявлення та розпізнавання тексту в єдиному потоці
- Легка інтеграція: Побудовано на бібліотеці Hugging Face Transformers
Від оцифрування історичних архівів до обробки рахунків — trOCR встановлює новий стандарт якості OCR у реальних застосунках.
Чому варто обрати 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 за допомогою цих практичних прикладів. Усі приклади передбачають встановлені залежності.
Приклад 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 | Рекомендований розмір пакету |
---|---|
8GB | 4-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 продовжує розширювати межі технологій розпізнавання тексту.