Field NotesCodice a barre a colori ad alta capacità

Gavin Jancke

I codici a barre sono ormai un elemento talmente familiare da passare spesso inosservati. Eppure sono praticamente onnipresenti nella vita quotidiana, dalle confezioni di alimenti alle etichette di spedizione. I primi codici a barre monodimensionali, comparsi nel 1974 nel settore della vendita al dettaglio, erano formati da barre verticali di larghezza variabile e memorizzavano un numero a 12 cifre. I codici si sono evoluti con l'aumento della potenza di calcolo e i codici a barre bidimensionali in bianco e nero (codici matrice) sviluppati nei tardi anni '80 hanno segnato l'aumento della densità di dati, da appena poche cifre ad alcune centinaia di byte.

Nel 2003 ho iniziato lavorare per Microsoft Research su un sistema anticontraffazione costituito da una tessera di identificazione biometrica. Era necessario memorizzare, oltre al testo crittografico con il nome e l'età, anche i modelli di scansione di impronta digitale o iride. Per memorizzare tutti i dati necessari, l'attuale codice a barre in bianco e nero avrebbe dovuto avere dimensioni maggiori della stessa tessera d'identità: chiaramente era necessario un nuovo approccio.

Ho dovuto definire come memorizzare più di un bit di informazioni per simbolo, rapporto che costituiva lo standard per codici a barre bidimensionali in bianco e nero. Utilizzando i colori in luogo del bianco e nero, sono riuscito ad aumentare il rapporto a due o tre bit di dati per simbolo grazie, rispettivamente, a quattro e otto colori.

Ho effettuato esperimenti anche con simboli di forme diverse, per verificare se potevano essere compattati più strettamente senza compromettere la registrazione durante la scansione. All'inizio, gli esagoni sembravano una buona opzione, ma le forme si confondevano e il computer non era in grado di distinguerle in modo sufficientemente chiaro.

Alla fine ho scelto i triangoli, perché si intersecano con ordine in uno spazio compresso, pur mantenendo la loro identità di forme distinte. Utilizzando righe di triangoli di più colori, sono riuscito a potenziare la capacità di densità a tre dimensioni.

janke.fieldnotes.gif

Le variabili da affrontare erano molte. Una delle sfide principali nel lavorare con i colori è la variazione di specifiche di stampa e condizioni di illuminazione. Sebbene il colore sia facilmente discernibile all'occhio umano (almeno per chi non è daltonico), non è altrettanto facilmente interpretabile da un computer.

Sono stati adottati numerosi approcci diversi per garantire che il software leggesse il colore in modo preciso. Nel codice a barre è stata creata una vera e propria piccola tavolozza, quasi invisibile, che contiene i colori di riferimento esistenti nel codice a barre vero e proprio. Questo sistema rappresenta un meccanismo di calibrazione che specifica esattamente cosa costituisca, ad esempio, un particolare rosso. Sono state sperimentate anche tecniche più avanzate, come algoritmi di clustering dei colori personalizzati e agili che sfruttano la teoria spaziale del colore per categorizzare i colori in serie. Entrambi gli approcci funzionano bene e si integrano alla perfezione.

Una delle finalità di questo progetto era scrivere un programma che consentisse ai telefoni cellulari di leggere i codici a barre. In questo caso è necessario tenere conto di condizioni di scarsa illuminazione e obiettivi fuori fuoco, fissi o a lunghezza focale. Una sfida ulteriore era rappresentata dal realizzare questa visione per computer sulle CPU basate su numeri interi e relativamente lente dei telefoni cellulari; il team doveva quindi elaborare una teoria solida su come rilevare il codice a barre nell'immagine toccando il minor numero possibile di pixel. La scansione avrebbe dovuto funzionare su supporti con un ampio intervallo di qualità di lettura, da brillanti pannelli LCD a fuoco fino a stampe fisiche fuori fuoco e scarsamente illuminate.

L'algoritmo finale decifra le immagini di codici a barre su fotogrammi video della fotocamera in tempo reale, a velocità superiore all'effettiva frequenza di fotogrammi (circa 10 ms su una CPU da 200 Mhz). In un'immagine il numero di pixel minimo da cui può essere costituito un codice a barre per garantire il minor carico utile di dati, ed essere comunque rilevato, è di 45 pixel quadrati.

Far funzionare il tutto in diverse condizioni ha richiesto più di due anni di affinamento. Questa tecnologia è stata recentemente concessa in licenza a terzi e, nel corso di quest'anno, compariranno di certo applicazioni interessanti che se ne avvantaggiano.

Gavin Jancke, Director of Engineering for Microsoft Research, dirige i team Advanced Development Group e Web Experience. In passato ha lavorato come Product Support Engineer, Software Engineer per SQL Server e ha fatto parte del personale addetto alla consulenza tecnica esecutiva di Bill Gates.