Vai al contenuto principale
Questa sezione illustra alcune funzionalità specifiche del riconoscimento dei barcode con ABBYY FineReader Engine 12. Gli aspetti principali del riconoscimento dei barcode sono trattati nella descrizione dello scenario Riconoscimento dei barcode. Nella maggior parte dei casi, se un barcode è conforme alle specifiche, può essere riconosciuto con le impostazioni predefinite. In altri casi, è necessario specificare determinati parametri. Questi parametri vengono specificati tramite il sotto-oggetto BarcodeParams dell’oggetto PageAnalysisParams.

Barcode con checksum

I Barcode di tipo Code 39, Interleaved 2 of 5, Codabar e Matrix 2 of 5 possono includere un checksum. I checksum vengono utilizzati per il rilevamento degli errori. L’algoritmo di calcolo del checksum è specificato dallo standard. Per garantire il corretto riconoscimento dei Barcode con checksum, è necessario impostare su TRUE la proprietà HasChecksum dell’oggetto BarcodeParams.
Il risultato del riconoscimento non include il checksum del Barcode, se previsto dallo standard.

Barcode PDF417, Aztec, Data Matrix, QR Code, MaxiCode

Per impostazione predefinita, ABBYY FineReader Engine riconosce i barcode PDF417, Aztec, DataMatrix, QR Code, MaxiCode utilizzando la tabella codici corrispondente alla specifica. Si tratta delle seguenti tabelle codici:
  • per PDF417 — DOS Stati Uniti (437) (CP_US_MSDOS)
  • per Aztec, DataMatrix, QR Code, MaxiCode — ISO Latin 1 (8859-1) (CP_Latin_ISO)
A volte questi barcode non sono conformi alla specifica, ossia sono stati creati utilizzando una tabella codici diversa da quella definita dalla specifica. In questo caso, è necessario specificare manualmente la tabella codici tramite la proprietà CodePage dell’oggetto BarcodeParams.

Codici QR in modalità Structured Append

I QR Codes possono essere utilizzati per codificare una grande quantità di dati combinando fino a 16 codici in una sequenza nel formato structured append. L’oggetto BarcodeBlock consente di accedere alle informazioni specifiche della sequenza structured append tramite le proprietà QrCodeSequenceId, QrCodeSequenceCount e QrCodeSequenceIndex e può essere usato nel programma per ricomporre i codici riconosciuti.

Dati binari codificati nei barcode

I barcode PDF417, Aztec, DataMatrix, QR Code possono codificare sia testo che dati binari. ABBYY FineReader Engine rappresenta tutti i dati dei barcode riconosciuti, inclusi i dati binari, sotto forma di testo. Il modo in cui i dati binari vengono rappresentati in forma testuale dipende dal valore della proprietà ContainsBinaryData dell’oggetto BarcodeParams:

Valore di ContainsBinaryData

Rappresentazione dei dati binari

FALSE (valore predefinito)

  • Ogni carattere che contiene dati binari ha la proprietà IBarcodeSymbol::IsBinaryData impostata su TRUE.
  • I dati binari, così come i dati testuali, sono rappresentati come una stringa Unicode (IBarcodeBlock::Text).
  • I dati vengono convertiti in una stringa Unicode utilizzando la tabella codici specificata nella proprietà IBarcodeParams::CodePage. Per ottenere i dati binari dalla stringa Unicode, è necessario decodificare la stringa utilizzando la tabella codici corrispondente.
Lo zero binario non può essere convertito correttamente in una stringa Unicode. Il carattere corrispondente nella stringa sarà il simbolo di “carattere non riconosciuto” (”^”) e avrà la proprietà IBarcodeSymbol::IsBinaryZero impostata su TRUE.

TRUE

  • Ogni carattere che contiene dati binari ha la proprietà IBarcodeSymbol::IsBinaryData impostata su TRUE.
  • I dati binari, così come i dati testuali, sono rappresentati come una stringa Unicode (IBarcodeBlock::Text).
  • I dati binari vengono salvati nella stringa Unicode come una sequenza di valori esadecimali dei byte corrispondenti. Ad esempio, la stringa “00FF02” verrà usata per i seguenti 3 byte: 0x00, 0xFF, 0x02.

Procedura di riconoscimento

Per riconoscere barcode non conformi alla specifica o barcode con checksum, procedi come segue (si presume che sia già stato caricato il profilo predefinito BarcodeRecognition_Accuracy o BarcodeRecognition_Speed):
  1. Crea un oggetto DocumentProcessingParams usando il metodo CreateDocumentProcessingParams dell’oggetto Engine.
  2. Modifica i valori predefiniti delle proprietà necessarie del sotto-oggetto BarcodeParams (DocumentProcessingParams contiene una proprietà PageProcessingParams, che contiene PageAnalysisParams, che a sua volta include BarcodeParams).
  3. Passa l’oggetto DocumentProcessingParams al metodo Process dell’oggetto FRDocument come parametro di input.
  4. Se utilizzi altri metodi di elaborazione, questi potrebbero richiedere come parametri di input un oggetto PageAnalysisParams o PageProcessingParams. Segui la stessa procedura, modificando i valori del sotto-oggetto BarcodeParams di uno di questi oggetti.

