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 document | Precisió | Rendiment | Maquinari |
---|---|---|---|
Documents comercials | 98.6% | 42 pàgines/min | NVIDIA T4 |
Imatges de mòbils | 94.2% | 28 imatges/min | Google Colab GPU |
Arxius històrics | 89.1% | 15 pàgines/min | Cluster CPU |
L'arquitectura processa documents en tres etapes optimitzades:
- Detecció: Segmentació de regions de text a nivell de píxel
- Reconeixement: Predicció de seqüències amb modelatge lingüístic
- Reconstrucció: Mapatge de relacions espacials
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
Component | Desenvolupament | Producció |
---|---|---|
Python | 3.6+ | 3.8+ |
Memòria | 8GB | 16GB+ |
GPU | Opcional | NVIDIA (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