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 e 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 un libro aperto e la piega centrale, testo oscurato
Ritaglio di un libro aperto con la piega centrale. Nomi, percorsi e testo della pagina sono oscurati.

Il pannello di gestione

Per chi amministra c'è un pannello web separato: utenti, progetti e licenze per modulo, rilascio delle versioni, attività degli operatori. Le schermate vengono dall'istanza in uso, con nomi e percorsi oscurati.

Home del pannello di gestione con menu laterale e passi per iniziare
La home del pannello di gestione. Il nome del prodotto è oscurato.
Pannello con la giornata degli utenti su un asse orario e il flusso degli eventi, nomi oscurati
Flusso eventi del pannello: la giornata di ogni utente nell'applicazione e l'elenco delle azioni. Nomi e percorsi sono oscurati.

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