L’estrazione di testo da immagini e documenti è uno dei compiti più ricorrenti in una soluzione AI su Azure. Il servizio di riferimento è Azure AI Vision con la sua Read API (OCR): un motore di riconoscimento ottico dei caratteri pensato per immagini con testo denso, foto, screenshot e documenti multipagina. Capire come è strutturata la risposta e quando usarla al posto di Document Intelligence è un tema d’esame ricorrente.
Come funziona la Read API
La Read API accetta un’immagine (o un PDF/TIFF) tramite Analyze con la feature Read, oppure via l’operazione dedicata su documenti multipagina. Il risultato non è una semplice stringa: è una gerarchia strutturata che rispecchia la disposizione del testo.
- pages — ogni pagina analizzata, con dimensioni e unità di misura.
- lines — le righe di testo riconosciute all’interno di una pagina.
- words — le singole parole che compongono ogni riga.
A ogni elemento è associato un bounding box (o bounding polygon), cioè le coordinate del rettangolo/poligono che circonda il testo nell’immagine. Le parole riportano anche un valore di confidence, utile per filtrare risultati incerti o per attivare una revisione manuale. Questa gerarchia consente di ricostruire non solo cosa è scritto, ma dove si trova sull’immagine.
Manoscritto e multilingua
Il modello riconosce sia testo stampato sia scritto a mano (handwritten), spesso mescolati nello stesso documento, e supporta molte lingue con rilevamento automatico della lingua. Non serve specificare a priori la lingua né dichiarare se il testo è manoscritto: il modello lo gestisce nativamente, un vantaggio rispetto ai vecchi OCR che richiedevano di indicare la lingua.
Sincrono vs asincrono
Questa distinzione è cruciale a livello architetturale:
- Sincrono — adatto a singole immagini con poco testo. Si invia l’immagine e si riceve subito il risultato nella stessa risposta HTTP. Latenza minima, ideale per scenari interattivi (es. leggere un’etichetta da una foto).
- Asincrono — obbligatorio per documenti multipagina e PDF/TIFF di grandi dimensioni. Il pattern è a due fasi: una prima chiamata avvia l’analisi e restituisce un identificativo dell’operazione (tipicamente in un header
Operation-Location); si esegue poi il polling su quell’endpoint finché lo stato passa darunning/notStartedasucceeded, quando diventano disponibili i risultati.
Regola pratica: se il carico è un file di più pagine, si usa l’API asincrona; per uno snapshot singolo va bene quella sincrona.
OCR generico vs Document Intelligence
Qui sta la scelta di progettazione più valutata all’esame. La Read API di Vision fa una cosa sola, molto bene: estrae testo grezzo con posizione. Non capisce la semantica del documento.
Azure AI Document Intelligence (ex Form Recognizer) va oltre l’OCR: restituisce coppie chiave-valore, tabelle, selection mark e, con i modelli prebuilt (fatture, ricevute, carte d’identità) o custom, campi tipizzati e strutturati. Include anche il modello Layout, che estrae struttura, tabelle e ruoli dei paragrafi.
| Serve… | Servizio |
|---|---|
| Solo testo + coordinate da foto/immagini | Read API (Vision) |
| Campi, chiave-valore, tabelle, moduli | Document Intelligence |
In pratica: se devi solo trascrivere ciò che è scritto, Vision basta ed è più economico; se devi comprendere un modulo o una fattura ed estrarne i dati in modo strutturato, serve Document Intelligence.
Trappole tipiche d’esame
- Scenario: devi estrarre coppie chiave-valore e tabelle da fatture o moduli → Risposta: usa Document Intelligence (modello Layout/prebuilt), NON l’OCR di Azure AI Vision, che restituisce solo testo senza struttura semantica.
- Scenario: PDF di più pagine da elaborare → Risposta: usa l’operazione asincrona della Read API con polling su
Operation-Location; la chiamata sincrona è pensata per singole immagini. - Scenario: il documento contiene note scritte a mano e testo stampato misti → Risposta: la Read API li gestisce entrambi nativamente, senza dover specificare handwritten o la lingua.
- Scenario: vuoi sapere dove compare una parola sull’immagine per evidenziarla → Risposta: usa il bounding box/polygon a livello di word o line nella gerarchia pages → lines → words.
- Scenario: serve solo trascrivere testo denso minimizzando costi e complessità → Risposta: Read API di Vision, non Document Intelligence, che è sovradimensionato quando non servono campi strutturati.