12 1. Introduzione
ni su un prodotto, informazioni che possono risiedere su un database locale
all’applicazione o necessitare della connessione a internet per essere recupe-
rate. Un’informazione su un prodotto puo` essere il semplice prezzo, o dati
piu` dettagliati per la guida all’acquisto. Per esempio, fotografando il codice
a barre di un libro si potrebbe avere accesso alle recensioni di quel libro;
leggendo il codice sulla confezione di un farmaco, si potrebbe visualizzarne il
foglio illustrativo.
Uno scenario ancora piu` rivoluzionario, che e` gia` realta` in alcuni paesi, e`
quello di utilizzare un sistema di riconoscimento di codici a barre su disposi-
tivo mobile come base per l’acquisto on-line di prodotti tramite smartphone.
Una sorta di spesa on-line, quindi, che un cliente puo` effettuare da casa pro-
pria, semplicemente fotografando i codici a barre dei prodotti gia` in possesso
per riacquistarli. Codici a barre potrebbero anche essere stampati sui volan-
tini promozionali di un supermercato, o addirittura sui manifesti pubblicitari
in strada dei prodotti. Ovviamente, intorno alla semplice lettura del codice
a barre ruotera` un sistema complesso, che arriva fino al ritiro o alla consegna
dei prodotti acquistati.
Lo scopo di questo lavoro di tesi e` fornire uno studio esauriente su tutti
gli aspetti legati alla progettazione e realizzazione di un sistema di riconosci-
mento di codici a barre unidimensionali su dispositivi mobili, studio accom-
pagnato da una rassegna di sistemi esistenti. Tale rassegna ha un duplice
obiettivo:
• trovare riscontro pratico degli aspetti teorico-tecnici discussi, e osser-
vare da vicino gli effetti delle diverse possibili scelte nella progettazione
e realizzazione di tali sistemi;
• sondare le possibilita` di utilizzo, all’interno di una piu` ampia applica-
zione basata sulla lettura di codici a barre, dei software analizzati, in
alternativa alla realizzazione ex novo di un sistema per tale scopo.
1.1 Sommario della tesi 13
1.1 Sommario della tesi
Il capitolo 2 offre una panoramica sui codici a barre unidimensiona-
li. Sono elencate le varie tipologie, con i rispettivi campi d’applicazione,
ed e` descritta nel dettaglio la simbologia EAN, ossia il codice a barre piu`
importante e diffuso, con il suo meccanismo di codifica/decodifica.
Il capitolo 3 analizza il contesto tecnologico alla base dello sviluppo di
sistemi per il riconoscimento di codici a barre unidimensionali su dispositivi
mobili, sotto due diversi aspetti:
• hardware: requisiti dei dispositivi mobili e, in particolare, delle loro
fotocamere;
• software: diverse piattaforme software di sviluppo, con descrizione
dettagliata della piattaforma J2ME (Java Mobile Edition).
Il capitolo 4 si occupa dell’algoritmo di riconoscimento e decodifica di
un codice a barre in un’immagine digitale. Ne vengono descritte possibili
implementazioni su dispositivi mobili, in relazione agli aspetti tecnici di-
scussi nel capitolo 3 e alle problematiche che essi pongono. L’analisi avviene
scomponendo l’algoritmo in quattro parti convenzionali, ossia: preprocessing,
binarizzazione, localizzazione,decodifica.
Il capitolo 5 e` il capitolo di rassegna di sistemi esistenti; sono esaminati
otto software, di cui tre con licenza open source. Di questi ultimi e` fornita
una descrizione dell’algoritmo utilizzato per la lettura, rispetto alle possibilita`
viste nel capitolo 4. Di tutti i software si analizzano le prestazioni derivanti
da test effettuati su un dispositivo Nokia N95 e, in conclusione al capitolo, si
parla di cio` che risulta dall’analisi, in particolare in relazione allo sviluppo su
piattaforma J2ME. Tali considerazioni vengono riprese anche nel capitolo
6 di conclusione a tutto il lavoro, che e` un riepilogo di tutti gli aspetti che
emergono dallo studio e dalla rassegna, aspetti da tenere in considerazione per
lo sviluppo di un sistema di riconoscimento di codici a barre unidimensionali
su dispositivi mobili.
Capitolo 2
Codici a barre unidimensionali
Il capitolo fornisce una breve trattazione sulla tecnologia dei codici a
barre: cos’e` un codice a barre, sua storia e diffusione, suo utilizzo. In seguito
ci soffermiamo sui codici a barre unidimensionali e, tra questi, sul codice
EAN, il piu` importante e diffuso. Della simbologia EAN si da` una descrizione
dettagliata, indispensabile allo scopo di progettare e realizzare un sistema di
riconoscimento per tale tipologia di codice.
2.1 Definizione
Il codice a barre puo` essere definito come una simbologia o un alfabeto
per la codifica di informazioni in un formato tale da poter essere acquisito
automaticamente da opportuni lettori. Comunemente, con il termine “codice
a barre” ci si riferisce ai codici unidimensionali, detti anche codici lineari, ma
esiste anche una tipologia di codici a barre bidimensionali, capaci di codificare
una quantita` maggiore di informazione in uno spazio minore.
Nella pratica, un codice a barre unidimensionale consiste in una successio-
ne di elementi grafici, linee verticali parallele separate da spazi, che codificano
caratteri alfanumerici o caratteri di un alfabeto speciale. Un codice a barre
comporta l’esistenza di uno o piu` alfabeti per la codifica; per mezzo di tali
15
16 2. Codici a barre unidimensionali
alfabeti, ad ogni carattere da codificare viene associata una sequenza binaria
e da questa si passa alla rappresentazione ottica.
Figura 2.1: Codice a barre unidimensionale
2.2 Storia e diffusione
L’idea dei codici a barre fu concepita da Norman Joseph Woodland e
Bernard Silver nel 1948, per far fronte alle esigenze di automatizzare le ope-
razioni di cassa da parte del presidente di un’azienda del settore alimentare.
I primi tentativi utilizzavano il codice Morse; in seguito adottarono dei codici
a barre ovali, di cui brevettarono l’invenzione. I primi tentativi di riconosci-
mento non ebbero successo, sino al successivo sviluppo della tecnologia laser,
che permise di costruire lettori a prezzi accessibili, e con la produzione dei
circuiti integrati che consentirono la decodifica vera e propria.
Con i primi esperimenti commerciali, i codici a barre ovali si dimostra-
rono inaffidabili, in quanto si macchiavano facilmente; fu cos`ı che Woodland
sviluppo`, presso l’IBM, i primi codici a barre lineari che furono adottati il
3 aprile del 1973 con il nome di UPC (Universal Product Code). Un an-
no piu` tardi cominciarono le prime commercializzazioni di prodotti venduti
utilizzando un lettore di codici a barre [Wik09c, Car09].
Attualmente, la tecnologia del codice a barre e` largamente usata nell’indu-
stria, ma soprattutto trova applicazione nella grande distribuzione commer-
2.3 Terminologia 17
ciale. Ogni prodotto possiede un codice a barre, che codifica una sequenza
numerica di identificazione univoca del prodotto stesso. Tra le diverse tipolo-
gie di codice a barre create nel corso degli anni per le differenti applicazioni,
la simbologia EAN (European Article Number) [Ind07] si e` largamente af-
fermata come quella utilizzata per l’identificazione automatica dei prodotti
per la vendita al dettaglio nella distribuzione commerciale, in Italia e in mol-
ti paesi europei, secondo un accordo per l’adozione di un sistema comune
risalente agli anni Settanta.
Prima di elencare le diverse simbologie unidimensionali, per poi entra-
re nel dettaglio della codifica EAN, vediamo una terminologia per meglio
comprendere come e` fatto un codice a barre unidimensionale e quali sono le
informazioni necessarie alla sua decodifica.
2.3 Terminologia
Un elemento del codice a barre e` una barra o uno spazio. Le barre sono
gli elementi scuri, gli spazi sono gli elementi chiari.
Il codice a barre si dice continuo se tutti i suoi elementi sono significa-
tivi, altrimenti e` un codice discreto. Esiste anche la distinzione tra codice
bidirezionale e codice monodirezionale, a seconda che il codice a barre
possa o meno essere letto sia da sinistra verso destra che viceversa.
Il modulo e` il piu` piccolo spessore possibile per un elemento del codice
e costituisce l’unita` di misura dello spessore di ogni elemento.
Un carattere e` una successione di barre e spazi che codifica un singolo
carattere alfanumerico o un simbolo speciale. Un carattere ausiliario e` un
carattere non significativo, che non codifica informazione, bens`ı e` utilizzato
come controllo, ad esempio per identificare inizio e fine del codice (caratteri
di start/stop).
Un codice e` self-cheking se e` strutturato in modo tale che sia possibile
verificarne l’esattezza tramite un conteggio delle barre e degli spazi letti; in
altre parole, le informazioni necessarie a verificare la correttezza del codice
18 2. Codici a barre unidimensionali
sono contenute nel codice stesso, cioe` ci sono uno o piu` caratteri che hanno
il solo scopo di garantire l’esattezza del codice.
Infine, ogni codice presenta ai suoi lati delle zone dette di overflow,
costituite da ampi spazi bianchi.
2.4 Simbologie
Esistono diversi tipi di codici a barre lineari, impiegati in diversi ambiti
in base alle loro specifiche caratteristiche.
Una prima distinzione tra tipologie di codici unidimensionali e` legata ai
possibili spessori delle barre e degli spazi che compongono il codice. Si hanno:
• codici a due spessori: gli elementi possono assumere due spessori, in
rapporto compreso tra 2 e 3;
• codici a piu` spessori: gli elementi possono assumere piu` di due di-
versi spessori (quattro, nella maggior parte dei casi). Questi codici
richiedono, generalmente, una qualita` di stampa migliore.
All’interno delle due categorie, le varie simbologie si differenziano princi-
palmente per la quantita` di informazione rappresentabile (numero di carat-
teri) e per il tipo di informazione (caratteri numerici o alfanumerici, caratteri
speciali).
Nei codici a due spessori rientrano:
• code 39: codice nato per l’esigenza di rappresentare caratteri alfanu-
merici, ancora oggi usato in ambito industriale;
• code 32: variante del Code 39, e` il codice a barre usato in Italia per l’i-
dentificazione dei prodotti farmaceutici. In Italia e` detto anche Codice
Farmaceutico;
• code 2/5: codice presente in diverse varianti, alcune in disuso, altre
ancora usate negli imballaggi e nel campo fotografico (sulle pellicole);
2.5 La codifica EAN 19
• codabar: codice usato nelle biblioteche e nelle banche del sangue.
Tra i codici a piu` spessori di maggiore importanza si trovano:
• EAN: utilizzato in Europa e in Giappone (dove prende il nome di JAN)
per l’identificazione dei prodotti per la vendita al dettaglio. Il codice
EAN-13 e` il piu` diffuso in assoluto, mentre l’EAN-8, che differisce solo
nel numero di caratteri, puo` essere usato su prodotti di dimensioni
ridotte;
• UPC: equivalente negli USA e nel Canada del codice EAN, con cui e`
compatibile. Esiste nelle varianti UPC-A e UPC-E;
• code 128: codice utilizzato nel settore delle spedizioni industriali.
2.5 La codifica EAN
2.5.1 Caratteristiche principali
- i caratteri codificabili con un codice a barre EAN sono le cifre decimali;
- il codice e` continuo;
- gli elementi del codice possono assumere quattro diversi spessori, pari a 1,
2, 3 o 4 volte il modulo;
- ogni carattere (esclusi i caratteri ausiliari) e` codificato con 4 elementi (2
barre e 2 spazi, alternati); lo spessore totale di un carattere e` pari a 7
moduli;
- il codice e` self-cheking: presenta un carattere di controllo di correttezza
(check-digit), compreso nelle cifre codificate;
- il codice presenta 3 caratteri ausiliari: un carattere di start e uno di stop,
identici (3 moduli), e un carattere di controllo centrale (5 moduli);
- al di sotto del simbolo, sono stampate in chiaro le cifre del codice.