Продвинутое OCR для современных задач работы с документами

Точно извлекайте текст из сканированных документов, фотографий и PDF с помощью распознавания на основе глубокого обучения

Что такое EasyOCR?

EasyOCR — это библиотека оптического распознавания символов (OCR) с открытым исходным кодом, разработанная Jaided AI, предназначенная для извлечения текста из изображений и сканированных документов с высокой точностью. Построенная на PyTorch, она поддерживает более 80 языков, включая латиницу, китайский, арабский и другие. EasyOCR известен своей простотой использования — для работы требуется всего несколько строк кода, что делает его отличным выбором для разработчиков и исследователей, работающих над проектами распознавания текста. С его предобученными моделями глубокого обучения он может эффективно обнаруживать и распознавать текст в различных шрифтах, рукописных стилях и сложных фонах. Будь то автоматизированная обработка документов, распознавание номерных знаков или извлечение текста из изображений, EasyOCR предоставляет мощное и легкое решение. Система сочетает:

  • Мультимодельное обнаружение: Локализация текста на основе CRAFT с архитектурой ResNet
  • Адаптивное распознавание: Специфичные модели для разных письменностей (CRNN для латиницы, Transformer для CJK)
  • Контекстная обработка: Восстановление абзацев и сохранение порядка чтения

Тесты производительности показывают стабильные результаты для разных типов документов:

Тип документаТочностьПропускная способностьОборудование
Бизнес-документы98.6%42 стр./минNVIDIA T4
Фото с мобильных устройств94.2%28 изображений/минGoogle Colab GPU
Исторические архивы89.1%15 стр./минCPU кластер

EasyOCR для распознавания и извлечения текста

Архитектура обрабатывает документы в три оптимизированных этапа:

  1. Обнаружение: Пиксельная сегментация текстовых областей
  2. Распознавание: Предсказание последовательностей с языковым моделированием
  3. Реконструкция: Отображение пространственных отношений
GitHub

Статистика GitHub

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

Ключевые технические возможности

1. Продвинутое обнаружение текста

Подсистема обнаружения включает:

  • Генерацию тепловых карт на уровне символов
  • Обработку текстовых областей произвольной формы
  • Поддержку множественной ориентации (0-360°)
  • Подавление фонового шума

2. Гибридная система распознавания

Модели распознавания оптимизированы для разных письменностей:

  • Латиница/Кириллица: CRNN с 7 слоями CNN + BiLSTM
  • Китайский/Японский/Корейский: Transformer с 12 attention heads
  • Арабский/Иврит: BiLSTM справа-налево с кастомной токенизацией

3. Корпоративные функции

  • Автоматическая оценка качества
  • Настраиваемый баланс точности/полноты
  • Аппаратно-зависимое распределение ресурсов

Установка и настройка

Системные требования

КомпонентРазработкаПродакшен
Python3.6+3.8+
Память8GB16GB+
GPUОпциональноNVIDIA (CUDA 11.8+)

Варианты установки

Базовая установка


pip install easyocr  # Устанавливает только CPU-зависимости

Поддержка GPU (Linux/Windows)


pip install easyocr torch torchvision --index-url https://download.pytorch.org/whl/cu118

Docker (Продакшен-развертывание)


docker run -it --gpus all -v $(pwd):/data \
  -e LANG_LIST="en,fr,es" \
  jaidedai/easyocr

Практические примеры реализации

1. Промышленный документный пайплайн

Полный OCR-процесс с предобработкой и валидацией:

Готовое к продакшену решение


from easyocr import Reader
import cv2
import numpy as np

class DocumentOCR:
    def __init__(self, languages=['en']):
        self.reader = Reader(languages, gpu=True)
        
    def preprocess(self, image):
        # Улучшение контраста
        lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
        l, a, b = cv2.split(lab)
        clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8))
        limg = cv2.merge([clahe.apply(l), a, b])
        return cv2.cvtColor(limg, cv2.COLOR_LAB2BGR)
    
    def process(self, image_path):
        img = cv2.imread(image_path)
        processed = self.preprocess(img)
        results = self.reader.readtext(processed,
                                    batch_size=4,
                                    paragraph=True,
                                    min_size=50,
                                    text_threshold=0.8)
        return {
            'text': [r[1] for r in results],
            'confidence': np.mean([r[2] for r in results])
        }

# Использование
ocr = DocumentOCR(languages=['en','fr'])
result = ocr.process('legal_contract.jpg')
print(f"Средняя уверенность: {result['confidence']:.2%}")

2. Пакетная обработка счетов

Извлечение ключевых полей из счетов разных форматов:

Извлечение данных из счетов


import easyocr
import re
from pathlib import Path

reader = easyocr.Reader(['en'])

INVOICE_PATTERNS = {
    'invoice_no': r'Invoice\s*Number[:#]?\s*([A-Z0-9-]+)',
    'date': r'Date[:]?\s*(\d{2}[/-]\d{2}[/-]\d{4})',
    'amount': r'Total\s*Due[:]?\s*\$?(\d+\.\d{2})'
}

def process_invoices(folder):
    results = []
    for invoice in Path(folder).glob('*.pdf'):
        text = '\n'.join(reader.readtext(str(invoice), detail=0))
        extracted = {field: re.search(pattern, text) 
                    for field, pattern in INVOICE_PATTERNS.items()}
        results.append({
            'file': invoice.name,
            'data': {k: v.group(1) if v else None 
                     for k, v in extracted.items()}
        })
    return results
invoices_data = process_invoices('/invoices/')

Оптимизация производительности

GPU-ускорение

  • Пакетная обработка: Оптимальные размеры пакетов (4-16 в зависимости от памяти GPU)
  • Управление памятью: Автоматическое разделение больших документов
  • Смешанная точность: Вывод FP16 с Tensor Cores

Настройка точности

  • Пороги контраста: Настройте contrast_ths для плохих сканов
  • Фильтрация по размеру текста: Установите min_size для игнорирования мелкого текста
  • Приоритезация языков: Порядок языков по ожидаемой частоте

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

 Русский