Comment lire les codes-barres à partir de fichiers image (JPEG, PNG, GIF, TIFF, SVG, BMP)

Hairil Hasyimi Bin Omar
Hairil Hasyimi Bin Omar
mars 19, 2023
Mise à jour février 8, 2025
Partager:
This article was translated from English: Does it need improvement?
Translated
View the article in English


Commencez à utiliser IronBarcode dans votre projet dès aujourd'hui avec un essai gratuit.

Première étape :
green arrow pointer

Lire les codes-barres directement à partir des images

L'une des caractéristiques clés d'IronBarcode est sa capacité à lire les codes-barres prêts à l'emploi dans plusieurs formats d'image. Les formats d'image suivants sont actuellement pris en charge par IronBarcode :

* Graphiques vectoriels évolutifs (SVG)

* Groupe mixte d'experts en photographie (JPEG)

* Graphique en réseau portable (PNG)

* Format d'échange graphique (GIF)

* Format de fichier image étiqueté (TIFF)

* Fichier image bitmap (BMP)

Ceci est rendu possible grâce à l'aide de notre bibliothèque open source, IronDrawing. Voyons maintenant comment nous pouvons réellement utiliser IronBarcode pour la lecture de codes-barres :

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-images-1.cs
using IronBarCode;
using System;

var myBarcode = BarcodeReader.Read(@"image_file_path.jpg"); //image file path

foreach (var item in myBarcode)
{
    Console.WriteLine(item.ToString());
}
QRcodeintro related to Lire les codes-barres directement à partir des images
Exemple de code QR de test
Code128intro related to Lire les codes-barres directement à partir des images
Exemple de code-barres de test

Vous voulez savoir quelles sont les valeurs des codes-barres dans les échantillons ? Essayez-le avec l'extrait de code ! Pour utiliser IronBarcode, la première chose à faire est d'installer la bibliothèque IronBarcode via le gestionnaire de paquets NuGet de Microsoft Visual Studio dans votre projet, comme indiqué dans l'image ci-dessous. Cela vous permettra d'accéder à la méthode IronBarcode BarcodeReader.Read() pour lire directement l'image de code-barres.

À partir de l'extrait de code ci-dessus, nous pouvons voir qu'IronBarcode offre de la simplicité en permettant aux utilisateurs d'utiliser uniquement BarcodeReader.Read() pour lire un fichier image qui a déjà été inclus dans le projet en spécifiant la chaîne de nom de fichier, OU la chaîne de chemin de fichier comme paramètre de la méthode. La meilleure pratique consiste à utiliser la chaîne littérale verbatim "@" lors de la spécification d'un chemin d'accès au fichier dans la méthode. En effet, si l'on ne l'inclut pas, les utilisateurs devront ajouter plusieurs caractères d'échappement "\" dans la chaîne du chemin d'accès au fichier.

Attachez la méthode Values() à la fin de l'appel de la méthode BarcodeReader.Read() pour obtenir la valeur du code-barres sous forme d'objet System.String [].

Pour afficher le résultat dans la console, vous pouvez utiliser une boucle foreach pour itérer sur les valeurs stockées dans le tableau string [], et à l'intérieur du bloc de la boucle, appelez la méthode Console.WriteLine() avec la variable d'itération en tant que paramètre.

Cette méthode ne peut pas seulement lire les formats de codes-barres 1-Dimensionnels (Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, UPCE), elle est également capable de lire les formats de codes-barres 2-Dimensionnels (Aztec, DataMatrix, QRCode) dans divers formats d'image.

Définition des options du lecteur de codes-barres

La lecture des codes-barres est trop lente ? Le code-barres est trop petit dans l'image et IronBarcode ne peut pas le lire ? Vous souhaitez ne lire que certaines parties d'une image ? Vous souhaitez lire uniquement certains types de codes-barres dans une image contenant des mélanges de codes-barres ? Vous souhaitez améliorer vos performances globales en matière de lecture ? Ne vous inquiétez plus !

BarcodeReaderOptions permet aux utilisateurs de modifier ou d'ajuster le comportement du lecteur de codes-barres afin qu'il puisse résoudre tous les problèmes mentionnés ci-dessus. Voyons et discutons en détail de toutes les propriétés ajustables disponibles dans BarcodeReaderOptions une par une :

