Reconnaître les codes-barres postaux avec le VintaSoft Barcode .NET SDK

Catégorie du blog: Code-barres.NET

07.04.2026

Les codes-barres postaux sont devenus un élément clé de la logistique moderne. Ils permettent le tri automatique des lettres et des colis, le suivi des expéditions et la réduction des interventions manuelles. Nous aborderons ci-dessous les différents types de codes-barres postaux, les difficultés rencontrées lors de leur reconnaissance et la méthode pour les identifier dans une application .NET à l'aide de VintaSoft Barcode .NET SDK.


Pourquoi les codes-barres postaux sont-ils nécessaires?

Un code-barres postal est une étiquette lisible par machine qui relie un article physique à des enregistrements dans un système d'information. Un simple ensemble de barres ou de points contient des données importantes pour les entreprises et la logistique.

Un code-barres postal sert généralement à:

Sans ces étiquettes, le traitement en masse des lettres et des colis serait impossible. La mise en œuvre correcte de la lecture des codes-barres a un impact direct sur la vitesse de tri, la qualité du service et les coûts d'exploitation.


Principaux types de codes-barres postaux

Des dizaines de normes sont utilisées dans le monde entier, mais pour créer votre propre système de lecture, il est important de comprendre au moins les groupes de base.

Codes-barres postaux à quatre états (4-State)

Il s'agit d'une catégorie particulière de codes-barres, où chaque barre a l'un des quatre états de hauteur et de position par rapport à la ligne de base. Les codes-barres de cet ensemble sont utilisés par les principaux transporteurs postaux aux États-Unis, au Royaume-Uni, en Australie, au Japon et dans d'autres pays. Ces codes-barres contiennent généralement l'identifiant de l'expéditeur, le type de service, le numéro d'article unique et les informations d'acheminement, tout en restant relativement compacts.


Codes-barres linéaires (1D)

De nombreuses entreprises de logistique et postales utilisent des formats courants comme l'ITF (Interleaved 2 of 5), le Code 128 et d'autres codes-barres unidimensionnels. Ils s'appliquent facilement sur les étiquettes autocollantes et d'expédition, sont facilement lisibles par les scanners et sont pris en charge par la quasi-totalité des kits de développement logiciel (SDK) de reconnaissance de codes-barres.


Codes bidimensionnels (2D)

Les codes Data Matrix et QR sont de plus en plus fréquents dans le secteur postal. On les trouve le plus souvent sur les timbres prépayés, les étiquettes postales combinées et les autocollants supplémentaires pour un suivi amélioré. Les codes-barres 2D contiennent plus de données que les codes linéaires et restent généralement lisibles même partiellement endommagés.


Dans un système réel, vous pouvez rencontrer n'importe quelle combinaison de ces options. Par conséquent,Le SDK que vous choisissez pour votre application .NET doit prendre en charge au moins les formats utilisés par votre opérateur postal ou partenaire logistique.


Les défis de la reconnaissance des codes-barres postaux

En théorie, la reconnaissance des codes-barres est une tâche simple. En pratique, les conditions postales rendent la tâche très difficile pour les développeurs et les algorithmes.

Les problèmes les plus courants:

De ce fait, il est inacceptable de se fier uniquement aux algorithmes les plus simples et aux paramètres de base. Un moteur flexible et résistant aux interférences est nécessaire, ainsi que la possibilité d'affiner les paramètres de reconnaissance des codes-barres. Ce rôle dans les projets .NET peut être assuré par le VintaSoft Barcode .NET SDK.


Options matérielles pour la lecture des codes-barres

La lecture des codes-barres postaux peut s'effectuer à l'aide de différents types d'appareils, et l'architecture de la solution dépend du choix.

Une méthode courante consiste à utiliser des lecteurs de codes-barres matériels prêts à l'emploi. Ces appareils peuvent être portables, embarqués ou fixes. Rapides et fiables, ils sont conçus pour un fonctionnement continu et peuvent souvent décoder de manière autonome les types de codes-barres de base. Cependant, leur intégration avec les applications mobiles et web modernes est moins aisée, et l'extension des formats pris en charge dépend du micrologiciel du fabricant.

