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 documentoAccuratezzaPrestazioniHardware
Documenti aziendali98,6%42 pagine/minNVIDIA T4
Immagini da mobile94,2%28 immagini/minGoogle Colab GPU
Archivi storici89,1%15 pagine/minCluster CPU

EasyOCR per il riconoscimento e l'estrazione del testo OCR

L'architettura elabora i documenti in tre fasi ottimizzate:

  1. Rilevamento: Segmentazione delle regioni di testo a livello di pixel
  2. Riconoscimento: Predizione di sequenze con modellazione linguistica
  3. Ricostruzione: Mappatura delle relazioni spaziali
GitHub

Statistiche GitHub

Nome:
Lingua:
Stelle:
Forchette:
Licenza:
L'ultimo aggiornamento del repository è avvenuto il

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

ComponenteSviluppoProduzione
Python3.6+3.8+
Memoria8GB16GB+
GPUOpzionaleNVIDIA (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

Prodotti Simili

 Italiano