Superficie des cultures

CropArea est une propriété de type IronSoftware.Drawing.CropRectangle disponible dans BarcodeReaderOptions qui permet aux utilisateurs de spécifier la zone d'une image que l'utilisateur souhaite qu'IronBarcode lise. Cela permettra d'améliorer les performances de lecture, puisque le lecteur de codes-barres ne doit pas parcourir l'ensemble de l'image à la recherche de codes-barres, et d'améliorer la précision de la lecture puisque la zone de lecture a été spécifiée.

Pour définir la propriété CropArea, il suffit d'instancier un nouvel objet de type Rectangle et de spécifier les coordonnées du rectangle, sa largeur et sa longueur en tant qu'arguments. L'unité de mesure acceptée est le pixel (px). CropArea = new IronSoftware.Drawing.Rectangle(x, y, largeur, hauteur)

Types de codes-barres attendus

Par défaut, tous les codes-barres pris en charge dans IronBarcode seront scannés dans une image. Cependant, si l'utilisateur sait quels types de codes-barres sont disponibles ou doivent être lus dans une image, le fait de définir cette propriété pour ne lire que certains types de codes-barres augmentera considérablement les performances et la précision de la lecture puisque le lecteur de codes-barres n'a pas besoin d'itérer à travers des collections de codes-barres pour interpréter et lire un code-barres.

