Passer au contenu principal
Cette section présente certaines fonctionnalités spécifiques à la reconnaissance des Barcodes avec ABBYY FineReader Engine 12. Les principaux aspects de la reconnaissance des Barcodes sont décrits dans le scénario Reconnaissance des Barcodes. Dans la plupart des cas, si un Barcode est conforme à la spécification, il peut être reconnu avec les paramètres par défaut. Dans d’autres cas, il est nécessaire de définir certains paramètres. Ces paramètres sont définis via le sous-objet BarcodeParams de l’objet PageAnalysisParams.

Barcodes avec somme de contrôle

Les Barcodes de type Code 39, Interleaved 2 of 5, Codabar et Matrix 2 of 5 peuvent inclure une somme de contrôle. Les sommes de contrôle sont utilisées pour détecter les erreurs. L’algorithme de calcul de la somme de contrôle est défini par la norme. Vous devez définir la propriété HasChecksum de l’objet BarcodeParams sur TRUE pour que les Barcodes avec somme de contrôle soient reconnus correctement.
Le résultat de la reconnaissance n’inclut pas la somme de contrôle du Barcode si celle-ci est prévue par la norme.

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

Par défaut, ABBYY FineReader Engine reconnaît les Barcode PDF417, Aztec, DataMatrix, QR Code, MaxiCode en utilisant la page de codes correspondant à la spécification. Les pages de codes utilisées sont les suivantes :
  • pour PDF417 — DOS États-Unis (437) (CP_US_MSDOS)
  • pour Aztec, DataMatrix, QR Code, MaxiCode — ISO Latin 1 (8859-1) (CP_Latin_ISO)
Il arrive parfois que ces Barcode ne soient pas conformes à la spécification, c’est-à-dire qu’ils aient été créés avec une page de codes différente de celle définie par la spécification. Dans ce cas, il faut spécifier manuellement la page de codes via la propriété CodePage de l’objet BarcodeParams.

Codes QR en mode Structured Append

Les codes QR peuvent être utilisés pour encoder une grande quantité de données en combinant jusqu’à 16 codes dans une séquence au format Structured Append. L’objet BarcodeBlock donne accès à des informations spécifiques sur la séquence en mode Structured Append via les propriétés QrCodeSequenceId, QrCodeSequenceCount et QrCodeSequenceIndex, et vous pouvez l’utiliser dans votre programme pour reconstituer les codes reconnus.

Données binaires codées dans les barcodes

Les barcodes PDF417, Aztec, DataMatrix et QR Code peuvent encoder à la fois du texte et des données binaires. ABBYY FineReader Engine représente toutes les données de barcode reconnues, y compris les données binaires, sous forme de texte. La manière dont les données binaires sont représentées sous forme de texte dépend de la valeur de la propriété ContainsBinaryData de l’objet BarcodeParams :

Valeur de ContainsBinaryData

Représentation des données binaires

FALSE (valeur par défaut)

  • Chaque caractère contenant des données binaires a la propriété IBarcodeSymbol::IsBinaryData définie sur TRUE.
  • Les données binaires, comme les données textuelles, sont représentées sous forme de chaîne Unicode (IBarcodeBlock::Text).
  • Les données sont converties en chaîne Unicode à l’aide de la page de codes spécifiée dans la propriété IBarcodeParams::CodePage. Pour récupérer les données binaires à partir de la chaîne Unicode, vous devez décoder cette chaîne à l’aide de la page de codes correspondante.
Le zéro binaire ne peut pas être correctement converti en chaîne Unicode. Le caractère correspondant dans la chaîne sera le symbole de « caractère non reconnu » (”^”) et sa propriété IBarcodeSymbol::IsBinaryZero sera définie sur TRUE.

TRUE

  • Chaque caractère contenant des données binaires a la propriété IBarcodeSymbol::IsBinaryData définie sur TRUE.
  • Les données binaires, comme les données textuelles, sont représentées sous forme de chaîne Unicode (IBarcodeBlock::Text).
  • Les données binaires sont enregistrées dans la chaîne Unicode sous la forme d’une séquence de valeurs hexadécimales correspondant aux octets. Par exemple, la chaîne “00FF02” sera utilisée pour les 3 octets suivants : 0x00, 0xFF, 0x02.

La procédure de reconnaissance