Une autre approche consiste à utiliser des caméras universelles et à traiter l'image par logiciel. Dans ce cas, le " scanner " peut être un smartphone, une tablette, une webcam, une caméra industrielle sur une chaîne de production, ou même un scanner de documents standard. La reconnaissance des codes-barres est assurée par une bibliothèque intégrée à l'application .NET. C'est précisément ainsi que fonctionne le scénario VintaSoft Barcode .NET SDK: vous contrôlez les codes-barres à rechercher, le traitement de l'image et l'intégration des résultats dans votre système.


Fonctionnalités du VintaSoft Barcode .NET SDK

VintaSoft Barcode .NET SDK est un outil professionnel de reconnaissance et de génération de codes-barres dans l'écosystème .NET. Les fonctionnalités suivantes sont particulièrement importantes pour la logistique postale.

Premièrement, le VintaSoft Barcode .NET SDK prend en charge une large gamme de codes-barres. Il s'agit notamment des codes-barres postaux de quatre États, ainsi que des codes-barres linéaires et 2D couramment utilisés sur les enveloppes, les colis, les timbres et les étiquettes logistiques. Cela permet à une solution unique de gérer à la fois les marquages ​​postaux internes et les codes-barres des services de livraison partenaires.

Deuxièmement, le VintaSoft Barcode .NET SDK est conçu pour traiter des images complexes issues du monde réel. Ses algorithmes gèrent le bruit, l'inclinaison, les imperfections d'impression et la petite taille des codes-barres dans le cadre. Ceci est essentiel lorsqu'un opérateur filme un colis avec un téléphone portable ou lorsqu'une caméra de convoyeur produit une vidéo de qualité médiocre.

Troisièmement, le développeur dispose de paramètres flexibles. Il peut spécifier une liste de types de codes-barres à rechercher, privilégier la vitesse et la qualité, limiter la zone de recherche à un rectangle d'intérêt et indiquer le nombre de codes attendus dans une image. Cette personnalisation permet d'adapter le SDK aux lignes de tri, aux types de supports et aux flux de travail des opérateurs.

Enfin, le VintaSoft Barcode .NET SDK s'intègre facilement à différents types d'applications .NET. Cette bibliothèque peut être utilisée dans les solutions de bureau, les services serveur, les services web et les applications mobiles développées avec les versions récentes de .NET. Il est ainsi possible de mettre en place une architecture de reconnaissance de codes-barres unifiée pour l'ensemble du système informatique d'une entreprise.


Processus étape par étape pour la lecture des codes-barres postaux

Examinons un flux de travail typique que vous pourriez implémenter dans votre application .NET en utilisant le VintaSoft Barcode .NET SDK.

1. Commencez par obtenir une image de l'enveloppe ou du colis. Il peut s'agir d'un fichier téléchargé, d'un document numérisé, d'une image extraite d'un flux vidéo ou d'une photo prise avec l'appareil photo d'un téléphone mobile. À cette étape, il est important de contrôler la taille et la qualité de l'image afin de garantir que les codes-barres occupent un nombre suffisant de pixels et ne soient pas perdus lors du redimensionnement.

2. Ensuite, sélectionnez un ensemble de types de codes-barres pris en charge. Par exemple, vous pouvez spécifier un code-barres postal à quatre états, un ou deux types ITF et un code-barres Data Matrix, si c'est celui utilisé par votre transporteur. Cette limitation améliore la vitesse et réduit les faux positifs dus aux motifs aléatoires, aux textures et aux artefacts.

3. Vient ensuite la reconnaissance proprement dite des codes-barres. L'application appelle l'API VintaSoft Barcode .NET SDK, lui transmet une image et reçoit une liste des codes-barres détectés. Pour chaque résultat, la bibliothèque renvoie le type de code-barres, une chaîne de caractères, les coordonnées de la zone de l'image et plusieurs paramètres supplémentaires. Un seul appel peut renvoyer plusieurs codes-barres simultanément, si l'image contient, par exemple, un code postal et un code-barres logistique de transporteur.