Pour utiliser cette propriété, il suffit de définir le ExpectBarcodeTypes sur l'un des champs de l'énumération BarcodeEncoding. Découvrons tous les types de codes-barres pris en charge par IronBarcode et examinons un exemple de code-barres de chaque type.

  • AllOneDimensional : Types linéaires de code-barres. Cela inclut les codes-barres Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, UPCE.

  • AllTwoDimensional : Cela inclut les codes-barres en grille, matrice et empilés. Les types de codes-barres qui relèvent des codes-barres 2D sont les codes-barres Aztec, DataMatrix, QRCode.

  • Aztec : Format de code-barres 2D Aztec. Le Code Aztec est un type de code-barres 2D inventé par Andrew Longacre, Jr. et Robert Hussey en 1995. Nommé en raison de la ressemblance du motif central de repérage avec une pyramide aztèque, le code Aztec a le potentiel d'utiliser moins d'espace que d'autres codes-barres matriciels car il ne nécessite pas de « zone de silence » blanche entourant. Ci-dessous un exemple de code-barres Aztec
  • Exemple de code-barres Aztec
    Code-barres aztèque
  • Codabar : Codabar est une symbologie de code-barres linéaire développée en 1972 par Pitney Bowes Corp. Codabar encode uniquement des données numériques (chiffres). Ci-dessous un exemple de code-barres Codabar :
  • Exemple de code-barres codabar
    Code-barres Codabar
  • Code128 : Code 128 est une symbologie de code-barres linéaire à haute densité définie dans la norme ISO/IEC 15417:2007. Il est utilisé pour des codes-barres alphanumériques ou uniquement numériques. Voici un exemple de code-barres Code128
  • Code128 barcode sample
    Code à barres Code128
  • Code39 : Le Code 39 est une symbologie de code-barres discrète à longueur variable. La spécification du Code 39 définit 43 caractères, composés de lettres majuscules (A à Z). Ci-dessous un exemple d'un code-barres Code39
  • Code39 barcode sample
    Code39 Barcode
  • Code93 : Format de code-barres 1D Code 93. Le Code 93 est une symbologie de code-barres conçue en 1982 par Intermec pour fournir une densité plus élevée et une amélioration de la sécurité des données par rapport au Code 39. Le Code 93 prend en charge l'encodage uniquement des caractères ASCII suivants: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 - . $ / + % ESPACE. Ci-dessous un exemple de code-barres Code93
  • Code93 barcode sample
    Code93 Barcode
  • DataMatrix : Un Data Matrix est un code-barres bidimensionnel composé de "cellules" ou de modules noirs et blancs disposés dans un motif carré ou rectangulaire, également connu sous le nom de matrice. Les informations à encoder peuvent être des données textuelles ou numériques. La taille habituelle des données varie de quelques octets à 1556 octets. Ci-dessous un exemple de code-barres DataMatrix
  • Exemple de code-barres DataMatrix
    DataMatrix Barcode
  • EAN13 : Le Numéro d'Article International (aussi connu sous le nom de Numéro d'Article Européen ou EAN) est une norme décrivant une symbologie de code-barres et un système de numérotation utilisé dans le commerce mondial pour identifier un type de produit de détail spécifique, dans une configuration d'emballage spécifique, d'un fabricant spécifique. EAN-13 peut uniquement encoder un contenu numérique (chiffres) d'une longueur de 12 ou 13 chiffres. Les codes-barres plus courts auront des zéros de fin (000) ajoutés au début du numéro automatiquement. Ci-dessous un exemple de code-barres EAN13
  • Exemple de code-barres EAN13
    Code-barres EAN13
  • EAN8 : Un EAN-8 est un code-barres de symbologie EAN/UPC et est dérivé du code plus long appelé Numéro d'Article International (EAN-13). EAN-8 peut seulement encoder un contenu numérique (chiffres) de 7 ou 8 chiffres de longueur. Les codes-barres plus courts auront un zéro (000) ajouté au début du numéro automatiquement. Ci-dessous est un exemple de code-barres EAN8
  • Exemple de code-barres EAN8
    Code-barres EAN8
  • IntelligentMail : format de code-barres 2D Intelligent Mail. Le code-barres Intelligent Mail (également connu sous le nom de "IM Barcode" ou "USPS OneCode Barcodes" ou "IMB") est un code-barres à 65 barres utilisé pour le courrier aux États-Unis. Le terme "Intelligent Mail" fait référence aux services offerts par le service postal des États-Unis pour la livraison de courrier domestique. Le code-barres IM est conçu pour fournir plus d'informations et de fonctionnalités que ses prédécesseurs POSTNET et PLANET. Veuillez noter qu'IronBarcode peut uniquement LIRE ce type de code-barres. Ci-dessous se trouve un exemple de code-barres de ce type
  • Exemple de code-barres IntelligentMail
    Code-barres IntelligentMail
  • ITF : ITF-14 est la mise en œuvre GS1 d'un code-barres Interleaved 2 of 5 (ITF) pour encoder un Numéro d'Article Commercial Global. Les symboles ITF-14 sont généralement utilisés sur les niveaux d'emballage d'un produit, comme une boîte de 24 conserves de soupe. L'ITF-14 encodera toujours 14 chiffres. ITF encode uniquement des données numériques. Si le nombre de chiffres n'est pas pair, un '0' sera automatiquement ajouté au début. Ci-dessous un exemple de code-barres ITF
  • Exemple de code-barres ITF
    Code-barres ITF
  • MaxiCode : format de code-barres 2D MaxiCode. MaxiCode est un système de symboles lisibles par machine et appartenant au domaine public, initialement créé et utilisé par United Parcel Service. Adapté au suivi et à la gestion de l'expédition de colis, il ressemble à un code-barres, mais utilise des points disposés en une grille hexagonale à la place. Veuillez noter qu'IronBarcode peut uniquement LIRE ce type de code-barres. Ci-dessous se trouve un exemple de code-barres de ce type.
  • Exemple de code-barres MaxiCode
    Code-barres MaxiCode
  • MSI : MSI est une symbologie de code-barres développée par la MSI Data Corporation, basée sur la symbologie originale du code Plessey. Ce type de code-barres n'accepte que des valeurs numériques. Vous trouverez ci-dessous un exemple de code-barres de type MSI.
  • Exemple de code-barres MSI
    Code-barres MSI
  • PDF417 : PDF417 est un format de symbole de code-barres linéaire empilé utilisé dans une variété d'applications, principalement le transport, les cartes d'identification et la gestion des stocks. PDF signifie Portable Data File. Le 417 indique que chaque motif dans le code se compose de 4 barres et espaces, et que chaque motif mesure 17 unités de longueur. La symbologie PDF417 a été inventée par le Dr. Ynjiun P. Wang chez Symbol Technologies en 1991. (Wang 1993) Il s'agit de la norme ISO 15438. Ci-dessous un exemple de code-barres PDF417
  • Exemple de code-barres PDF417
    Code-barres PDF417
  • Plessey : Le code Plessey est une symbologie de code-barres linéaire 1D basée sur la modulation par largeur d'impulsion, développée en 1971 par The Plessey Company PLC, une entreprise britannique. Ce type de code-barres n'accepte que des valeurs numériques. Ci-dessous un exemple d'un code-barres Plessey
  • Exemple de code-barres Plessey
    Code-barres Plessey
  • QRCode : Le code QR (abréviation de Quick Response Code) est la marque déposée d'un type de code-barres matriciel (ou code-barres bidimensionnel) conçu pour la première fois en 1994 pour l'industrie automobile au Japon. Un code-barres est une étiquette optique lisible par machine qui contient des informations sur l'élément auquel elle est attachée. Un code QR utilise quatre modes de codage standardisés (numérique, alphanumérique, octet/binaire et kanji) pour stocker efficacement les données ; des extensions peuvent également être utilisées. Ci-dessous un exemple de code-barres QR
  • Exemple de code-barres QRCode
    Code-barres QRCode
  • Rss14 : Format de code-barres Reduce Space Symbology 14. Peut représenter un code-barres 1D ou un code-barres empilé 2D. Le code-barres RSS 14 (Reduce Space Symbology) encode l'identification complète de l'article EAN.UCC à 14 chiffres dans un symbole qui peut être scanné de manière omnidirectionnelle par des scanners laser de point de vente configurés de manière adéquate. C'est le dernier type de codes-barres pour l'identification avec contrainte d'espace de l'EAN International et du Uniform Code Council, Inc. Les codes-barres RSS sont conçus pour cibler l'industrie de l'épicerie et le secteur de la santé, où les articles sont trop petits pour permettre d'autres symbologies de code-barres. Veuillez noter qu'IronBarcode peut seulement LIRE ce type de code-barres. Ci-dessous un exemple de code-barres Rss14
  • exemple de code-barres 1D Rss14
    1 Dimensional Rss14 Barcode
    exemple de code-barres 2D Rss14
    code-barres Rss14 en 2 dimensions
  • UPCA : Le code universel des produits (UPC) est une symbologie de code-barres largement utilisée aux États-Unis, au Canada, au Royaume-Uni, en Australie, en Nouvelle-Zélande, en Europe et dans d'autres pays pour suivre les articles commerciaux dans les magasins. UPC (se réfère techniquement à UPC-A) se compose de 12 chiffres numériques, qui sont attribués de manière unique à chaque article commercial. Avec le code-barres EAN associé, l'UPC est le code-barres principalement utilisé pour le balayage des articles commerciaux au point de vente, selon les spécifications GS1. UPCA peut seulement encoder du contenu numérique (chiffres) d'une longueur de 12 ou 13 chiffres. Les codes-barres plus courts auront des zéros à la fin (000) préfixés au début du numéro automatiquement. Ci-dessous un exemple d’un code-barres UPCA.
  • Exemple de code-barres UPCA
    Code-barres UPCA
  • UPCE : Afin de permettre l'utilisation des codes-barres UPC sur des emballages plus petits, où un code-barres complet de 12 chiffres pourrait ne pas tenir, une version « sans zéro » du UPC a été développée, appelée UPC-E, dans laquelle le chiffre du système de numérotation, tous les zéros de fin dans le code du fabricant, et tous les zéros en début dans le code produit sont supprimés. UPCE peut seulement encoder un contenu numérique (chiffres) d'une longueur de 7 ou 8 chiffres. Voici un exemple de code-barres UPCE :
  • Exemple de code-barres UPCE
    Code-barres du SEPC

