Reconnaissance des codes-barres matriciels 2D avec distorsions spatiales en .NET

Catégorie du blog: Code-barres.NET

06.05.2020

VintaSoft Barcode .NET SDK peut être utilisé dans les applications .NET/C# pour la reconnaissance des codes-barres bidimensionnels de type Aztec, QR Code et Han Xin Code, même en présence de distorsions de surface aléatoires. En pratique, cela simplifie considérablement la reconnaissance des codes-barres à partir d'un appareil photo, d'une webcam ou d'un smartphone, car il n'est plus nécessaire d'aligner le code-barres devant l'objectif; la reconnaissance est même possible sur des surfaces irrégulières.




Nos développeurs ont consacré de nombreuses heures passionnantes au développement et à l'amélioration de l'algorithme de correction de la distorsion à l'aide de caméras web et photographiques. Vous pouvez observer ci-dessous ces codes-barres à travers les "yeux" de notre lecteur de codes-barres:



À un moment donné, nos développeurs ont commencé à voir les codes-barres exactement comme ceci. :)


Voici un code C# permettant de reconnaître les codes-barres Aztec, QR et Han Xin Code présentant des distorsions spatiales:
/// <summary>
/// Recognizes 2D matrix barcodes (Aztec, QR Code and Han Xin Code) with spatial distortions.
/// </summary>
public void Recognize2dBarcodeWithSpatialDistortions()
{
    // create barcode reader
    using (Vintasoft.Barcode.BarcodeReader reader = new Vintasoft.Barcode.BarcodeReader())
    {
        // specify that reader must search for Aztec, QR and Han Xin Code barcodes
        reader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.Aztec |
            Vintasoft.Barcode.BarcodeType.QR |
            Vintasoft.Barcode.BarcodeType.HanXinCode;

        // specify that reader must search for horizontal and vertical barcodes only
        reader.Settings.ScanDirection = Vintasoft.Barcode.ScanDirection.Horizontal | Vintasoft.Barcode.ScanDirection.Vertical;

        // read barcodes from image file
        Vintasoft.Barcode.IBarcodeInfo[] barcodeInfos = reader.ReadBarcodes("barcodes.png");

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

            System.Console.WriteLine(string.Format("{0} barcode(s) found:", barcodeInfos.Length));
            System.Console.WriteLine();
            for (int i = 0; i &lt; barcodeInfos.Length; i++)
            {
                Vintasoft.Barcode.IBarcodeInfo barcodeInfo = barcodeInfos[i];
                System.Console.WriteLine(string.Format("[{0}:{1}]", i + 1, barcodeInfo.BarcodeType));
                System.Console.WriteLine(string.Format("Value:      {0}", barcodeInfo.Value));
                System.Console.WriteLine(string.Format("Region:     {0}", barcodeInfo.Region));
                System.Console.WriteLine();
            }
        }
    }
}


Les tests ont montré que le lecteur de codes-barres peut gérer avec succès un ou plusieurs des types de distorsions suivants:

Voici quelques images de codes-barres déformés:













Vous trouverez d'autres images avec des codes-barres déformés dans le package de distribution de VintaSoft Barcode .NET SDK.

Si vous rencontrez des problèmes de reconnaissance de codes-barres et que vous pensez que notre algorithme de reconnaissance de codes-barres pourrait les résoudre, veuillez envoyer vos images pour test et examen à support@vintasoft.com.