Розширене 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 кластер |
Архітектура обробляє документи в три оптимізовані етапи:
- Виявлення: Піксельна сегментація текстових областей
- Розпізнавання: Прогнозування послідовностей з моделюванням мови
- Реконструкція: Відображення просторових відносин
Ключові технічні можливості
1. Розширене виявлення тексту
Підсистема виявлення включає:
- Генерацію теплових карт на рівні символів
- Обробку текстових областей довільної форми
- Підтримку множинної орієнтації (0-360°)
- Придушення фонового шуму
2. Гібридна система розпізнавання
Моделі розпізнавання оптимізовані для різних писемностей:
- Латиниця/Кирилиця: CRNN з 7 шарами CNN + BiLSTM
- Китайська/Японська/Корейська: Transformer з 12 головами уваги
- Арабська/Іврит: BiLSTM справа наліво з користувацькою токенізацією
3. Функції для підприємств
- Автоматична оцінка якості
- Налаштовуваний баланс точності/повноти
- Апаратно-залежний розподіл ресурсів
Встановлення та налаштування
Системні вимоги
Компонент | Розробка | Виробництво |
---|---|---|
Python | 3.6+ | 3.8+ |
Пам'ять | 8GB | 16GB+ |
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
для ігнорування дрібного тексту - Пріоритезація мов: Упорядкуйте мови за очікуваною частотою