Attendre des codes multiples

Par défaut, IronBarcode scanne tous les codes-barres disponibles dans une image, c'est-à-dire qu'il scanne l'ensemble du fichier image et ajoute les valeurs des codes-barres lus dans le tableau de chaînes de caractères. Toutefois, si les utilisateurs ne souhaitent pas lire plusieurs codes-barres dans un fichier image, ils peuvent définir cette propriété sur false, ce qui fera que le lecteur de codes-barres s'arrêtera de scanner dès qu'une valeur de code-barres aura été trouvée. Cela améliorera à nouveau les performances et la vitesse de lecture d'IronBarcode.

Filtres d'images

L'une des propriétés qui peuvent être ajoutées dans BarcodeReaderOptions est une collection de filtres d'image. Les filtres d'image sont importants pour prétraiter l'image brute envoyée à Iron Barcode. Pour appliquer des filtres d'image dans les BarcodeReaderOptions, les utilisateurs doivent d'abord initier et spécifier la collection ImageFilter à utiliser.

MaxParallelThreads

IronBarcode permet également aux utilisateurs d'activer et de régler le nombre d'exécutions parallèles, ce qui améliore la vitesse et l'efficacité du processus. Les threads parallèles signifient l'exécution simultanée de plusieurs threads sur différents cœurs de processeurs. La valeur par défaut pour la propriété MaxParallelThread dans IronBarcode est 4. Les utilisateurs peuvent les ajuster en fonction des capacités et de la quantité de ressources dont disposent leurs machines.