4. L'étape suivante consiste à analyser et valider les données reçues. La chaîne de caractères est analysée selon le format interne de l'opérateur postal. On peut en extraire le code postal, le numéro d'envoi unique, l'identifiant client, le code de service et d'autres champs logiques. Ce niveau comprend la vérification de la longueur et de la structure, la mise en correspondance avec la base de données, la vérification du chiffre de contrôle et, si nécessaire, le masquage ou le chiffrement des données sensibles.

5. La dernière étape consiste à intégrer les résultats à la logique métier. Les données reconnues servent à mettre à jour le statut des expéditions, à générer automatiquement les itinéraires et à enregistrer les opérations de réception, de tri et d'expédition. L'interface opérateur peut mettre en évidence la zone du code-barres, afficher une description détaillée et proposer une nouvelle lecture si le niveau de confiance est faible.


Recommandations pratiques de configuration

Pour garantir une lecture fiable et rapide des codes-barres postaux à l'aide du VintaSoft Barcode .NET SDK, il est utile de prendre en compte plusieurs points pratiques.

Premièrement, si possible, limitez la liste des formats de codes-barres reconnus aux seuls types de codes-barres réellement utilisés. Cela réduira le temps de traitement et le risque que du bruit ou une partie d'un logo soit interprétée par erreur comme un autre type de code-barres.

Deuxièmement, sélectionnez soigneusement la zone de recherche. Si un code-barres est presque toujours imprimé dans une zone spécifique de l'enveloppe ou de l'étiquette, définissez un rectangle d'intérêt et analysez uniquement cette zone. Cette technique est particulièrement utile lors du traitement d'images volumineuses et de flux vidéo.

Troisièmement, testez différents profils de vitesse et de qualité. Pour les centres de tri à forte activité où le débit est crucial, le SDK peut être configuré pour une vitesse de reconnaissance maximale, en se concentrant sur les codes-barres typiques et intacts. Pour les scénarios impliquant des envois juridiquement importants et un grand nombre d'étiquettes problématiques, il est judicieux d'activer des modes d'analyse plus approfondis.

Quatrièmement, n'oubliez pas les conditions de prise de vue. Même le SDK le plus avancé ne peut compenser l'obscurité totale ou les reflets importants des lampes et des vitrines. L'interface opérateur peut inclure le guidage de la caméra, l'affichage du niveau d'éclairage, le zoom automatique et le recadrage de la zone du code-barres. Tout cela, combiné aux capacités du VintaSoft Barcode .NET SDK, augmente considérablement le pourcentage final de codes-barres postaux lus avec succès.

Conclusion

La numérisation et l'analyse des codes-barres postaux ne se limitent pas à la simple " reconnaissance de bandes dans une image ". Cette tâche implique un ensemble complexe d'exigences: une variété de formats, des conditions d'impression et de prise de vue imparfaites, un débit de données élevé et la nécessité de traiter avec précision de grands volumes de données. En utilisant une solution .NET spécialisée comme VintaSoft Barcode .NET SDK, vous pouvez vous concentrer sur la logique métier et confier le traitement, le décodage et la validation de base des images à un outil éprouvé. Une configuration correcte du SDK et des tests approfondis sur des échantillons réels de lettres et de colis vous permettront de construire un système fiable qui deviendra la base du suivi moderne et de l'automatisation de la logistique postale.


