Strumenti per la digitalizzazione di archivi

Un'applicazione desktop per creare, correggere e validare i metadati XML dei documenti digitalizzati, con moduli installabili per lavorare sulle immagini.

A cosa serve / Cosa può fare

Per chi digitalizza archivi e libri e deve descrivere ogni documento con metadati MAG. È parte del lavoro di catalogazione e indicizzazione che ETT propone con la linea Scripta.

  • Crea, corregge e valida i file MAG, lo standard XML italiano per i documenti digitalizzati.
  • Controlla i file con lo schema XSD e regole aggiuntive.
  • Ritaglia e raddrizza le scansioni in automatico.
  • Rinomina i file e riconosce il tipo di pagina.
  • Si estende con moduli installabili, con licenza e aggiornamenti.

Il contesto

Chi digitalizza archivi e libri produce migliaia di immagini per documento. Ognuna va descritta in XML (tipo di pagina, sequenza, checksum, dati tecnici), ritagliata e rinominata, quasi sempre a mano. Il formato è il MAG, lo standard italiano per i metadati di documenti digitalizzati.

Lo sto sviluppando nell'azienda di software in cui lavoro come sviluppatore. Il progetto è una riscrittura che unisce due vecchi programmi (uno in Python 2.4, uno in Python 3.8 compilato) in un unico programma che si possa mantenere.

L'editor e il validatore

L'editor mostra il progetto ad albero e le schede dei metadati (generali, bibliografia con campi Dublin Core ripetibili, nomenclatura). Il validatore integrato controlla il file con lo schema XSD e con regole aggiuntive, e segnala i problemi in un pannello: nell'immagine sotto, un campo obbligatorio vuoto. Il documento è di esempio.

Editor di metadati XML con albero del progetto e scheda dei metadati generali
Il validatore segnala un errore di schema XSD nel pannello Problemi
Il pannello «Problemi» segnala un errore di schema XSD.

I moduli

Attorno all'editor ci sono moduli che si installano da un catalogo interno, ciascuno con una licenza verificata anche senza rete e un aggiornamento firmato:

  • Ritaglio e raddrizzamento: il rettangolo si sposta, si ridimensiona dagli angoli e si ruota con una rotella. Ogni immagine viene prima portata a una versione da 1024 pixel su cui lavorano il rilevatore e l'operatore; con questa scelta il tempo per immagine è sceso da 111 a 0,37 secondi.
  • Rinomina dei file secondo convenzioni configurabili.
  • Tipo di pagina: un modello di apprendimento automatico propone se la pagina è copertina, testo, tavola e così via. Usa un classificatore su 147 caratteristiche calcolate a mano e una ricerca della sequenza di etichette più probabile; impara dalle correzioni dell'operatore.
  • Controllo del colore.
Editor del ritaglio con rettangolo ruotabile su un'immagine di prova
Editor del ritaglio con il rettangolo ruotabile. L'immagine è sintetica, di prova.

Il pannello di gestione

Per chi amministra c'è un pannello web separato: utenti, licenze per modulo con scadenza e revoca, rilascio delle versioni. Le schermate qui sotto vengono da un'istanza di prova con dati inventati, non da quella in uso.

Pannello di gestione (istanza di prova, dati finti)

Alcune scelte tecniche

  • L'interfaccia sta passando da Qt a Tauri con Vue; ogni modulo ha un suo piccolo servizio Python locale.
  • Moduli distribuiti con controllo del checksum SHA-256 e aggiornamenti firmati, prima su un canale di prova e poi per tutti.
  • La suite di test della parte Qt va in errore se lanciata tutta insieme, per lo stato condiviso della libreria: ho scritto un lanciatore che esegue un file alla volta.

Cosa ho fatto io

Ho scritto da solo quasi tutto il codice, in circa sette mesi e mezzo: più di 2.800 commit, circa 200.000 righe di Python e 46.000 di Vue e TypeScript, che copre modello dei dati, validazione, interfaccia, moduli, licenze e pannello. Per programmare ho usato anche agenti AI; non ho una misura di quanta parte del codice sia nata così.

Stato

È in uso, con utenti e licenze reali, e si sviluppa ancora. Il programma è aziendale: non è pubblico e non c'è una demo. L'interfaccia Qt è ancora in dismissione e alcune parti sono a metà.

  • Stack

    Python · lxml · Pillow · OpenCV · FastAPI · Tauri · Vue · TypeScript · gradient boosting · U²-Net · YOLO · Docker · pytest