Multithreaded

Cette propriété permet à IronBarcode de lire plusieurs images en parallèle. La valeur par défaut pour Multihreaded est True, par conséquent, les multiples threads seront gérés automatiquement pour améliorer les performances des tâches de lecture de codes-barres en lot.

Retirer les faux positifs

Cette propriété permet de supprimer toute lecture de code-barres faussement positive. Les lectures de codes-barres faussement positives désignent simplement une lecture erronée de valeurs de codes-barres, mais identifiées comme valides. Cela peut être dû à des erreurs dans le processus de séquençage, telles que des erreurs de séquençage, ou à des erreurs dans le processus d'étiquetage ou de préparation des codes-barres. Par conséquent, définir RemoveFalsePositive comme vrai supprimera les lectures de codes-barres faussement positives, améliorant ainsi la précision de la lecture des codes-barres. Cependant, si les utilisateurs privilégient la performance au détriment de la précision, définir cette propriété sur False serait bénéfique. La valeur par défaut de cette propriété est True.

ScanMode

Définir comment IronBarcode numérise et détecte les codes-barres dans une image.

  • Auto : Lit les codes-barres avec un prétraitement d'image automatique et les options de lecture les plus optimales configurées. Recommandé pour de meilleurs résultats et performances.
  • OnlyDetectionModel : Analyse l'image à la recherche de codes-barres et renvoie leurs positions sous forme de tableau de IronSoftware.Drawing.PointF. Cet mode ne lit pas les codes-barres détectés ; il ne renvoie que les positions de chaque code-barres.
  • MachineLearningScan : Analyse l'image pour détecter les codes-barres à l'aide de la détection par apprentissage automatique et les lit.
  • OnlyBasicScan : Lit les codes-barres sans détection par apprentissage automatique, traitement d'image automatique, ou configuration des options du lecteur.

    Cette option peut être utilisée uniquement avec IronBarCode.Slim.

Vitesse de lecture