Pour reconnaître des Barcode non conformes à la spécification ou des Barcode avec somme de contrôle, procédez comme suit (nous supposons que le profil prédéfini BarcodeRecognition_Accuracy ou BarcodeRecognition_Speed a déjà été chargé) :
  1. Créez un objet DocumentProcessingParams à l’aide de la méthode CreateDocumentProcessingParams de l’objet Engine.
  2. Modifiez les valeurs par défaut des propriétés nécessaires du sous-objet BarcodeParams (DocumentProcessingParams contient une propriété PageProcessingParams, qui contient PageAnalysisParams, lequel inclut à son tour BarcodeParams).
  3. Passez l’objet DocumentProcessingParams à la méthode Process de l’objet FRDocument comme paramètre d’entrée.
  4. Si vous utilisez d’autres méthodes de traitement, elles peuvent nécessiter un objet PageAnalysisParams ou PageProcessingParams comme paramètre d’entrée. Suivez la même procédure en modifiant les valeurs du sous-objet BarcodeParams de l’un de ces objets.

Exemples de code

// Nous supposons que l'Engine a déjà été chargé
// et que le document est ouvert
IEngine* Engine;
IFRDocument* frDocument;
HRESULT res; // utilisez cette variable pour vérifier si l'appel de la méthode a réussi
...
// Créez un objet 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 );
 
// Spécifiez les paramètres nécessaires
res = barcodeParams->set_Type( BT_Code39 );
 
// Reconnaître les Barcode
// Nous supposons que le profil prédéfini BarcodeRecognition a déjà été chargé
res = frDocument->Process( params );
...
FREngine::IEnginePtr Engine;
FREngine::IFRDocumentPtr frDocument;
...
// Créez un objet DocumentProcessingParams
FREngine::IDocumentProcessingParamsPtr params = Engine->CreateDocumentProcessingParams();
// Spécifiez les paramètres nécessaires
params->PageProcessingParams->PageAnalysisParams->BarcodeParams->Type = FREngine::BT_Code39;
// Reconnaître les Barcode. Nous supposons que l'objet FRDocument a déjà été créé et que
// le profil prédéfini BarcodeRecognition a déjà été chargé
frDocument->Process( params );
...
FREngine.IEngine engine;
FREngine.IFRDocument frDocument;
...
// Créez un objet DocumentProcessingParams
FREngine.IDocumentProcessingParams dpp = engine.CreateDocumentProcessingParams();
// Spécifiez les paramètres nécessaires
dpp.PageProcessingParams.PageAnalysisParams.BarcodeParams.Type = (int)FREngine.BarcodeTypeEnum.BT_Code39;
// Reconnaître les Barcode. Nous supposons que l'objet FRDocument a déjà été créé et que
// le profil prédéfini BarcodeRecognition a déjà été chargé
frDocument.Process( dpp );

Conseils pour travailler avec les Barcode

La qualité de la reconnaissance des Barcode dépend de la qualité d’impression des Barcode et des paramètres utilisés lors du processus de numérisation du document. Pour que les Barcode soient correctement reconnus, suivez les recommandations ci-dessous :
  • Un Barcode doit être séparé des autres textes par un White Gap suffisamment large.
  • La taille du Barcode et la largeur de ses différentes barres ou de ses points doivent respecter les exigences suivantes :
    • La hauteur optimale d’un Barcode est supérieure à 10 millimètres. La taille d’un Barcode doit être inférieure au format A4.
    • La hauteur du Barcode doit être supérieure au double de la hauteur d’une ligne de texte.
    • Pour les Barcode non carrés, la longueur doit être supérieure à la hauteur.
    • Pour les Barcode 1D, la largeur de la barre la plus fine du Barcode doit être d’au moins 3 à 5 pixels de l’image.
    • Pour les Barcode 2D, les dimensions des cellules doivent être d’au moins 2x2 pixels ; la taille recommandée est de 4x4 pixels ou plus. En outre, pour tous les Barcode 2D sauf PDF417, les cellules doivent être carrées, car si le Barcode 2D est étiré, il sera très probablement mal reconnu.
  • Nous ne recommandons pas de compresser les images de Barcode avec la compression JPEG, car cela rend les contours du Barcode flous.
  • Nous ne recommandons pas d’incliner les Barcode, c’est-à-dire que l’angle du Barcode doit être un multiple de 90 degrés par rapport à l’axe horizontal.
  • Le mode de numérisation en gris est le plus adapté à la Reconnaissance optique de caractères (OCR). Lors d’une numérisation en noir et blanc, ajustez le paramètre de luminosité. Si le Barcode est « déchiré » ou très clair, réduisez la luminosité pour assombrir l’image. Si le Barcode est déformé ou si certaines de ses parties se touchent, augmentez la luminosité pour éclaircir l’image.
  • Évitez d’imprimer des Barcode dans des cadres.
  • Évitez d’imprimer des Barcode sur du texte ou sur une image.
Dans la pratique, les Barcode qui ne respectent pas ces recommandations peuvent tout de même être reconnus ; toutefois, la qualité de la reconnaissance risque d’être médiocre.

Voir aussi

Reconnaissance des Barcode Types de Barcode