Al centro di smistamento delle poste nessuno legge le lettere. Si leggono gli indirizzi, migliaia l’ora, e chi lo fa non ha bisogno di sapere che cosa c’è dentro la busta: gli basta riconoscere in fretta quello che è scritto fuori, e passare la busta difficile al collega più esperto.
Quasi tutto l’OCR di cui si è parlato nel 2026 sta dall’altra parte del bancone. Sono modelli visione-linguaggio da uno a quattro miliardi di parametri, che guardano la pagina intera e la riscrivono in Markdown con tabelle e formule: ne abbiamo raccontati parecchi, da MinerU2.5-Pro a WeVisDoc e jina-ocr-v1. Leggono bene, e vogliono una GPU. Indra OCR fa il mestiere dello smistatore: pochi milioni di parametri, nessuna GPU, circa mezzo secondo a pagina su quattro core.
L’ha pubblicato il 13 ottobre Datalab, la società dietro Marker e Surya, due strumenti per trasformare i PDF in testo che su GitHub contano insieme più di 60.000 stelle. In dodici giorni datalab-to/indra ne ha raccolte 1.078, con 115 fork. Si installa con pip install indra-ocr, il codice è Apache 2.0, i pesi no (ci torniamo in fondo, ed è la parte che conta di più). Lo abbiamo provato dove interessa a noi: sulle pagine in italiano, una lingua che il README non nomina mai.
Indra OCR in breve
- Che cos’è: un OCR per PDF e immagini che restituisce Markdown, testo o JSON con riquadri, blocchi e ordine di lettura. Più di 80 lingue, pagine ruotate, scrittura a mano (con risultati modesti).
- Chi lo fa: Datalab, la società di Marker, Surya e Chandra. Pubblicato il 13 ottobre 2026.
- Dove gira: su CPU, con ONNX Runtime. I modelli predefiniti hanno 7,3 milioni di parametri e pesano 76 MB.
- Licenza: codice Apache 2.0; pesi sotto una OpenRAIL-M modificata, con limiti per chi supera i 20 milioni di dollari e per i concorrenti di Datalab.
- Sull’italiano: 99,4% di parole giuste nella nostra prova, ma «lì» ed «È» persi ogni volta.
- Contro Tesseract: stessa accuratezza sulle pagine pulite, migliore su quelle sporche, da una volta e mezzo a quattro volte più veloce sulla nostra macchina.
Otto reti piccole, un mestiere ciascuna
Il sottotitolo della repo dice «modello da 1M di parametri». Il README è più preciso: circa 1,25 milioni sono del riconoscitore per l’alfabeto latino, e tutti i modelli caricati di serie arrivano a 7,3 milioni. Su disco fanno 76 MB, di cui 30 di reti e 46 di modelli di lingua che servono a rileggere le righe incerte. Girano su ONNX Runtime, con OpenCV per le immagini e pypdfium2 per i PDF: niente PyTorch, niente CUDA.
Non è un modello solo ma una catena. Un rilevatore trova le righe; un modello di orientamento raddrizza le pagine girate di lato o capovolte e le inclinazioni fino a 45 gradi; un classificatore decide in che scrittura è ogni riga e la manda a uno di quattro riconoscitori (latino con cirillico e greco; cinese, giapponese e coreano; le scritture da destra a sinistra; le altre, dalle indiane al thai al georgiano). Quando il classificatore non è sicuro, la riga la legge anche il riconoscitore latino e vince la lettura più convinta. Alla fine le righe vengono raccolte in blocchi (titolo, elenco, tabella, didascalia, nota, testatina) e messe nell’ordine di lettura. Ne escono Markdown, testo semplice o un JSON con riquadri e confidenze.
La scelta più furba di Indra, però, è quando non fare OCR. Un PDF nato al computer contiene già il suo testo, e leggerlo costa quasi niente: Indra lo prende da lì e fa l’OCR solo delle scritte dentro le immagini. Ma lo strato di testo di un PDF può mentire. Il registro delle modifiche ne racconta due casi: Chrome, stampando in PDF una pagina in arabo, salva le lettere in parte in ordine visivo, e il testo estratto esce rovesciato; molti PDF in hindi usano vecchi font che dietro i caratteri devanagari conservano codici latini, e il testo estratto è spazzatura. La versione 1.1.1 ha smesso di fidarsi degli strati arabi in ordine visivo; la 1.1.2 confronta la scrittura di qualche riga dello strato con le immagini delle stesse righe, e se non coincidono rifà la pagina con l’OCR. Su quelle pagine in hindi le parole giuste passano da un quinto al massimo a quasi nove decimi, per circa 5 millisecondi in più a pagina.
Il controllo, per come è descritto, guarda la scrittura e non le parole. Un vecchio PDF italiano con la codifica rotta ma in caratteri latini, di quelli che incollati altrove diventano simboli senza senso, potrebbe passarlo. Per quei casi c’è --mode ocr, che ignora lo strato di testo.
Perché un modello visione-linguaggio che legge la pagina intera paga cara ogni crescita della risoluzione, il libro lo spiega partendo dai token in cui l’immagine viene tagliata.
La prova: venti pagine del Paithon Book
Per misurare un OCR serve un testo di cui si conosce già la risposta giusta. Il PDF del nostro libro ne ha uno esatto, il suo strato di testo, e 3.356 pagine fra cui scegliere. Fra le 864 di sola prosa (almeno 1.800 caratteri, almeno quindici lettere accentate, niente codice e quasi niente formule) ne abbiamo estratte venti a sorte, con un seme fisso. Le abbiamo trasformate in immagini a 200 dpi, la risoluzione predefinita di Indra, in scala di grigi: così l’OCR lo deve fare davvero. Il conto è semplice: quante delle 11.612 parole del testo di riferimento compaiono nell’uscita, senza badare all’ordine; 497 hanno una lettera accentata.
Indra 1.1.2, con i modelli della versione 1.1.0, ha girato in un contenitore Docker con la rete staccata dopo lo scaricamento dei modelli, che è il modo giusto di provare un programma appena arrivato. Il confronto è con Tesseract 5.3.4 col modello per l’italiano, sulle stesse immagini. Poi abbiamo ripetuto tutto sulle stesse pagine sporcate da uno script: inclinate di 2,5 gradi, ridotte al 60% della risoluzione e riportate su, sfocate, con rumore, salvate in JPEG di bassa qualità. Una scansione d’ufficio mediocre, insomma.
| Motore | Parole giuste | Parole accentate giuste | Secondi a pagina mediana, 4 thread |
|---|---|---|---|
| Pagine pulite | |||
| Indra OCR | 99,4% | 95,4% | 0,55 |
| Tesseract modello italiano | 99,3% | 100% | 2,24 |
| Pagine sporcate | |||
| Indra OCR | 99,3% | 94,2% | 0,52 |
| Tesseract modello italiano | 97,8% | 99,6% | 1,91 |
Sulle pagine pulite i due motori leggono lo stesso numero di parole. Sulle pagine sporcate Indra non perde quasi niente e Tesseract scende di un punto e mezzo: l’inclinazione, Indra l’ha misurata e raddrizzata, riportando esattamente 2,5 gradi. C’è poi una differenza che la tabella non mostra. Tesseract restituisce righe, e i pallini degli elenchi li ha letti come una «e» in 33 righe; Indra ricompone i paragrafi, riconosce i titoli dei riquadri e tiene i pallini come pallini. Entrambi, invece, scrivono «OpenAl» invece di «OpenAI»: nel carattere del libro la I maiuscola e la l minuscola sono quasi lo stesso segno, e senza il contesto è difficile distinguerle.
I due accenti che mancano
Ora la colonna di mezzo. La à, la è, la é, la ò e la ù Indra le ha lette tutte, 458 su 458. I problemi stanno quasi tutti in due parole, e sono sistematici. «Lì» è diventato «li» in tutti i 14 casi, «È» maiuscolo è diventato «E» in tutti gli 8 (più un «così» su dieci rimasto senza accento). Sulle pagine sporcate si aggiunge «sì» che diventa «si» in tre casi su cinque. Tesseract, col suo modello per l’italiano, sulle pagine pulite non ha sbagliato un accento.
In italiano non sono refusi, sono altre parole. «Lì» è un luogo e «li» un pronome; «È» è il verbo e «E» la congiunzione; «sì» è un assenso e «si» un pronome. Per un indice di ricerca o per dare le pagine in pasto a un modello linguistico il danno è piccolo, perché il contesto rimette le cose a posto. Per una trascrizione da pubblicare o da archiviare, invece, è una correzione da fare ogni volta. Almeno, essendo sistematica, si sa dove guardare.
Il README elenca le lingue latine in cui il riconoscitore a volte scrive un accento vicino al posto di quello giusto (curdo kurmanji, ceco, lituano, islandese, turco, slovacco) e dice che inglese, francese, tedesco e spagnolo non ne soffrono. L’italiano non sta in nessuna delle due liste. Perché proprio queste due parole non sappiamo dirlo: Indra non ha un paper, e la sua scheda non descrive né l’architettura delle reti né i dati su cui sono state addestrate.
La velocità, e le quindici volte del sottotitolo
Il README dichiara 44 pagine al secondo su 32 core, quindici volte Tesseract. A 4 core, con un processo per core, la sua tabella dà 6,2 pagine al secondo contro 0,78: otto volte. Abbiamo rifatto la misura nello stesso modo, quattro processi su 80 pagine, sulla nostra macchina di sviluppo (quattro core AMD EPYC Genoa, la stessa famiglia del README, ma condivisa con altri servizi e carica durante le prove). In due giri Indra ha fatto 3,6 e 2,7 pagine al secondo, Tesseract 1,2 e 1,8: da una volta e mezzo a tre volte. Una pagina alla volta con quattro thread, la differenza sale a quattro volte, come mostra la tabella.
Il nostro Tesseract è più veloce di quello del README, e c’è un motivo: pagine di sola prosa su una colonna sono il suo caso migliore, quelle del benchmark sono molto più difficili. Il vantaggio di Indra c’è ed è netto, ma su pagine facili vale qualche volta, non quindici. Dove la distanza diventa enorme è contro le pipeline pesanti: secondo il README PP-StructureV3, la catena completa di PaddleOCR con tabelle e formule, impiega a pagina circa 190 volte il tempo di Indra.
Le formule sono un capitolo a parte. Con --math un piccolo classificatore cerca le righe matematiche e una seconda rete le scrive in LaTeX. Su cinque pagine del libro piene di formule il tempo mediano è salito da 0,52 a 1,3 secondi, e il risultato è disuguale. Alcune formule escono giuste, come la somma cumulativa $S_t = \max(0,\, S_{t-1} + z_t)$ del capitolo sull’MLOps. Altre no: la formula della regressione logistica è diventata un titolo illeggibile, la parola «generalizzato» è stata scritta come formula lettera per lettera, e in qualche riga i delimitatori del LaTeX non si chiudono, che in una pipeline come la nostra, dove KaTeX disegna le formule, rovina il resto del paragrafo. È coerente col README, che sulle prove di matematica del suo benchmark dichiara il 55,8%.
Il benchmark è di Datalab
I numeri del README vengono da OmniParseBench, che è di Datalab anche lui: è su GitHub dal 9 ottobre, quattro giorni prima di Indra. Conta 16.288 prove a risposta sì o no su 2.937 pagine (questo testo c’è? viene prima di quello? questa cella sta sotto questa intestazione?), e il punteggio principale è la media di testo, tabelle e impaginazione. La tabella avverte che alcune prove sono state costruite o verificate con Gemini 3.8 Flash e Claude Sonnet 5.5, e i verdetti di ogni sistema sono pubblici, prova per prova: chiunque può ricontarli, e va riconosciuto.
Il sottotitolo della repo promette un’accuratezza «vicina ai modelli da oltre un miliardo di parametri». Il README dà a Indra 66,7 (71,4 con le formule), contro il 58,4 di PP-StructureV3, e dice di averli presi dalla classifica del benchmark, che oggi però riporta 69,5. Tre punti in più o in meno non cambiano il quadro, che è questo.
| Modello | Parametri | Punteggio | A mano | Ruotate | Degradate |
|---|---|---|---|---|---|
| chandra-ocr-2 Datalab | 4,5 mld | 90,1 | 66,8 | 82,2 | 85,9 |
| PaddleOCR-VL-1.6 | 0,96 mld | 78,7 | 52,3 | 77,7 | 68,9 |
| DeepSeek-OCR-2 | 3,4 mld | 75,2 | 43,6 | 36,5 | 60,8 |
| Indra OCR | 12 mln con le formule | 69,5 | 31,0 | 68,8 | 46,2 |
| HunyuanOCR-1.5 | 1,0 mld | 64,6 | 42,1 | 49,2 | 65,6 |
«Vicino ai modelli da un miliardo» è vero in fondo alla lista: Indra supera HunyuanOCR-1.5, sta a sei punti da DeepSeek-OCR-2 e a venti dal migliore dei modelli aperti, che è un altro modello di Datalab. Sulle pagine ruotate se la cava meglio di modelli da uno e da tre miliardi di parametri; sulla scrittura a mano e sulle pagine degradate è l’ultimo della tabella. Lo dice anche il README, nella sezione sui limiti: Indra è fatto per la velocità sulla stampa pulita, e per la scrittura a mano, le formule, le tabelle complicate e le scansioni rovinate rimanda a Chandra sulla piattaforma a pagamento di Datalab. Indra è anche una porta d’ingresso, e il README non lo nasconde: subito dopo la presentazione viene la pubblicità del servizio gestito.
La licenza, che conta più dei parametri
Il codice è Apache 2.0. I pesi hanno una licenza OpenRAIL-M modificata, che il README riassume così: libera per ricerca, uso personale e startup sotto i 20 milioni di dollari di finanziamenti o fatturato, e non utilizzabile in concorrenza con l’API di Datalab. Il testo della licenza, nell’allegato sulle restrizioni d’uso, è più preciso, e vieta l’uso per qualsiasi scopo:
- sopra i 20 milioni di dollari di fatturato nell’anno precedente, tuoi o del tuo datore di lavoro o dell’ente a cui sei legato, salvo uso personale o di ricerca;
- sopra i 20 milioni di dollari raccolti in capitale o debito, con la stessa eccezione;
- a chi offre un prodotto o un servizio in concorrenza con uno qualsiasi di quelli di Datalab o delle sue affiliate. Qui l’eccezione per l’uso personale o di ricerca non c’è.
Due dettagli pesano più del resto. Le restrizioni valgono anche per l’Output, cioè per quello che Indra scrive, non solo per il modello. E Datalab si riserva il diritto di limitare, anche a distanza, l’uso del modello che violi la licenza.
Tradotto per chi lavora in Italia: una piccola impresa che lo usa per rendere ricercabile il proprio archivio sta dentro. Lo sviluppatore dipendente di una banca o di un grande gruppo, no, se non per uso personale o di ricerca, perché la clausola guarda al datore di lavoro. E la software house che vende digitalizzazione di documenti o estrazione di dati dalle fatture rischia di stare fuori a qualunque dimensione: Datalab vende proprio un’API per leggere, estrarre, compilare e modificare documenti. Non è un parere legale, e prima di mettere Indra in un prodotto la licenza va fatta leggere a chi lo fa di mestiere. Per confronto, Tesseract e PaddleOCR distribuiscono anche i pesi sotto Apache 2.0.
Come installare e usare Indra OCR
Serve Python 3.10 o più recente; i test girano su Linux e su macOS con processori Apple. Al primo avvio scarica i modelli da Hugging Face (76 MB, 93 con quelli per le formule); dopo funziona anche senza rete, perché controlla gli aggiornamenti al massimo una volta al giorno e, se il controllo fallisce, tiene i modelli che ha. Per una copia locale ci sono INDRA_OCR_MODEL_DIR e --model-dir.
pip install indra-ocr
indra-ocr documento.pdf # Markdown sullo schermo
indra-ocr *.pdf --out risultati/ # un file .md per ogni PDF
indra-ocr scansione.png --format json # righe, riquadri, blocchi, confidenze
indra-ocr vecchio.pdf --mode ocr # ignora lo strato di testo
indra-ocr-viewer # visore locale su localhost:8765
Il visore è la parte più utile per decidere: si trascina un PDF nella pagina e si vedono righe, blocchi e ordine di lettura disegnati sopra l’originale, accanto al Markdown. I file restano sulla macchina. Da Python, convert_many usa un processo per core e su macOS e Windows vuole lo script protetto da if __name__ == "__main__":, altrimenti avvisa e fa tutto in un processo solo.
Lo stato del progetto è quello di un rilascio appena uscito: otto commit su main, l’ultimo del 22 ottobre; quattro release su GitHub e sei versioni su PyPI, dalla 0.3.0 alla 1.1.2; nove segnalazioni e tre richieste di modifica aperte.
Domande frequenti su Indra OCR
Indra OCR è gratuito anche per uso commerciale?
Il codice sì, è Apache 2.0. I pesi no, non per tutti: la loro licenza OpenRAIL-M modificata li vieta a chi, direttamente o tramite il datore di lavoro, supera i 20 milioni di dollari di fatturato annuo o di finanziamenti raccolti (salvo uso personale o di ricerca), e a chiunque offra prodotti o servizi in concorrenza con Datalab. Negli altri casi serve una licenza commerciale di Datalab.
Indra OCR legge l’italiano?
Sì, anche se il README non lo nomina. Nella nostra prova su venti pagine del Paithon Book ha letto giusto il 99,4% delle parole, ma ha scritto sempre «li» al posto di «lì» ed «E» al posto di «È».
Indra OCR ha bisogno di una GPU?
No. Gira su CPU con ONNX Runtime, senza PyTorch; sulla nostra macchina a quattro core ha letto una pagina in circa mezzo secondo.
Indra OCR è più veloce di Tesseract?
Sì, ma meno di quanto dica il sottotitolo della repo. Il README dichiara quindici volte a 32 core; sulle nostre pagine di prosa, con quattro core, la differenza è stata da una volta e mezzo a quattro volte, secondo il modo di contare.
Indra OCR legge scrittura a mano, tabelle e formule?
Male. Sul benchmark di Datalab ha 31,0 sulla scrittura a mano e 46,2 sulle pagine degradate; le tabelle con celle unite o senza righe possono uscire con le celle al posto sbagliato, e le formule, con l’opzione --math, escono in LaTeX corretto solo a tratti.
Come si installa Indra OCR?
Con pip install indra-ocr, su Python 3.10 o successivo. Al primo avvio scarica 76 MB di modelli da Hugging Face, poi funziona anche senza rete; indra-ocr documento.pdf scrive il Markdown della pagina.
Accanto, con licenze diverse
Cinque repo da tenere a portata di mano, controllate il 25 ottobre:
- tesseract-ocr/tesseract (77.000 stelle, Apache 2.0): il riferimento storico, con un modello per l’italiano. Sulle nostre pagine pulite non ha perso un accento.
- PaddlePaddle/PaddleOCR (92.000 stelle, Apache 2.0): di Baidu, dai modelli per il solo testo alla catena completa con tabelle e formule.
- RapidAI/RapidOCR (8.300 stelle, Apache 2.0): i modelli di PaddleOCR su ONNX Runtime e altri motori. È l’alternativa più diretta a Indra sulla CPU, ed è quella che il README stesso misura.
- ocrmypdf/OCRmyPDF (35.000 stelle, MPL 2.0): aggiunge uno strato di testo ai PDF scansionati usando Tesseract. Il PDF resta un PDF, ma diventa ricercabile.
- docling-project/docling (70.000 stelle, MIT): converte PDF e documenti d’ufficio in Markdown e JSON per le pipeline di AI generativa, con l’OCR per PDF scansionati e immagini.
Nella corsa dell’OCR del 2026 i progressi si contano in decimi di punto, su classifiche guidate da modelli con miliardi di parametri. Indra ricorda una cosa più banale: la maggior parte delle pagine di un archivio aziendale è fatta di PDF digitali o di stampe pulite, e lì la parte costosa non è leggere, è capire quando serve davvero leggere. Il valore dello smistatore non è aprire tutte le buste, ma sapere quali passare al collega. Sull’italiano lo fa bene, a parte due accenti da controllare. Se lo si possa usare, però, lo decide la licenza prima dell’accuratezza.

I commenti sono riservati agli iscritti.
Accedi per commentare