Напреднало OCR за съвременни предизвикателства

Ефективно извличане на текст от сканирани документи, снимки и PDF файлове с технологии за дълбоко обучение

Какво е EasyOCR?

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

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

Достигнати резултати при различни типове документи:

Тип документТочностПроизводителностХардуер
Бизнес документи98.6%42 стр./минNVIDIA T4
Снимки от мобилни устройства94.2%28 img/мин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 за игнориране на малък текст
  • Приоритизиране на езици: Подредба според очакваната честота

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

 Bulgarian