OCR avançat per a reptes de documents moderns

Extreu text amb precisió de documents escanejats, fotos i PDFs amb tecnologia d'aprenentatge profund

Què és EasyOCR?

EasyOCR és una biblioteca de codi obert per a Reconeixement Òptic de Caràcters (OCR) desenvolupada per Jaided AI, dissenyada per extreure text d'imatges i documents escanejats amb alta precisió. Basada en PyTorch, admet més de 80 llengües, incloent llatí, xinès, àrab i moltes altres. EasyOCR es destaca per la seva facilitat d'ús, necessitant només unes poques línies de codi per implementar, cosa que la converteix en una excel·lent opció per a desenvolupadors i investigadors que treballen en projectes de reconeixement de text. Amb els seus models pre-entrenats d'aprenentatge profund, pot detectar i reconèixer text eficientment en diversos tipus de lletra, estils d'escriptura manual i fons complexos. Tant per al processament automatitzat de documents, com per al reconeixement de matrícules o l'extracció de text d'imatges, EasyOCR ofereix una solució potent i lleugera. El sistema combina:

  • Detecció multimodel: Localització de text basada en CRAFT amb arquitectura ResNet millorada
  • Reconeixement adaptatiu: Models específics per a diferents escriptures (CRNN per a llatí, Transformer per a CJK)
  • Processament contextual: Reconstrucció de paràgrafs i preservació de l'ordre de lectura

Resultats de rendiment per tipus de document:

Tipus de documentPrecisióRendimentMaquinari
Documents comercials98.6%42 pàgines/minNVIDIA T4
Imatges de mòbils94.2%28 imatges/minGoogle Colab GPU
Arxius històrics89.1%15 pàgines/minCluster CPU

EasyOCR per al reconeixement i extracció de text

L'arquitectura processa documents en tres etapes optimitzades:

  1. Detecció: Segmentació de regions de text a nivell de píxel
  2. Reconeixement: Predicció de seqüències amb modelatge lingüístic
  3. Reconstrucció: Mapatge de relacions espacials
GitHub

Estadístiques de GitHub

Nom:
Llenguatge:
Estrelles:
Forquilles:
Llicència:
El repositori es va actualitzar per última vegada a

Capacitats tècniques principals

1. Detecció de text avançada

El subsistema de detecció inclou:

  • Generació de mapes de calor a nivell de caràcter
  • Maneig de regions de text amb formes arbitràries
  • Suport per a múltiples orientacions (0-360°)
  • Supressió de soroll de fons

2. Sistema de reconeixement híbrid

Models de reconeixement optimitzats per tipus d'escriptura:

  • Llatí/Ciríl·lic: CRNN amb 7 capes CNN + BiLSTM
  • Xinès/Japonès/Coreà: Transformer amb 12 caps d'atenció
  • Àrab/Hebreu: BiLSTM de dreta a esquerra amb tokenització personalitzada

3. Funcions empresarials

  • Avaluació automàtica de la qualitat
  • Compensació configurable precisió/recuperació
  • Assignació de recursos segons maquinari

Instal·lació i configuració

Requisits del sistema

ComponentDesenvolupamentProducció
Python3.6+3.8+
Memòria8GB16GB+
GPUOpcionalNVIDIA (CUDA 11.8+)

Opcions d'instal·lació

Instal·lació bàsica


pip install easyocr  # Instal·la només dependències de CPU

Suport GPU (Linux/Windows)


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

Docker (Desplegament en producció)


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

Exemples pràctics d'implementació

1. Pipeline de processament de documents per a producció

Flux de treball OCR complet amb preprocessament i validació:

Processament preparat per a producció


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):
        # Millora del contrast
        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])
        }

# Ús
ocr = DocumentOCR(languages=['en','fr'])
result = ocr.process('legal_contract.jpg')
print(f"Confiança mitjana: {result['confidence']:.2%}")

2. Processament per lots de factures

Extracció de camps clau de múltiples formats de factura:

Extracció de dades de factures


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/')

Optimització del rendiment

Acceleració GPU

  • Processament per lots: Mides de lot òptimes (4-16 depenent de la memòria GPU)
  • Gestió de memòria: Divisió automàtica per a documents grans
  • Precisió mixta: Inferència FP16 amb Tensor Cores

Ajust de precisió

  • Llindars de contrast: Ajusteu contrast_ths per a escaneigs de baixa qualitat
  • Filtre per mida de text: Establiu min_size per ignorar text petit
  • Priorització d'idiomes: Ordeneu idiomes segons freqüència esperada

Productes Similars

 Catalan