OCR avanzato per le sfide documentali moderne
Estrai testo con precisione da documenti scannerizzati, foto e PDF con riconoscimento basato su deep learning
Cos'è EasyOCR?
EasyOCR è una libreria open source per il Riconoscimento Ottico dei Caratteri (OCR) sviluppata da Jaided AI, progettata per estrarre testo da immagini e documenti scannerizzati con alta accuratezza. Basata su PyTorch, supporta oltre 80 lingue tra cui latino, cinese, arabo e altre. EasyOCR è nota per la sua semplicità d'uso - bastano poche righe di codice per implementarla, rendendola una scelta eccellente per sviluppatori e ricercatori che lavorano a progetti di riconoscimento del testo. Con i suoi modelli pre-addestrati di deep learning, può rilevare e riconoscere efficientemente testo in vari font, scritture a mano e sfondi complessi. Che sia per l'elaborazione automatizzata di documenti, il riconoscimento di targhe o l'estrazione di testo da immagini, EasyOCR fornisce una soluzione potente e leggera. Il sistema combina:
- Rilevamento multi-modello: Localizzazione del testo basata su CRAFT potenziata con backbone ResNet
- Riconoscimento adattivo: Modelli specifici per script (CRNN per latino, Transformer per CJK)
- Elaborazione contestuale: Ricostruzione di paragrafi e preservazione dell'ordine di lettura
I benchmark mostrano risultati coerenti su diversi tipi di documenti:
Tipo di documento | Accuratezza | Prestazioni | Hardware |
---|---|---|---|
Documenti aziendali | 98,6% | 42 pagine/min | NVIDIA T4 |
Immagini da mobile | 94,2% | 28 immagini/min | Google Colab GPU |
Archivi storici | 89,1% | 15 pagine/min | Cluster CPU |
L'architettura elabora i documenti in tre fasi ottimizzate:
- Rilevamento: Segmentazione delle regioni di testo a livello di pixel
- Riconoscimento: Predizione di sequenze con modellazione linguistica
- Ricostruzione: Mappatura delle relazioni spaziali
Capacità tecniche fondamentali
1. Rilevamento avanzato del testo
Il sottosistema di rilevamento include:
- Generazione di mappe di calore a livello di carattere
- Gestione di regioni di testo con forme arbitrarie
- Supporto per multi-orientamento (0-360°)
- Soppressione del rumore di fondo
2. Sistema ibrido di riconoscimento
Modelli di riconoscimento ottimizzati per tipo di scrittura:
- Latino/Cirillico: CRNN con 7 strati CNN + BiLSTM
- Cinese/Giapponese/Coreano: Transformer con 12 testine di attenzione
- Arabo/Ebraico: BiLSTM da destra a sinistra con tokenizzazione personalizzata
3. Funzionalità enterprise
- Stima automatica della qualità
- Compromessi configurabili precisione/recall
- Allocazione delle risorse consapevole dell'hardware
Installazione & Configurazione
Requisiti di sistema
Componente | Sviluppo | Produzione |
---|---|---|
Python | 3.6+ | 3.8+ |
Memoria | 8GB | 16GB+ |
GPU | Opzionale | NVIDIA (CUDA 11.8+) |
Opzioni di installazione
Installazione base
pip install easyocr # Installa solo le dipendenze CPU
Supporto GPU (Linux/Windows)
pip install easyocr torch torchvision --index-url https://download.pytorch.org/whl/cu118
Docker (Distribuzione in produzione)
docker run -it --gpus all -v $(pwd):/data \
-e LANG_LIST="en,it,es" \
jaidedai/easyocr
Esempi pratici di implementazione
1. Pipeline di elaborazione documenti
Flusso di lavoro OCR completo con pre-elaborazione e validazione:
Elaborazione pronta per la produzione
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):
# Miglioramento del contrasto
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])
}
# Utilizzo
ocr = DocumentOCR(languages=['en','it'])
result = ocr.process('contratto_legale.jpg')
print(f"Accuratezza media: {result['confidence']:.2%}")
2. Elaborazione batch di fatture
Estrazione di campi chiave da diversi formati di fattura:
Estrazione dati fatture
import easyocr
import re
from pathlib import Path
reader = easyocr.Reader(['it'])
PATTERNS_FATTURA = {
'numero_fattura': r'Fattura\s*Numero[:#]?\s*([A-Z0-9-]+)',
'data': r'Data[:]?\s*(\d{2}[/-]\d{2}[/-]\d{4})',
'importo': r'Totale\s*dovuto[:]?\s*\$?(\d+\.\d{2})'
}
def elabora_fatture(cartella):
risultati = []
for fattura in Path(cartella).glob('*.pdf'):
testo = '\n'.join(reader.readtext(str(fattura), detail=0))
estratti = {campo: re.search(modello, testo)
for campo, modello in PATTERNS_FATTURA.items()}
risultati.append({
'file': fattura.name,
'dati': {k: v.group(1) if v else None
for k, v in estratti.items()}
})
return risultati
dati_fatture = elabora_fatture('/fatture/')
Ottimizzazione delle prestazioni
Accelerazione GPU
- Elaborazione batch: Dimensioni batch ottimali (4-16 a seconda della memoria GPU)
- Gestione memoria: Suddivisione automatica per documenti grandi
- Precisione mista: Inferenza FP16 con Tensor Core
Regolazione precisione
- Soglie contrasto: Regola
contrast_ths
per scansioni di bassa qualità - Filtro dimensione testo: Imposta
min_size
per ignorare testo piccolo - Priorità lingua: Ordina lingue per prevalenza attesa