Comment lire des codes-barres à partir de fichiers images (jpg, png, gif, tiff, svg, bmp) ?
Comment lire des codes-barres à partir d'une image en C#
- Télécharger la bibliothèque C# pour lire les codes-barres à partir d'une image
- Utilisation
Lire
méthode pour lire la valeur d'un code-barres à partir de différents formats d'image - Utiliser BarcodeReaderOptions pour configurer les paramètres de lecture
- Spécifier la région du code-barres sur l'image avec Superficie des cultures propriété
- Spécifiez le type de code-barres en définissant Types de codes-barres attendus propriété
Commencez à utiliser IronBarcode dans votre projet dès aujourd'hui avec un essai gratuit.
Lecture directe des codes-barres à partir d'une image
L'une des principales caractéristiques d'IronBarcode est sa capacité à lire les codes-barres à partir de plusieurs formats d'image. Il s'agit notamment de
* Graphiques vectoriels évolutifs(SVG)
* Groupe mixte d'experts en photographie(JPEG)
* Graphique en réseau portable(PNG)
* Format d'échange de graphiques(GIF)
* Format de fichier image étiqueté(TIFF)
* Fichier image bitmap(BMP)
Cela est possible grâce à notre bibliothèque open source, Dessin au fer. Voyons maintenant comment utiliser IronBarcode pour lire des codes-barres à partir de deux images de codes-barres jointes, comme le montre l'extrait de code ci-dessous.
: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());
}
Imports IronBarCode
Imports System
Private myBarcode = BarcodeReader.Read("image_file_path.jpg") 'image file path
For Each item In myBarcode
Console.WriteLine(item.ToString())
Next item
Vous voulez savoir quelles sont les valeurs des codes-barres dans les échantillons ? Essayez 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 à IronBarcode BarcodeReader.Read()
method to directly read barcode image.
Dans l'extrait de code ci-dessus, nous pouvons voir qu'IronBarcode offre la simplicité en permettant aux utilisateurs de n'utiliser que la fonction BarcodeReader.Read()
pour lire un fichier image qui a déjà été inclus dans le projet en spécifiant l'option nom du fichier chaîne de caractères, OU chemin d'accès au 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.
Joindre Valeurs()
à la fin de la méthode BarcodeReader.Read()
pour obtenir la valeur du code-barres sous la forme d'un fichier System.String []
object.
Pour obtenir le résultat dans la console, vous pouvez utiliser foreach
pour itérer sur les valeurs stockées dans la base de données chaîne de caractères []
et à l'intérieur du bloc de la boucle, appeler Console.WriteLine()
method with the iterator variable as the parameter.
Cette méthode ne permet pas seulement de lire les formats de codes-barres unidimensionnels(Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, UPCE)il est également capable de lire les formats de codes-barres bidimensionnels(Aztec, DataMatrix, QRCode) dans différents 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 régler ou d'ajuster le comportement du lecteur de codes-barres de manière à ce qu'il puisse résoudre tous les problèmes mentionnés ci-dessus. Voyons et discutons en détail toutes les propriétés ajustables disponibles en BarcodeReaderOptions
un par un :
Superficie des cultures
Superficie des cultures
est une propriété de type IronSoftware.Drawing.CropRectangle
disponible en BarcodeReaderOptions
qui permet aux utilisateurs de spécifier la zone d'une image qu'ils veulent 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 régler la Superficie des cultures
il suffit d'instancier un nouvel objet de type Rectangle et de spécifier les coordonnées, la largeur et la longueur du rectangle 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 la propriété Types de codes-barres attendus
à l'un des champs de BarcodeEncoding
enum. Découvrons tous les types de codes-barres pris en charge par IronBarcode et examinons un exemple de code-barres de chaque type.
- Toutes les dimensions : Types linéaires de codes-barres. This includes Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, UPCE barcodes.
- Toutes les deux dimensions : Il s'agit des codes-barres en grille, matriciels et empilés. The barcode type that falls under 2 Dimensional barcodes are Aztec, DataMatrix, QRCode barcodes.
- Aztèque : 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é d'après la ressemblance du motif central avec une pyramide aztèque, le code Aztec a le potentiel d'utiliser moins d'espace que d'autres codes-barres matriciels parce qu'il ne nécessite pas de "zone silencieuse" entourée de blanc. Voici un exemple de 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 données numériques (chiffres) uniquement. Voici un exemple de code-barres Codabar
- Code128 : Le 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 alphanumérique ou numérique uniquement codes-barres. Voici un exemple de code-barres Code128
- Code39 : Le Code 39 est une symbologie de codes-barres discrets de longueur variable. La spécification du Code 39 définit 43 caractères, composés de lettres majuscules (de A à Z). Voici un exemple de code-barres Code39
- Code93 : Code 93 format de code-barres 1D. Le Code 93 est une symbologie de code-barres conçue en 1982 par Intermec pour améliorer la densité et la sécurité des données par rapport au Code 39. Le Code 93 prend en charge l'encodage de uniquement les 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 - . $ / + % SPACE. Voici un exemple de code-barres Code93
- Matrice de données : Une matrice de données est un code-barres bidimensionnel composé de "cellules" ou de modules noirs et blancs disposés selon un modèle carré ou rectangulaire, également appelé matrice. Les informations à encoder peuvent être données textuelles ou numériques. La taille habituelle des données varie de quelques octets à 1556 octets. Voici un exemple de code-barres DataMatrix
- EAN13 : Le numéro d'article international (également 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és dans le commerce mondial pour identifier un type de produit de détail spécifique, dans une configuration d'emballage spécifique, provenant d'un fabricant spécifique. L'EAN-13 peut n'encoder que le contenu numérique (chiffres) d'une longueur de 12 ou 13 chiffres. Pour les codes-barres plus courts, les zéros de fin (000) sont automatiquement ajoutés au début du numéro. Voici un exemple de code-barres EAN13
- EAN8 : Le code EAN-8 est un code-barres de la symbologie EAN/UPC et est dérivé du code EAN-13 (International Article Number), plus long. L'EAN-8 peut n'encoder que le contenu numérique (chiffres) d'une longueur de 7 ou 8 chiffres. Pour les codes-barres plus courts, les zéros de fin (000) sont automatiquement ajoutés au début du numéro. Voici un exemple de code-barres EAN8
- IntelligentMail : Format du code-barres 2D du courrier intelligent. 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 destiné à être utilisé sur 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 du courrier national. Le code-barres IM est destiné à fournir davantage d'informations et de fonctionnalités que ses prédécesseurs POSTNET et PLANET. Veuillez noter qu'IronBarcode peut uniquement READ ce type de code-barres. Voici un exemple de code-barres de ce type
- ITF : ITF-14 est l'implémentation GS1 d'un code à barres entrelacé 2 sur 5 (ITF) pour coder un numéro d'article du commerce mondial. Les symboles ITF-14 sont généralement utilisés sur les niveaux d'emballage d'un produit, comme une boîte de 24 boîtes de soupe. L'ITF-14 codera toujours 14 chiffres. L'ITF encode données numériques uniquement. Si le nombre de chiffres n'est pas pair, un '0' sera automatiquement ajouté. Voici un exemple de code-barres ITF
- MaxiCode : Format de code-barres MaxiCode 2D. MaxiCode est un système de symboles lisibles par machine relevant du domaine public, créé et utilisé à l'origine par United Parcel Service. Adapté au suivi et à la gestion de l'expédition des colis, il ressemble à un code-barres, mais utilise des points disposés dans une grille hexagonale. Veuillez noter qu'IronBarcode peut uniquement READ ce type de code-barres. Voici un exemple de code-barres de ce type
- MSI : MSI est une symbologie de code-barres développée par MSI Data Corporation, basée sur la symbologie originale Plessey Code. Ce type de code-barres n'accepte que des valeurs numériques. Voici un exemple de code-barres de type 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 (fichier de données portable). Le 417 signifie que chaque motif du code est composé de 4 barres et d'espaces, et que chaque motif a une longueur de 17 unités. La symbologie PDF417 a été inventée par le Dr Ynjiun P. Wang de Symbol Technologies en 1991. (Wang 1993) C'est la norme ISO 15438. Voici un exemple de code-barres PDF417
- Code pharmaceutique : Code binaire pharmaceutique. Un code-barres binaire tolérant aux erreurs de lecture, utilisé dans l'industrie médicale. Veuillez noter qu'IronBarcode peut uniquement READ ce type de code-barres. Voici un exemple de code-barres PharmaCode
- Plessey : Le code Plessey est une symbologie de code-barres linéaire 1D basée sur la modulation de largeur d'impulsion, développée en 1971 par The Plessey Company PLC, une société britannique. Ce type de code-barres n'accepte que des valeurs numériques. Voici un exemple de code-barres Plessey
- QRCode : QR code (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 une machine qui contient des informations sur l'article auquel elle est attachée. Un code QR utilise quatre modes d'encodage standardisés (numérique, alphanumérique, octet/binaire et kanji) pour stocker efficacement les données ; des extensions peuvent également être utilisées. Voici un exemple de code-barres QR
- Rss14 : Réduire l'espace Symbologie 14 format de code à barres. Peut représenter un code-barres 1D ou un code-barres 2D empilé. Le code-barres RSS 14 (Reduce Space Symbology) encode l'identification complète à 14 chiffres de l'article EAN.UCC dans un symbole qui peut être scanné de manière omnidirectionnelle par des scanners laser de point de vente configurés de manière appropriée. Il s'agit du dernier type de code-barres pour l'identification en espace restreint d'EAN International et d'Uniform Code Council, Inc. Les codes-barres RSS ont été identifiés pour cibler le secteur de l'épicerie et des soins de santé, où les articles sont trop petits pour permettre l'utilisation d'autres symbologies de codes-barres. Veuillez noter qu'IronBarcode peut uniquement READ ce type de code-barres. Voici un exemple de code-barres Rss14
- 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 le suivi des articles commerciaux dans les magasins. Le code UPC (techniquement appelé UPC-A) se compose de 12 chiffres, qui sont attribués de manière unique à chaque article commercial. Avec le code-barres EAN, l'UPC est le code-barres principalement utilisé pour scanner les articles commerciaux au point de vente, conformément aux spécifications du GS1. L'UPCA peut n'encoder que le contenu numérique (chiffres) d'une longueur de 12 ou 13 chiffres. Pour les codes-barres plus courts, les zéros de fin (000) sont automatiquement ajoutés au début du numéro. Voici un exemple de code-barres UPCA
- SEPC : Pour permettre l'utilisation des codes-barres UPC sur des emballages plus petits, où un code-barres complet à 12 chiffres n'est pas adapté, une version "supprimée du zéro" de l'UPC a été développée, appelée UPC-E, dans laquelle le chiffre du système numérique, tous les zéros de fin du code du fabricant et tous les zéros de tête du code du produit sont supprimés. L'UPCE peut n'encoder que le contenu numérique (chiffres) d'une longueur de 7 ou 8 chiffres. Voici un exemple de code-barres UPCE
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 fixer cette propriété à faux
qui permet au lecteur de code-barres d'arrêter le balayage dès qu'une valeur de code-barres a é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'images. Les filtres d'image sont importants pour prétraiter l'image brute envoyée à Iron Barcode. Pour appliquer des filtres d'image à l'intérieur du BarcodeReaderOptions
les utilisateurs doivent d'abord initier et spécifier le Filtre d'image
à 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. Montant par défaut pour MaxParallelThread
dans IronBarcode est de 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 de l'option Multihreaded
est Vrailes threads multiples seront donc gérés automatiquement afin d'améliorer les performances pour les tâches de lecture de codes-barres par lots.
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, le réglage de Retirer les faux positifs
comme vrai éliminera les lectures de codes-barres faussement positives, améliorant ainsi la précision de la lecture des codes-barres. Toutefois, si les utilisateurs recherchent la performance au détriment de la précision, le réglage de cette propriété sur Faux serait utile. La valeur par défaut de cette propriété est Vrai.
Vitesse
Comme son nom l'indique, Vitesse
permettent aux utilisateurs d'optimiser davantage les performances du lecteur de codes-barres IronBarcode. Idem Retirer les faux positifs
la modification de cette propriété améliorera les performances au détriment de la précision, mais à 4 niveaux, comme indiqué ci-dessous :
ReadingSpeed.Faster
Réglage de la
Vitesse
à cette valeur rendra la lecture des codes-barres plus rapide, mais au détriment de la précision. Le programme finira de s'exécuter rapidement, mais donnera la plupart du temps un code-barres vide. Ceci est dû au fait que l'image d'entrée n'est pas prétraitée à tous et IronBarcode lit l'image du code-barres telle quelle. Les utilisateurs sont invités à n'utiliser cette valeur que s'ils sont sûrs que l'image d'entrée est nette et claire.ReadingSpeed.Balanced
Ce réglage est recommandé pour les
Vitesse
propriété. 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.ReadingSpeed.Detailed
En cas d'utilisation du réglage
ReadingSpeed.Balanced
ne réussit pas à produire une valeur de code-barres à partir de la lecture, les utilisateurs peuvent opter pour l'utilisation deReadingSpeed.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.Notez toutefois que ce paramètre est gourmand en ressources processeur et peut affecter les performances de lecture. Les utilisateurs sont encouragés à expérimenter d'autres paramètres avant d'utiliser ce paramètre. Combinaison de
ReadingSpeed.Detailed
avecRetirer les faux positifs
avec la valeur "True", un avertissement est affiché sur la console. Cependant, cela n'affectera pas la lecture et peut être ignoré.ReadingSpeed.ExtremeDetail
Ce réglage est le le moins ce paramètre est recommandé en raison du processus intensif de l'unité centrale, un traitement lourd étant 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.
Notez toutefois que ce paramètre est gourmand en ressources processeur et peut affecter les performances de lecture. Les utilisateurs sont encouragés à expérimenter d'autres paramètres avant d'utiliser ce paramètre. Combinaison de
ReadingSpeed.ExtremeDetail
avecRetirer les faux positifs
avec la valeur "True", un avertissement est affiché sur 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. Paramètres UseCode39ExtendedMode
à Vrai permettra 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());
}
Imports IronBarCode
Imports System
Private myOptions As New BarcodeReaderOptions() With {
.ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional,
.ExpectMultipleBarcodes = True,
.MaxParallelThreads = 2,
.Speed = ReadingSpeed.Detailed,
.CropArea = New IronSoftware.Drawing.Rectangle(x:= 242, y:= 1124, width:= 359, height:= 378),
.ImageFilters = New ImageFilterCollection From {New BinaryThresholdFilter()},
.Multithreaded = True,
.UseCode39ExtendedMode = True
}
Private myBarcode = BarcodeReader.Read("image_file_path.jpg", myOptions) ' Image file path
For Each item In myBarcode
Console.WriteLine(item.ToString())
Next item
D'après l'extrait de code, nous pouvons voir que pour utiliser la fonction BarcodeReaderOptions
nous devons d'abord l'initialiser, puis nous pouvons déterminer et ajuster les propriétés de l'élément BarcodeReaderOptions
selon les propriétés énoncées ci-dessus. Les données initialisées BarcodeReaderOptions
peut ensuite être utilisé comme argument dans BarcodeReader.Read()
avec le fichier image. Cette méthode appliquera tous les paramètres de la méthode BarcodeReaderOptions
lors de la lecture du code-barres de l'image.