Comme son nom l'indique, la propriété Speed permet aux utilisateurs d'optimiser davantage les performances du lecteur IronBarcode. Similaire à la propriété RemoveFalsePositive, ajuster cette propriété améliore les performances au détriment de la précision. Il accepte l'énumération ReadingSpeed, qui comporte 4 niveaux comme indiqué ci-dessous :

  • Plus rapide : Régler la propriété Vitesse sur cette valeur permet une lecture de code-barres la plus rapide, mais réduit la précision. Le processus saute le prétraitement des images, entraînant souvent des résultats de codes-barres vides. N'utilisez ce réglage que si l'image d'entrée est nette et claire.
  • Équilibré : Ce paramètre est recommandé pour la propriété Speed. Il établit un équilibre entre la précision et les performances de lecture en tentant d'appliquer un traitement de la lumière à l'image afin de clarifier la zone du code-barres et de la faire ressortir pour que le lecteur de codes-barres la détecte. La plupart du temps, ce paramètre est suffisant pour qu'IronBarcode lise une image de code-barres et produise un résultat précis.
  • Détaillé : Si l'utilisation du paramètre ReadingSpeed.Balanced ne réussit pas à produire une valeur de code-barres à partir de la lecture, les utilisateurs peuvent choisir d'utiliser ReadingSpeed.Detailed. IronBarcode effectue un traitement moyen de l'image afin de clarifier davantage la zone du code-barres et de permettre au lecteur de code-barres de détecter le code-barres. Ce paramètre est très utile pour détecter une image de code-barres petite ou moins nette.
  • ExtremeDetail : Ce paramètre est le moins recommandé en raison de son processus exigeant en CPU, où un traitement intensif sera effectué sur l'image du code-barres afin que le lecteur puisse lire les codes-barres. Cela réduira considérablement les performances de lecture d'IronBarcode. Il est conseillé aux utilisateurs d'effectuer le prétraitement de l'image ou d'appliquer des filtres sur l'image avant d'opter pour ce paramètre.

    Les utilisateurs sont encouragés à expérimenter d'autres paramètres avant d'utiliser ce paramètre. La combinaison de `ReadingSpeed.Detailed` avec `RemoveFalsePositive` défini sur "True" affichera un avertissement dans la console. Cependant, cela n'affectera pas la lecture et peut être ignoré. --> Les utilisateurs sont encouragés à expérimenter d'autres paramètres avant d'utiliser ce paramètre. La combinaison de `ReadingSpeed.ExtremeDetail` avec `RemoveFalsePositive` défini sur "True" affichera un avertissement dans la console. Cependant, cela n'affectera pas la lecture et peut être ignoré. -->

UseCode39ExtendedMode

Ce paramètre permet de lire et d'interpréter les codes-barres de type Code39 en mode étendu, ce qui permet d'appliquer l'ensemble du jeu de caractères ASCII. Définir UseCode39ExtendedMode sur True activera une lecture plus précise des codes-barres Code39.

Advance Barcode Read from Image

Maintenant que nous avons pris connaissance de toutes les options qui peuvent être modifiées par les utilisateurs, que ce soit pour améliorer les performances ou la précision, voyons comment nous pouvons les appliquer dans notre code. L'extrait de code ci-dessous en est la démonstration.

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-images-2.cs
using IronBarCode;
using System;

BarcodeReaderOptions myOptions = new BarcodeReaderOptions()
{
    ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional, //or AllTwoDimensional
    ExpectMultipleBarcodes = true, // Default is true
    MaxParallelThreads = 2, // Default is 4
    Speed = ReadingSpeed.Detailed, // 4 levels of speed. Default is Balanced
    CropArea = new IronSoftware.Drawing.Rectangle(x: 242, y: 1124, width: 359, height: 378), // Units are in px
    ImageFilters = new ImageFilterCollection { new BinaryThresholdFilter() }, // Assign to image filter object name
    Multithreaded = true, // Default is true
    UseCode39ExtendedMode = true, // Default is true

};

var myBarcode = BarcodeReader.Read(@"image_file_path.jpg", myOptions); // Image file path

foreach (var item in myBarcode)
{
    Console.WriteLine(item.ToString());
}

À partir de l'extrait de code, nous pouvons voir que pour utiliser BarcodeReaderOptions, nous devons d'abord l'initialiser, puis nous pouvons déterminer et ajuster les propriétés de BarcodeReaderOptions selon les propriétés indiquées ci-dessus. Les BarcodeReaderOptions initialisés peuvent ensuite être utilisés comme argument dans la méthode BarcodeReader.Read() avec le fichier image. Cela appliquera tous les paramètres dans BarcodeReaderOptions lors de la lecture du code-barres à partir de l'image.

Hairil Hasyimi Bin Omar
Ingénieur logiciel
Comme tous les grands ingénieurs, Hairil est un fervent apprenant. Il affine ses connaissances en C#, Python et Java, et les utilise pour apporter une valeur ajoutée aux membres de l'équipe d'Iron Software. Hairil a rejoint l'équipe d'Iron Software en provenance de l'Universiti Teknologi MARA en Malaisie, où il a obtenu une licence en génie chimique et des procédés.