Розширене 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 головами уваги
  • Арабська/Іврит: 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 для ігнорування дрібного тексту
  • Пріоритезація мов: Упорядкуйте мови за очікуваною частотою

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

 Ukrainian