Voici un exemple de code C# montrant comment reconnaître les codes-barres postaux dans une image prise par un appareil photo:
/// <summary>
/// Recognizes postal barcodes from a <see cref="System.Drawing.Bitmap"/>.
/// </summary>
/// <param name="bitmap">A bitmap with barcodes.</param>
public static void RecognizePostalBarcodesFromBitmap(System.Drawing.Bitmap bitmap)
{
    // create barcode reader
    using (Vintasoft.Barcode.BarcodeReader reader = new Vintasoft.Barcode.BarcodeReader())
    {
        // specify that barcode reader must search for Postnet barcodes
        reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.Postnet;
        // specify that barcode reader must search for Planet barcodes
        reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.Planet;
        // specify that barcode reader must search for Intelligent Mail barcodes
        reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.IntelligentMail;
        // specify that barcode reader must search for Australian Post barcodes
        reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.AustralianPost;
        // specify that barcode reader must search for Japan Post barcodes
        reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.JapanPost;
        // specify that barcode reader must search for Dutch KIX barcodes
        reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.DutchKIX;
        // specify that barcode reader must search for Royal Mail barcodes
        reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.RoyalMail;
        // specify that barcode reader must search for Royal Mail Mailmark 4-state barcode C barcodes
        reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.Mailmark4StateC;
        // specify that barcode reader must search for Royal Mail Mailmark 4-state barcode L barcodes
        reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.Mailmark4StateL;

        // specify that barcode reader must search for Deutsche Post Identcode barcodes
        reader.Settings.ScanBarcodeSubsets.Add(Vintasoft.Barcode.SymbologySubsets.BarcodeSymbologySubsets.DeutschePostIdentcodeBarcodeSymbology);
        // specify that barcode reader must search for Deutsche Post Leitcode barcodes
        reader.Settings.ScanBarcodeSubsets.Add(Vintasoft.Barcode.SymbologySubsets.BarcodeSymbologySubsets.DeutschePostLeitcodeBarcodeSymbology);
        // specify that barcode reader must search for DHL AWB barcodes
        reader.Settings.ScanBarcodeSubsets.Add(Vintasoft.Barcode.SymbologySubsets.BarcodeSymbologySubsets.DhlAwbBarcodeSymbology);
        // specify that barcode reader must search for FedEx Ground 96 barcodes
        reader.Settings.ScanBarcodeSubsets.Add(Vintasoft.Barcode.SymbologySubsets.BarcodeSymbologySubsets.FedExGround96BarcodeSymbology);
        // specify that barcode reader must search for Italian Post 2 of 5 barcodes
        reader.Settings.ScanBarcodeSubsets.Add(Vintasoft.Barcode.SymbologySubsets.BarcodeSymbologySubsets.ItalianPost2of5);
        // specify that barcode reader must search for Royal Mail Mailmark CMDM Type29 2D barcodes
        reader.Settings.ScanBarcodeSubsets.Add(Vintasoft.Barcode.SymbologySubsets.BarcodeSymbologySubsets.MailmarkCmdmType29BarcodeSymbology);
        // specify that barcode reader must search for Royal Mail Mailmark CMDM Type7 2D barcodes
        reader.Settings.ScanBarcodeSubsets.Add(Vintasoft.Barcode.SymbologySubsets.BarcodeSymbologySubsets.MailmarkCmdmType7BarcodeSymbology);
        // specify that barcode reader must search for Royal Mail Mailmark CMDM Type9 2D barcodes
        reader.Settings.ScanBarcodeSubsets.Add(Vintasoft.Barcode.SymbologySubsets.BarcodeSymbologySubsets.MailmarkCmdmType9BarcodeSymbology);
        // specify that barcode reader must search for Swiss PostParcel barcodes
        reader.Settings.ScanBarcodeSubsets.Add(Vintasoft.Barcode.SymbologySubsets.BarcodeSymbologySubsets.SwissPostParcelBarcodeSymbology);
 
        // read barcodes from image
        Vintasoft.Barcode.IBarcodeInfo[] infos = Vintasoft.Barcode.GdiExtensions.ReadBarcodes(reader, bitmap);

        // if barcodes are not detected
        if (infos.Length == 0)
        {
            System.Console.WriteLine("No barcodes found.");
        }
        // if barcodes are detected
        else
        {
            // get information about extracted barcodes

            System.Console.WriteLine(string.Format("{0} barcodes found:", infos.Length));
            System.Console.WriteLine();
            for (int i = 0; i < infos.Length; i++)
            {
                Vintasoft.Barcode.IBarcodeInfo info = infos[i];
                System.Console.WriteLine(string.Format("[{0}:{1}]", i + 1, info.BarcodeType));
                System.Console.WriteLine(string.Format("Value:      {0}", info.Value));
                System.Console.WriteLine(string.Format("Region:     {0}", info.Region));
                System.Console.WriteLine();
            }
        }
    }
}