Esempi di codice

// Si presume che Engine sia già stato caricato
// e che il documento sia già aperto
IEngine* Engine;
IFRDocument* frDocument;
HRESULT res; // utilizzare questa variabile per verificare se la chiamata al metodo è andata a buon fine
...
// Crea un oggetto DocumentProcessingParams
IDocumentProcessingParams* params = 0;
res = Engine->CreateDocumentProcessingParams( ¶ms );
 
IPageProcessingParams* pageParams = 0;
IPageAnalysisParams* analysisParams = 0;
IBarcodeParams* barcodeParams = 0;
res = params->get_PageProcessingParams( &pageParams );
res = pageParams->get_PageAnalysisParams( &analysisParams );
res = analysisParams->get_BarcodeParams( &barcodeParams );
 
// Specifica i parametri necessari
res = barcodeParams->set_Type( BT_Code39 );
 
// Riconosci i barcode
// Si presume che il profilo predefinito BarcodeRecognition sia già stato caricato
res = frDocument->Process( params );
...
FREngine::IEnginePtr Engine;
FREngine::IFRDocumentPtr frDocument;
...
// Crea un oggetto DocumentProcessingParams
FREngine::IDocumentProcessingParamsPtr params = Engine->CreateDocumentProcessingParams();
// Specifica i parametri necessari
params->PageProcessingParams->PageAnalysisParams->BarcodeParams->Type = FREngine::BT_Code39;
// Riconosci i barcode. Si presume che l'oggetto FRDocument sia già stato creato e che
// il profilo predefinito BarcodeRecognition sia già stato caricato
frDocument->Process( params );
...
FREngine.IEngine engine;
FREngine.IFRDocument frDocument;
...
// Crea un oggetto DocumentProcessingParams
FREngine.IDocumentProcessingParams dpp = engine.CreateDocumentProcessingParams();
// Specifica i parametri necessari
dpp.PageProcessingParams.PageAnalysisParams.BarcodeParams.Type = (int)FREngine.BarcodeTypeEnum.BT_Code39;
// Riconosci i barcode. Si presume che l'oggetto FRDocument sia già stato creato e che
// il profilo predefinito BarcodeRecognition sia già stato caricato
frDocument.Process( dpp );

Suggerimenti per l’uso dei barcode

La qualità del riconoscimento dei barcode dipende dalla qualità di stampa del barcode e dalle impostazioni usate nel processo di scansione del documento. Per garantire un buon riconoscimento dei barcode, segui queste raccomandazioni:
  • Un barcode deve essere separato dal resto del testo da uno spazio bianco sufficientemente ampio.
  • Le dimensioni del barcode e la larghezza delle singole barre o dei singoli punti devono soddisfare i seguenti requisiti:
    • L’altezza ottimale del barcode è superiore a 10 millimetri. Le dimensioni di un barcode devono essere inferiori al formato A4.
    • L’altezza del barcode deve essere superiore al doppio dell’altezza di una riga di testo.
    • Per i barcode non quadrati, la lunghezza deve essere maggiore dell’altezza.
    • Per i barcode 1D, la larghezza della barra più sottile deve essere di almeno 3-5 pixel dell’immagine.
    • Per i barcode 2D, le dimensioni delle celle devono essere di almeno 2x2 pixel; la dimensione consigliata è di 4x4 pixel o superiore. Inoltre, per tutti i barcode 2D ad eccezione di PDF417, le celle devono essere quadrate perché, se il barcode 2D viene deformato, molto probabilmente verrà riconosciuto in modo errato.
  • Si sconsiglia di comprimere le immagini dei barcode con la compressione JPEG, perché rende sfocati i bordi dei barcode.
  • Si sconsiglia di inclinare i barcode: l’angolo del barcode deve essere un multiplo di 90 gradi rispetto all’asse orizzontale.
  • La modalità di scansione in scala di grigi è la migliore per finalità di Optical Character Recognition (OCR). Durante la scansione in bianco e nero, regola l’impostazione della luminosità. Se il barcode è “spezzato” o molto chiaro, riduci la luminosità per scurire l’immagine. Se il barcode è distorto o le sue parti risultano attaccate tra loro, aumenta la luminosità per schiarire l’immagine.
  • Evita di stampare i barcode all’interno di cornici.
  • Evita di stampare i barcode sopra testo o immagini.
In pratica, i barcode che non rispettano queste raccomandazioni possono comunque essere riconosciuti; tuttavia, la qualità del riconoscimento potrebbe essere scarsa.

Vedi anche

Riconoscimento dei barcode Tipi di barcode